簡體   English   中英

Haskell定義一棵樹

[英]Haskell defining a tree

在haskell中,我可以執行以下操作

a :: Int
a = 15

我的數據類型如下

data Btree a = ND | Data a |  Branch (Btree a) (Btree a) deriving (Show, Eq)

如何定義樹,而不使用上面的函數。

我努力了;

tree :: BTree
tree = Branch Btree (Branch ND Data 1) (Branch ND (Branch ND ND))

我似乎無法使它正常工作(我是Haskell的新手,因此,如果這很基礎,我會提前道歉)

請記住,要構造數據類型的實例,您需要調用其構造函數之一。 所有這些構造函數NDDataBranch都是常規函數,因此應這樣稱呼它們。

tree ,您正在將數據類型( Btree )與構造函數混合,而您只應使用構造函數。 另外,請記住,函數調用(“空間運算符”是左關聯的)非常貪婪,因此Branch ND Data 1使用3個參數而不是您想要的參數來調用函數BranchBranch ND (Data 1)

因此,考慮到以上內容,您可以創建深度為2的樹:

tree = Branch (Branch ND (Data 1)) (Branch ND (Branch ND ND))

請注意, Data 1也將是Btree,無需額外負擔

Prelude> :t (Data 1)
(Data 1) :: Num a => Btree a

如果您只需要帶有正確元素的簡單分支,則可以編寫

Branch ND (Data 1)

或在另一個答案中深入兩層。 此時,方便的構造函數將很方便,以最大程度地減少噪聲和打字。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

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