2016-08-14 102 views
0

我有一個數據類型:域結構的Haskell

data Tree e = Node e (Tree e) (Tree e) | Empty deriving (Show) 

type Forest e = [Tree e] 

data Animal = Squirrel | None deriving (Show) 

森林詮釋的圖形表示是:

enter image description here

的最後一個元素是底部。然後在倒數第二行,它可以是空的。但我不明白⊥:⊥是什麼意思。它是列表的構造函數嗎?像這樣5:[]?然後在第3行,爲什麼[]Empty:⊥中缺失。

任何人都可以請解釋我在這裏理解錯誤。 謝謝。

回答

1

是的,_|_ : _|_是列表的構造函數,適用於未定義的列表元素和未定義的列表尾部。這是值,例如,關聯到Haskell的程序

let list = list 
    elem = elem 
in elem : list 

同樣,Empty : _|_是關聯到

let list = list 
in Empty : list 

值這裏沒有[]因爲列表的尾部無法終止(收斂)由於無限遞歸,所以它的值是未定義的(_|_)。

在域排序,我們有具有限制(AKA LUB或確界)的無窮列表重複Empty永遠增加序列

_|_ 
Empty : _|_ 
Empty : Empty : _|_ 
Empty : Empty : Empty : _|_ 
... 

_|_ : _|_ : _|_ 

是關聯到

let list = list 
    elem = elem 
in elem : elem : list 

通過比較所述一個,

_|_ : _|_ : [] 

let elem = elem 
in elem : elem : [] 
的值

請注意,以上允許計算長度,因爲列表有確定的結束。考慮到它的length將產生2,因爲不需要評估列表元素,所以不會強制底部。

+0

以及_ | _ :((_ | _:_ | _))將如何處理。第三排,右邊第一個元素? –

+0

請參閱上面的修改。 – chi

+0

所以你的意思是,列表中有2個元素,都是未定義的,[]也是未定義的? –