当list参数有多个元素时,Haskell会出错

时间:2016-10-05 04:19:31

标签: list haskell parameters

我刚进入Haskell,我正在尝试创建一个函数,给定一个数字列表将返回其中所有负数的列表。 所以我做了这个

negative:: [Int] -> [Int]

negative [x] = [z | z <- [x], x < 0]

当我尝试使用列表中只有一个元素时,它可以正常工作

负[-1]返回[-1]

否定[1]返回[]

然而,当我添加更多数字时,例如 负[0,-1]我收到以下错误:

程序错误:模式匹配失败:负[Num_fromInt instNum_v30 0,Num_fromInt instNum_v30 -1]

我尝试用空格键入数字,但没有空格,但结果是一样的。我猜我的代码有问题,但是因为我还在习惯Haskell,所以我很难找到它。任何帮助将不胜感激。

1 个答案:

答案 0 :(得分:3)

只需将表达式左侧的[x]替换为x,然后将表达式x < 0更改为z < 0(请记住,我们正在筛选出个人元素,而不是容器本身)。

我将如何做到这一点:

negative :: [Int] -> [Int]
negative x = [z | z <- x, z < 0]

(可选)以下是使用高阶函数解决相同问题的方法:

negative :: [Int] -> [Int]
negative xs = filter (< 0) xs

(如果您不知道高阶函数是什么,请忽略前面的示例。随着时间的推移,您将了解它们)