Haskell の構文に頭を悩ませようとしています。
この問題は、論理的に解決するのが非常に簡単です。正の整数と負の整数のリストを分割し、それらを次のようにグループ化する必要があります。
[1,2,3,-1,-2,-3,1,2,3] は [[1,2,3],[-1,-2,-3], [1,2,3] になります。 ]
2 つの引数を受け取る無名関数でそれを実行できるようにするには、高階関数 foldr を使用したいと思います。
これは私がこれまでに持っているものです。
split = foldr (\ x y -> if (x > 0)
then if (head (head y)) < 0
then [x] : y
else x : head y --error here
else if (x < 0)
then if (head (head y)) > 0
then [x] : y
else x : head y
else y
)
[[]]
これは私が得るエラーです
Occurs check: cannot construct the infinite type: a0 = [a0]
In the first argument of `(:)', namely `x'
In the expression: x : head y
In the expression:
if (head (head y)) < 0 then [x] : y else x : head y
2 つの質問があります。
1) 7 行目で型エラーが発生するのはなぜですか?
整数 (x) を整数のリスト (head y) に連結していませんか?
2) ガードを使用して条件をどのように書き出すのですか? 私はそれをやってみましたが、私は得続けましたparsing error at '|'