我写了以下代码:
set :: [[Int]] -> [Int]
set [[]] = []
set ((x:xs)) = x : set xs
我有一个列表列表作为参数。我试着将它列入一个列表。在第一个声明中我想说列表中的空列表应该给我一个空列表。 在第二个中,我想表达我采用列表的第一个元素并将其插入新列表,依此类推。
但是当我编译它时,我收到以下消息:
Couldnt match the expected type ´Int´ with actual type ´[Int]´
In the first argument of (:) namely 'x'
In the expression: x: set xs
我该如何解决?
答案 0 :(得分:2)
(x:xs)
的类型为[[Int]]
。因此x
的类型为[Int]
,xs
的类型为[[Int]]
。现在,您的函数应该给出[Int]
类型的答案,但x : set xs
可能不具有该类型。你明白为什么吗?
提示:查看:
运算符的类型。
答案 1 :(得分:0)
供您参考,这是一个正确的定义:
flatten [] = []
flatten (x:xs) = x ++ flatten xs
测试:
> flatten [[1,2],[3,4,5],[6]]
[1,2,3,4,5,6]