【发布时间】:2011-02-24 12:35:52
【问题描述】:
我正在自学 Haskell,学习任何编程语言的最佳方式就是使用它。我目前的“练习”是 take 的实现。伪代码为:
take(0, list) = [] --empty list
take(n, list) = const(head(list), take(n-1, tail(list))
我在 Haskell 中所做的是:
myTake :: (Num a) => a -> [b] -> [b]
myTake 0 l = []
myTake n (l:ls) = l : myTake n-1 ls
当我在 GHCi 中加载文件时,这不会编译。这是我收到的错误消息:
Couldn't match expected type `[b]'
against inferred type `[b1] -> [b1]'
In the second argument of `(:)', namely `myTake n - 1 ls'
In the expression: l : myTake n - 1 ls
In the definition of `myTake':
myTake n (l : ls) = l : myTake n - 1 ls
我目前的 Haskell 资源是“Learn You a Haskell for Great Good!”我已经多次阅读关于类型的部分试图弄清楚这一点。谷歌也异常无益。我认为我还不完全理解打字。谁能解释发生了什么问题?
【问题讨论】: