[英]list of nested empty lists in Haskell
為什么可以在Haskell中創建這樣的列表:
slist = [ [], [[]], [[],[[]]] ]
據我所知,每個元素在這里都有各種類型(如數學:Ø,{Ø}等)。 而且ghci說:
> :t []
[] :: [t]
> :t [[]]
[[]] :: [[t]]
正式地,我看到了不同的音符。
換句話說,第一個元素是一個簡單的空列表,第二個元素是列表(!)等等。
怎么了? 為什么Haskell認為它們是同一類型?
你是對的,在Haskell列表中,所有元素必須是相同的類型。 事實上,您的示例中的類型是:
> :t slist
slist :: [[[[a]]]]
但是空列表[]
可以有任何類型,只要它的形式為[b]
,但有很多可能的b
。 所以有很多可能的具體類型。 其中一個是b
類型[[[a]]]
,就像你的slist
。
看看這樣一個列表的第一個元素的類型:
> head [ [], [[]], [[],[[]]] ]
[]
it :: [[[t]]]
這不是t
,但它的[[[t]]]
為什么我可以在Haskell中制作這樣的列表
因為這個表達式的類型沒有錯。
怎么了? 為什么Haskell認為它們是同一類型?
t
在[[[[t]]]]
是不是一個最終的類型,它的輸入變量。 這就是為什么這個列表的第一個元素的類型可以是a
或[b]
或[[c]]
或[[[t]]]
。
空列表可以是任何類型的列表。 它可以是數字列表,字符串列表或列表列表。 我的意思是,為什么不允許你有一個空的列表列表,甚至是列表清單的空列表?
所以在你的清單中:
--a b c d
[ [], [ [] ], [ [], [ [] ] ] ]
d
是一個空列表, c
是列表的空列表, b
是列表的列表的空列表和a
是列表的列表的列表的空列表。
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.