繁体   English   中英

Haskell - 定义函数

[英]Haskell - defining functions

我是编程和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

让getElement a [b] = [b] !! 一个

你的函数接受一个Int类型的参数a ,因为(!!)第二个参数是一个Int,而[b]模式匹配一​​个元素的列表。

看起来你试图告诉编译器第二个参数应该是一个列表。 为此,您通常使用类型签名。

在文件中:

getElement :: Int -> [b] -> b
getElement a bs = bs !! a

这种类型的函数被认为是部分函数,​​因为您可以给它一个整数,导致函数失败并抛出异常,例如负数或尝试访问大于列表的索引。 现实世界中的这一章 Haskell有一些关于部分函数的信息。 编程指南页面上的Haskell wiki也有一些建议

您可能希望查看安全包以及它们如何定义headMay以进行总体而非部分实现。

编辑: b改为按照下面的Rein Henrichs推荐的bs ,因为他指出它确实使它更容易阅读,并且是一个相当常见的习语。

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM