出于某种原因,当我用exmaple运行代码时,让我们说split1 [1,2,3,4,5,6,7,8,9,10]我得到一个错误
p :: Int -> Bool
p x = if x < 5 then True else False
split1 [xs] = [([x,y]) | x <- [xs], y <- [xs], p x == True, p y == False]
即使我用split1 [1]运行它,我也会得到一个空集。有人能告诉我哪里错了吗?谢谢。
答案 0 :(得分:2)
当你说:
split1 [xs] = ...
你实际上是在第一个参数上进行模式匹配。 [xs]
是仅包含一个元素的列表的模式。你需要的是:
split1 xs = [([x,y]) | x <- xs, y <- xs, p x == True, p y == False]
请注意,我也删除了定义中xs周围的列表括号。
我不知道你要做什么,但你也可能想要摆脱([x,y])
中的列表括号。
split1 xs = [(x,y) | x <- xs, y <- xs, p x == True, p y == False]