为啥我们在haskell中编写函数时需要使用括号?
Posted
技术标签:
【中文标题】为啥我们在haskell中编写函数时需要使用括号?【英文标题】:Why do we need to use brackets while composing functions in haskell?为什么我们在haskell中编写函数时需要使用括号? 【发布时间】:2012-05-01 09:50:46 【问题描述】:假设我需要定义以下函数:
身份 = chr.ord
但是上面的行不行,正确的方法是:
身份 = (chr.ord)
Haskell 通常是一种极简主义的语言,所以使用额外的括号并不自然(对我来说)。
有谁知道引入括号的必要性。我不记得我们在 haskell 中在哪里使用点运算符(除小数外)。
在 Nate/Daniel 的 cmets 之后编辑
你都是对的。我的实际方法是:
nextLetter a
| a /= 'z' = chr.ord a
| a == 'z' = 'a'
现在我明白了,在这种情况下,它将评估 ord a 然后尝试评估 chr.97,因此出现错误!
谢谢。
【问题讨论】:
省略括号并没有错。您可以编辑您的问题并添加您遇到的错误吗? 我认为他的意思是identity x = chr.ord x
这很快,由丹尼尔标记答案,因为它有助于发现错误。
顺便说一句,在这种情况下省略括号的标准方法是写chr . ord $ a
。
或chr $ ord a
。口味问题。问题显然是chr.ord x
被解析为chr.(ord x)
,而不是(chr.ord) x
。
【参考方案1】:
你错了。写的时候
import Data.Char
identity = chr.ord
在test.hs
中并在ghci
中加载它,没有任何问题。
【讨论】:
以上是关于为啥我们在haskell中编写函数时需要使用括号?的主要内容,如果未能解决你的问题,请参考以下文章
为啥 Haskell 没有在函数签名中推断数据类型的类型类?