在Haskell,類型是一組值 s。所以我們都有類型構造函數和值構造函數。
所以編寫一個haskell函數。我們需要正確定義類型(Tree
)。在相應的類型中處理每個值(Empty
,Node ...
)。
Tree a
是類型。它的值是Empty
或一羣孩子。因此,我們有
data Tree a = Empty
| Node a [Tree a]
所以,當我們寫一個函數preorderTree :: Tree a -> [a]
。我們正在處理類型Tree a
,所以我們必須處理值Empty
和Node a [Tree a]
。因此,我們有
preorderTree :: Tree a -> [a]
preorderTree Empty = []
preorderTree (Node a children) = a : concatMap preorderTree children
這是一個玫瑰樹,如果你只是想一個二叉樹,我們需要改變Tree a
類型的值構造,因爲[Tree a]
實在太多了二叉樹。因此,我們有
data Tree a = Empty
| Node a (Tree a) (Tree a)
preorderTree :: Tree a -> [a]
preorderTree Empty = []
preorderTree (Node a left right) = a : preorderTree left ++ preorderTree right
- https://wiki.haskell.org/Constructor
嗯,你已經寫了'Node'採取只有兩個參數,但在這三種模式匹配。 –
你有玫瑰樹的數據定義,但似乎期望二叉樹的函數。如果你想'preorderTree'爲你的'Tree'數據類型工作,請看'concatMap'。 – Alec
這實際上不是你的第一個問題,因爲你實際上沒有問任何問題。您還沒有發佈任何錯誤消息。鑑於遍歷和數據聲明不匹配,有兩種可能的修復方法。哪個修正是正確的不清楚,所以我投票結束。隨意編輯問題。 –