ハスケルを学んでいるとき、与えられた数のすべての整数除数を返す関数を作ろうとしています。だから、2つのネストされたwhere
句を使用して作成しましたが、動作しません。 exs2.hs:49:24: Parse error in pattern: negRef/2
ハスケルで入れ子になった `where`節を使う
divisors' :: (Integral a) => a -> [a]
divisors' x = divs x (x/2) [x]
where
divs ref 1 list = negDiv (-ref) (-2) ((-1):1:list)
divs ref num list = if (mod ref num == 0) then divs ref (num-1) (num:list) else divs ref (num-1) list
where
negDiv negRef (negRef/2) negList = (negRef:(negRef/2):negList)
negDiv negRef negNum negList = if (mod negRef negNum == 0) then negDiv (negNum-1) (negNum:negList) else negDiv (negNum-1) negList
その後、間違ったことは何ですか:
エラーがを返さ?それはよくインデントされているようです。
'negRef/2'は有効なパターンではありません。 – MathematicalOrchid
内部where句は、divの定義の2行目のスコープ内にのみあります。 divsの最初の行がnegDivを呼び出すとき、内部のwhere節はスコープにありません。それとパターンのこと。 – pigworker
それでは、どうすればその分割パターンを正しく書くことができますか? @MathematicalOrchid – fant0me