我是一名编程和Haskell新手,我不太明白如何定义一个函数。假设我想要一个函数,它将返回列表[b]中位置为a的元素。对于特定的a和[b],我可以在解释器中执行以下操作:
Prelude> [2, 3, 5, 6] !! 1
Prelude> 3
但是,如果我尝试创建一个函数,无论是在解释器中还是在文本编辑器中加载,都会遇到问题:
Prelude> let getElement a [b] = [b] !! a
Prelude> getElement 1 [2, 3, 5, 6]
***Exception: <interactive>:17:5-27: Non-exhaustive pattern in function getElement
[b]
上调用head
的a
次。这样你就能学习一些递归了。 - mikeb
代替[b]
。 - soulchecklet getElement a b = b !! a
。通过[b]
,你指的是一个只包含一个元素b
的列表。阅读 Haskell 教程会有所帮助。 - nickietail
而不是head
。 - Rotsor:r <filename>.hs
进行加载;您会收到错误消息,说明某些输入组合未被您提供的函数定义所覆盖。 - jev