这个语法在Haskell中意味着什么:([]:_)

时间:2018-01-13 15:43:56

标签: haskell

我在一个函数([]:_)

中看到了这个

无法找到它的定义(Google不适用于符号)。那么究竟是什么呢?

type Mat a = [[a]]

myTranspose :: Mat a -> Mat a
myTranspose ([]:_) = []
myTranspose p = (map head p) : myTranspose (map tail p)

1 个答案:

答案 0 :(得分:13)

它是列表列表的模式匹配。它匹配一个至少有一个元素的列表,其中第一个元素是空列表。例如[[]][[], [2,4]][[], [], [1,4], [2], [5]]

Haskell中的列表被定义为具有两个构造函数的链接列表:[],空列表,(a:as)“cons”,其中a是“head”(列表的第一个元素)和as尾部(包含其余元素的列表)。

此外,下划线_用作“不关心”变量。所以这意味着我们寻找缺点模式(a:as),其中a(第一个元素)是一个空列表[]as_所以我们对列表的其余元素不感兴趣。

myTranspose函数的情况下,如果你给它一个列表列表,第一个项目是空列表,它将导致一个空列表。