[英]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的新手,因此,如果這很基礎,我會提前道歉)
請記住,要構造數據類型的實例,您需要調用其構造函數之一。 所有這些構造函數ND
, Data
, Branch
都是常規函數,因此應這樣稱呼它們。
在tree
,您正在將數據類型( Btree
)與構造函數混合,而您只應使用構造函數。 另外,請記住,函數調用(“空間運算符”是左關聯的)非常貪婪,因此Branch ND Data 1
使用3個參數而不是您想要的參數來調用函數Branch
: Branch 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.