我有一個任務,我有點卡住了:
xs = [4, 1]
ys = [3, 2]
目標是創建一個串列[1, 2, 3, 4]
我可以使用以下命令:
head, tail, , !!, reverse, take, drop,init
我知道這tail xs (reverse ys)會導致[1, 2, 3]
但我如何得到4最后?
我的“解決方案”應該是這樣的:
zs = tail xs (reverse ys (head xs)
zs = [1, 2, 3, 4]
但我得到以下錯誤:
<interactive>:39:1: error:
* Non type-variable argument in the constraint: Num [a]
(Use FlexibleContexts to permit this)
* When checking the inferred type
it :: forall a. (Num a, Num [a]) => [a]
問題是我不知道這意味著什么如果有人能解釋一下括號在haskell中的作業原理以及我如何解決問題,那就太好了。
uj5u.com熱心網友回復:
您的演示嘗試中有不平衡的括號。
tail xs (reverse ys (head xs)
假設您的意思是:
tail xs (reverse ys (head xs))
head xs不是串列,因此使用它 會產生錯誤。但是我們可以很容易地把它變成一個包含單個元素的串列。
tail xs (reverse ys [head xs])
這現在產生[1, 2, 3, 4],但您可以進一步洗掉括號,因為 關聯的方式。
tail xs reverse ys [head xs]
轉載請註明出處,本文鏈接:https://www.uj5u.com/qiye/528510.html
標籤:哈斯克尔函数式编程
上一篇:這個lambda函式有什么問題?
下一篇:Haskell簽入串列
