2012-10-21 23 views
-3

這裏是我的ADT:Haskell,如何將ADT轉換爲字符串?

data Tree a = Val Integer 
      |Tree a 
      |Variable a 

我有兩個問題:

問題1:使用樹字符串類型來表示一些樹木?

問題2:定義一個函數轉換一棵樹,數據類型樹字符串字符串的元素:showTree ::樹字符串 - >字符串

+1

對不起,我不明白你的問題。你能澄清嗎? –

+0

我有Tree數據類型,問題是使用Tree String類型來表示某些樹。 – Sam

回答

5

關於你的第二個問題,coverting一樹轉換成字符串,就得出Show和使用show功能:

data Tree a = Val Integer 
      | Tree a 
      | Variable a 
    deriving (Eq, Ord, Show) 

showTree :: (Show a) => Tree a -> String 
showTree = show 

我不明白你的第一個問題,所以我只是要商量了一下,希望的東西我說可以幫助你。

瞭解您的「樹」數據類型根本不是一棵樹,它只是一個總和數據類型,可以通過整型或某種類型與類型變量a匹配來實例化。第二個構造函數Tree實際上並沒有讓你的數據類型遞歸 - 它只是一個構造函數的名字,方式相同Variable是一個構造函數名。我想你也許想有子樹(通過使用Tree作爲一個類型,而不是一個構造函數) - 讓我們定義類型爲:

data Tree a = Val Integer 
      | Branch (Tree a) (Tree a) 
      | Variable a 

現在你有一個構造函數命名Branch具有左,右子-樹。如果您的變量應該是String當時的你當然可以使用Tree String表示這樣的:

myTree :: Tree String 
myTree = 
    let leftBranch = Variable "x" 
     rightBranch = Branch (Val 3) (Variable "y") 
    in Branch leftBranch rightBranch