Haskell 使用列表理解的带谓词的自定义筛选函数
我需要开发我自己的过滤函数,类似于Haskell中的Haskell 使用列表理解的带谓词的自定义筛选函数,haskell,filter,list-comprehension,higher-order-functions,Haskell,Filter,List Comprehension,Higher Order Functions,我需要开发我自己的过滤函数,类似于Haskell中的filter工作原理,但使用列表理解和谓词。所以我会把lcFilter(>3)[1,2,3,4,5,6,10444,3]放在ghci中,它会打印所有大于3的数字 我的代码基于一个递归示例,我很擅长这个示例,但我似乎无法转换为列表理解。无论我在[x | x Bool)->[a]->[a]中输入什么,它都会接合 lcFilter[]=[] lcFilter p(x:xs)=[x | x3)[1,2,3,4,5]它应该像标准Haskell过滤器一样打
filter
工作原理,但使用列表理解和谓词。所以我会把lcFilter(>3)[1,2,3,4,5,6,10444,3]
放在ghci中,它会打印所有大于3的数字
我的代码基于一个递归示例,我很擅长这个示例,但我似乎无法转换为列表理解。无论我在[x | x Bool)->[a]->[a]中输入什么,它都会接合
lcFilter[]=[]
lcFilter p(x:xs)=[x | x3)[1,2,3,4,5]
它应该像标准Haskell过滤器一样打印[4,5]
。它与
[x | x <- xs, p x]
你不需要模式匹配,列表理解会解决这个问题
所以总的来说是这样的
lcFilter :: (a -> Bool) -> [a] -> [a]
lcFilter p xs = [x | x <- xs, p]
这可以用单子或幺半群的概念作一个很好的说明来进一步理解,但我们将把它留到另一天再说。“它总是引发编译器错误”之后应该是完整的错误信息。发布您收到的错误对潜在的回答者非常有用。请记住这一点,以便将来提问。
x :: a
p :: a -> b
---------------
p x :: b
lcFilter :: (a -> Bool) -> [a] -> [a]
lcFilter p xs = [x | x <- xs, p]
[ ... | x <- (xs ++ ys), .... ] ===
[ ... | x <- xs, .... ] ++ [ ... | x <- ys , .... ]
[ ... | x <- ([y] ++ ys), .... ] ===
[ ... | x <- [y], .... ] ++ [ ... | x <- ys , .... ] ===
[ ...{x/y} | ....{x/y} ] ++ [ ... | x <- ys , .... ]
[ a, b, ..., n ] ===>
[ a | p a] ++ [b | p b] ++ ... ++ [n | p n ]