2017-04-14 2 views
0

Fractal Mandelbrotのインスタンスでは、escapeCount f (C comp3)の場合、fMandelbrotのデータ型を表します。どのように私は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には、インスタンスの下で実装しようとしている署名がありますが、どのように2番目の "パラメータ"にアクセスするのですか?パターンマッチングをしようとしたときに、変数が範囲外であると言いましたか? – octoCat

関連する問題