我在一个函数([]:_)
中看到了这个无法找到它的定义(Google不适用于符号)。那么究竟是什么呢?
type Mat a = [[a]]
myTranspose :: Mat a -> Mat a
myTranspose ([]:_) = []
myTranspose p = (map head p) : myTranspose (map tail p)
答案 0 :(得分:13)
它是列表列表的模式匹配。它匹配一个至少有一个元素的列表,其中第一个元素是空列表。例如[[]]
或[[], [2,4]]
,[[], [], [1,4], [2], [5]]
。
Haskell中的列表被定义为具有两个构造函数的链接列表:[]
,空列表,(a:as)
“cons”,其中a
是“head”(列表的第一个元素)和as
尾部(包含其余元素的列表)。
此外,下划线_
用作“不关心”变量。所以这意味着我们寻找缺点模式(a:as)
,其中a
(第一个元素)是一个空列表[]
,as
是_
所以我们对列表的其余元素不感兴趣。
在myTranspose
函数的情况下,如果你给它一个列表列表,第一个项目是空列表,它将导致一个空列表。