Haskell代码 - 作为参数的列表列表

时间:2014-04-20 15:12:20

标签: haskell

我写了以下代码:

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

我该如何解决?

2 个答案:

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