簡體   English   中英

Haskell中嵌套空列表的列表

[英]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.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM