我有這種類型的聲明,表示二叉樹:使用二叉樹型
data Bst a = Empty | Node (Bst a) a (Bst a)
由於我是新來的Haskell,我想不出如何使用它。你能告訴我如何初始化它的一些實例嗎?
我有這種類型的聲明,表示二叉樹:使用二叉樹型
data Bst a = Empty | Node (Bst a) a (Bst a)
由於我是新來的Haskell,我想不出如何使用它。你能告訴我如何初始化它的一些實例嗎?
您的數據聲明指出有兩種方法構建Bst:使用Empty
構造函數或使用Node
構造函數。
-- An empty Bst
bst1 = Empty
-- A Bst containing a single value.
bst2 = Node Empty 42 Empty
-- A Bst containing 3 values, 2 at the root, 1 in the left child and 3 in the right child.
bst3 = Node (Node Empty 1 Empty) 2 (Node Empty 3 Empty)
單個int節點:
2
Node Empty (2::Int) Empty
樹:
2
/\
1 3
Node (Node Empty 1 Empty) 2 (Node Empty 3 Empty) :: Bst Int
2
/\
1 3
\
5
Node (Node Empty 1 Empty) 2 (Node Empty 3 (Node Empty 5 Empty)) :: Bst Int
我會稍微重寫你的宣言,使用的參數的更地道爲了Node
:
data Bst a = Empty | Node a (Bst a) (Bst a)
Empty
和Node
是什麼哈斯克爾調用構造。構造函數可以使用兩種方式:
如果我們加載類型爲ghci
解釋,我們可以使用ghci中的:t
命令顯示類型的構造函數:
Ok, modules loaded: Main.
*Main> :t Empty
Empty :: Bst a
*Main> :t Node
Node :: a -> Bst a -> Bst a -> Bst a
*Main>
所以Empty
是對任何a
鍵入Bst a
恆定的,而Node
是產生Bst a
三個參數的函數:一個a
和兩個Bst a
。因此,要構建類型的值,可以使用一個構造函數,給它所需數量的參數(沒有在Empty
的情況下,三爲Node
),以及正確的類型。
讓我再次強調這一點:您可以使用構造函數,就像您可以使用與構造函數相同類型的任何表達式一樣。因此,舉例來說,就像你可以部分在Haskell應用功能(它比它需要應用到更少的參數),可以部分地應用構造:Node "foo" Empty
具有類型Bst String -> Bst String
。
最後一個例子是不正確的話,應該'節點(節點(節點空3空)2空)1(節點空3空)' – gnuvince
我想我是作爲固定你評論。 – Davorak
另外(不是說它對於插圖非常重要),這些不是二叉搜索樹,'Bst'幾乎可以肯定代表什麼。 –