【发布时间】:2017-10-08 15:34:33
【问题描述】:
我正在尝试学习 Haskell,想知道如何使用一个接受多个参数的函数过滤给定列表,将列表中的每个元素与其他不变的元素一起传递给函数,以创建一个新列表。
我知道我可以这样做以使用 bool 函数来过滤列表:
newList = filter theFunction aList
但是当 theFunction 采用其他参数时会发生什么:
theFunction -> elementOfAList -> Int -> Bool
那么我如何过滤列表中的每个元素,同时将另一个元素解析到函数中?任何帮助将不胜感激:)
Edit -> 为了提供更多信息,如果我想获得 [1..10] 中的整数列表,通过一个接受两个整数的函数进行过滤,如果第一个整数更小则返回 true,如何我可以这样做吗?
【问题讨论】:
-
不清楚你的意思,请添加一些代码/伪代码来解释你想如何使用它。
-
您的编辑:我的回答的第一部分完全适用。也就是说,如果您使用相同的 int,例如
theFunction x i = x < i,然后是filter (flip theFunction 5) aList,则在结果列表中保留aList中小于 5 的所有元素。 -
看起来这不是过滤而是折叠工作。你可以试试
(==) <$> foldr1 (\x y -> bool (minBound :: Int) x (x <= y)) <*> head。其中bool是来自Data.Bool.bool的三元运算符,类型为a -> a -> Bool -> a。 -
@Redu 但对于
[minBound, 3, 1],您的函数将返回...True。 ---我把这个问题看作是关于一般使用模式的更多信息。 ---ascending = and . (zipWith (<=) <*> drop 1).
标签: haskell filter parameters predicate partial-application