我需要开发自己的过滤器功能,类似于filter在Haskell中的工作原理,但是要使用列表理解和谓词。因此,我将lcFilter (>3) [1,2,3,4,5,6,10,444,3]输入ghci,它将打印所有大于3的数字。
我的代码基于一个我擅长的递归示例,但我似乎无法转换为列表理解。无论我输入什么内容,[x | x<-xs, p]它都会缝在一起,始终会引发编译器错误。我知道这p部分是错误的。我已经尝试过了==p,xs==p几乎可以想到的所有其他东西。这使我认为其他部分可能是错误的,但我真的不确定。
这是我的功能的代码lcFilter。我不确定是否部分或全部错误,因此我将整个过程发布。
lcFilter :: (a -> Bool) -> [a] -> [a]
lcFilter _ [] = []
lcFilter p (x:xs) = [x | x<-xs, p]
Run Code Online (Sandbox Code Playgroud)
如果输入,lcFilter (>3) [1,2,3,4,5]它应该[4,5]像标准的Haskell filter函数一样打印。