我对选择过程有疑问 我想创建一个程序,您可以在其中键入操作,值和列表。
例如:programName (>) 4 [1,2,4,2,5]
,它应返回:[1,2,3]
。
我知道如何制作一个程序,使函数在列表中取相同的值,并创建一个这样的新列表:
programEqual :: Eq a => a -> [a] -> [a]
programEqual e [] = []
programEqual e (x:xs) = if (e == x) then e : takeEqual e xs else takeEqual e xs
我也明白你需要两个功能,但是我不能理解我应该如何获得(tester)
内容。
答案 0 :(得分:1)
您可以通过添加函数参数来调整以前的程序。这是一个暗示:
programEqual :: (a -> a -> Bool) -> a -> [a] -> [a]
programEqual f e [] = []
programEqual f e (x:xs) = if ....
答案 1 :(得分:1)
只需使用filter
:
filter :: (a -> Bool) -> [a] -> [a]
filter (< 4) [1, 2, 4, 2, 5] == [1, 2, 2]
如果要分别传递运算符和操作数:
filter' op x = filter (op x)
然后
filter' (<) 4 [1,2,4,2,5] == [1,2,2]
Data.List
中定义了一个非常有用的功能:
takeWhile :: (a -> Bool) -> [a] -> [a]
它的签名应该对你很有帮助。
这里有一个提示:
(>) :: Int -> Int -> Bool -- simplified from Eq a => ..
(> 4) :: Int -> Bool