首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >函数组合和嵌入函数应用程序(PureScript)的说明

函数组合和嵌入函数应用程序(PureScript)的说明
EN

Stack Overflow用户
提问于 2017-07-27 21:31:15
回答 1查看 157关注 0票数 1

这段代码起作用

代码语言:javascript
复制
findName :: String -> String -> AddressBook -> Boolean
  findName fname lname =  not <<<  null <<< filter findN
   where
     findN :: Entry -> Boolean
     findN entry = entry.firstName == fname && entry.lastName == lname

但这不是

代码语言:javascript
复制
findName fname lname book =  not <<<  null <<< filter findN book

同样,这段代码可以工作。

代码语言:javascript
复制
findName fname lname book= not $  null $ filter findN book

但这并不是

代码语言:javascript
复制
findName fname lname = not null $ filter findN
EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2017-07-28 07:25:40

简而言之,这是因为这些不同的示例等效于不同位置的括号,因此代码的计算方法也不同。f <<< g,其中fg是函数,等价于\x -> f (g x),而f x $ g y等价于(f x) (g y)。每当您有像<<<这样的infix符号而没有其他infix符号时,首先计算符号左边和右边的表达式,因此您的第一个示例被计算为

findName fname lname = ((not) <<< (null) <<< (filter findN))

book参数显式的情况下

findName fname lname book = ((not) <<< (null) <<< (filter findN)) book

而您的第二个示例被计算为

findName fname lname book = (not) <<< (null) <<< (filter findN book)

filter findN book生成一个列表,但是<<<需要函数参数。对于第三个和第四个示例,问题类似:如果我在第四个示例中将book参数显式化,它将是

findName fname lname = (not $ null (filter findN)) book,(在这里你忘记了一个$)。

not $ null $ ...要求...是一个AddressBook,但filter findN是一个函数,而不是AddressBook。

票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/45361366

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档