前缀函数作为过滤函数的谓词

时间:2015-10-07 14:00:32

标签: haskell filter predicate prefix infix-notation

以下是来自了解你是一个很好的Haskell的filter函数的类型签名和定义。

filter' :: (a -> Bool) -> [a] -> [a]
filter' _ [] = []
filter' p (x:xs)
    | p x = x : filter' p xs
    | otherwise = filter' p xs

本书中的用法示例elem如下:

filter' (`elem` ['a'..'z']) "Hell0!"

返回:

"ell"

在这个特定的例子中,是否有可能使用elem作为前缀函数而不是使用中缀函数作为谓词?

从更一般的意义上讲,有没有办法只提供第二个参数才能部分应用前缀函数?

提前感谢您的帮助!

2 个答案:

答案 0 :(得分:5)

通过创建一个lambda(适用于超过2个参数的函数):

filter' (\a -> elem a ['a'..'z']) "Hell0!"

或者使用flip

filter' (flip elem ['a'..'z']) "Hell0!"

答案 1 :(得分:1)

听起来像flip :: (a -> b -> c) -> b -> a -> c之后,这是在前奏中。

它可以实现为flip f = \b a -> f a b