我想圍繞Haskell的語法包紮頭腦。守衛和匿名函數列表
這個問題很簡單,邏輯解決。我必須分解一個正整數和負整數的列表,並將它們分組,使得
[1,2,3,-1,-2,-3,1,2,3]變成[[1,2, 3],[ - 1,-2,-3],[1,2,3]]
我想使用更高階的函數,foldr可以用一個匿名函數arguements。
這是我到目前爲止。
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
我有兩個問題。
1)爲什麼我在第7行出現類型錯誤?
我這不是連接來整數列表(頭Y)
2)你怎麼寫出來的使用警衛下述條件的整數(X)?我試圖做到這一點,但我一直收到parsing error at '|'
啊。非常感謝!如果說'擁有'x'頭部',我不會在某種意義上「返回」列表的列表,而只是列表? – ali
是的,這是問題所在。 –