我在过去曾经涉足过Haskell,最近又重新回到了Haskell,我正在阅读真实世界中的Haskell。他们发现的一些例子,我还没有明白。在这一个这样的:有人可以向我解释这些Haskell函数吗?
myLength [] = 0
myLength (x:xs) = 1 + myLength (xs)
我不明白这是如何工作的,真的被添加了什么?递归如何返回可以添加的内容?我不明白。
在这里,我们有这样的一个:
splitLines [] = []
splitLines cs =
let (pre, suf) = break isLineTerminator cs
in pre : case suf of
('\r':'\n':rest) -> splitLines rest
('\r':rest) -> splitLines rest
('\n':rest) -> splitLines rest
_ -> []
isLineTerminator c = c == '\r' || c == '\n'
是如何工作的,什么是预先真正被连接呢?我不明白案例表达式的结果是如何与pre连接的。也许我只需要有人详细解释这些功能的评估。我必须错过一些非常重要的事情。
在此先感谢!
编辑:我知道,这是一个复制粘贴失败。抱歉。编辑2:看来我的困惑是这些功能实际上是什么/返回/我现在已经全部解决了。感谢答案的人,它终于点击了!我很感激!
感谢您的回答。我有模式匹配下来压缩,我递归很好。我的错误在于这些函数实际上是/返回/。 – Rayne 2009-05-26 02:43:42