2017-04-14 30 views
0

我打算假设在Fractal Mandelbrot的情况下,escapeCount f (C comp3)f代表Mandelbrot数据类型。我将如何访问诸如MaxIter之类的元素。我是否必须为每个可能需要的元素编写定义?如何从实例中的数据定义中获取特定类型?

type MaxIter = Int 
    type Row = Int 
    type Col = Int 
    data Complex = C Double Double     deriving (Show,Eq) 
    data Mandelbrot = M MaxIter Row Col Complex Complex deriving (Eq) 

    class (Show f) => Fractal f where 
    escapeCount :: f -> Complex -> Int 

    instance Fractal Mandelbrot where 
       escapeCount f (C comp3) = <- I assume this means that comp3 is of type C? 

回答

1

我不知道你要完成什么样的细节,但你可以通过模式匹配访问这些数据类型的部分:

instance Fractal Mandelbrot where 
    escapeCount (M maxIter row col c1 c2) c3 = ... 

这使得部分可用内函数作为变量maxIterrowcol

你可以根据需要尽可能多的模式匹配:

escapeCount (M maxIter row col (C real1 imag1) (C real2 imag2)) (C real3 imag3) = ... 

此外,我建议Complex datatype from Data.Complex,而不是自己做。它已经有一个Num实例,所以你可以像正常数字一样添加,减去等等,以及一些有用的函数。

+0

谢谢,不幸的是我必须让自己的复杂。此外,escapeCount有一个我试图在实例下实现的签名,但是如何访问它需要的第二个“参数”?另外当我试图做模式匹配它说变量不在范围内? – octoCat

相关问题