函数测试程序中的函数

时间:2015-10-16 12:34:19

标签: haskell

我对选择过程有疑问 我想创建一个程序,您可以在其中键入操作,值和列表。

例如: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)内容。

2 个答案:

答案 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