Haskell 将谓词与逻辑&&;内滤波函数
我只是偶然发现了这句话: 在列表理解中应用多个谓词的过滤器等效于多次过滤某些内容,或者将谓词与逻辑&&函数连接起来 有人能给最后一部分举个例子吗(将谓词与逻辑&&函数连接起来) 作者的意思是这样的吗(这是行不通的):Haskell 将谓词与逻辑&&;内滤波函数,haskell,Haskell,我只是偶然发现了这句话: 在列表理解中应用多个谓词的过滤器等效于多次过滤某些内容,或者将谓词与逻辑&&函数连接起来 有人能给最后一部分举个例子吗(将谓词与逻辑&&函数连接起来) 作者的意思是这样的吗(这是行不通的): filter(>3)和&(filter的谓词参数是一个函数,因此需要使用lambda: filter (\x -> x > 3 && x < 10) [5,3] 但是我个人并不觉得这特别好。或者,不使用lambda抽象(匿名函数),可以使用let
filter(>3)和&(filter
的谓词参数是一个函数,因此需要使用lambda:
filter (\x -> x > 3 && x < 10) [5,3]
但是我个人并不觉得这特别好。或者,不使用lambda抽象(匿名函数),可以使用let
或where
定义想要的过滤器谓词,并给它一个名称
let inRange x = x > 3 && x < 10
in filter inRange [5,3]
设置范围x=x>3&&x<10
范围[5,3]内的过滤器
当谓词较短时,使用lambda会更方便,如本例中所示。另一方面,给谓词一个名称有助于提高代码的可读性,澄清意图。我看到的一个有趣的技巧是,如果您计划以这种方式组合多个谓词,则定义()=liftA2(&&&&)
。然后您可以编写过滤器((> 3) (< 10))
,可读性很好。在PureScript标准库中,这是开箱即用的,感谢您的回答。在我看来,作者不应该假设读者在书中的这一点上做适当的扩展,因为lambda
s和应用程序
都没有介绍。@ChrisGraf您没有如果您在[5,3]
中的过滤器中使用let inRange x=x>3&&x<10,则需要一个lambda。这使用了书中所用的样式,仅在您引用的部分上方几行。@chi好的一点,您可以添加此作为附加答案吗?我认为这对其他在这个问题上遇到障碍的人也会有所帮助。
let inRange x = x > 3 && x < 10
in filter inRange [5,3]