当前位置:  开发笔记 > 编程语言 > 正文

在Haskell中,(=="")是什么意思?

如何解决《在Haskell中,(=="")是什么意思?》经验,为你挑选了4个好方法。

对于可能会说"在教科书中查找"或"Hoogle it"的秃鹰,我做到了.

我发现了这个说法

recipe = (== "000001")

它对我来说看起来像某种布尔,但我不确定.我试过在GHCi中以不同的方式测试它,但我无法找出任何有用的东西.有人可以解释它意味着什么,这个问题将成为下一次有人谷歌Haskell(=="")的结果



1> Cat Plus Plu..:

这是一个部分.它相当于recipe = \x -> x == "000001"(反过来又相同recipe x = x == "000001").



2> Jeff Burka..:

你可以GHCI用来计算这个.

GHCI,投入let recipe = (== "000001").现在我们可以看到它是如何工作的.试着:t recipe看看是什么类型.返回recipe :: [Char] -> Bool,所以看起来这是一个获取Chars(a String)列表并返回a 的函数Bool.

如果你测试它,你会发现它返回False任何输入,除了"000001".

既然==是一个运算符,你可以将它部分地应用于一个参数,它将返回一个接受另一个参数并返回结果的函数.所以这里== "000001"返回一个函数,它接受一个参数来填充另一侧==并返回结果.


编辑:如果定义是recipe = ((==) "000001")这样的解释是正确的.

要理解这一点,您应该查找部分应用程序.==函数的类型是a -> a -> Bool一个函数,它接受两个相同类型的参数并返回一个Bool.

但它也是类型的函数a -> (a -> Bool),它接受一个类型的参数a并返回带有签名的新函数a -> Bool.这就是这里发生的事情.我们提供了一个参数==,因此它返回了一个新的类型函数a -> Bool,或者[Char] -> Bool在这种特殊情况下.


不,这不是这里发生的事情.`(== foo)`修复`==`的*second*参数,而不是第一个.所以它不只是用参数调用`==`.
@WillNess有一个区别,并且手工操作它,因为它恰好适用于这一个操作员是坏的.

3> zch..:

对于二元运算符@,表达式(@ x)意味着(\y -> y @ x).

在你的情况下,它将是(\y -> y == "000001")ie.接受String的函数,并说它是否等于"000001".



4> sepp2k..:

(== arg)或者(arg ==)是一个操作员部分(它也适用于其他操作员 - 不仅仅是==).它的作用是将运算符部分应用于给定的操作数.所以(== "foo")是一样的\x -> x == "foo".

推荐阅读
惬听风吟jyy_802
这个屌丝很懒,什么也没留下!
DevBox开发工具箱 | 专业的在线开发工具网站    京公网安备 11010802040832号  |  京ICP备19059560号-6
Copyright © 1998 - 2020 DevBox.CN. All Rights Reserved devBox.cn 开发工具箱 版权所有