[英]Tree works in Haskell
我正在從事一個項目,並且因為我不習慣Haskell而感到有些困難,因為這對我來說很難編碼。
我想要一棵有葉子和樹枝的樹,葉子將僅作為整數輸入,例如1,2,3。 分支僅對operation1和operation2是char。
這些操作從葉子獲取輸入並進行計算,然后將輸出發送到其他分支,然后再次進行計算,直到達到最高位。
我到目前為止的代碼:
data Tree = Leaf Float | Branch Char Tree Tree deriving (Show,Eq,Ord)
insertElement x (Leaf y) = Leaf y
insertElement x (Branch a left right) = Branch a (insertElement x left) right
doIt (x:xs) (y:ys) = insertElement ((Branch y (Leaf x) (Leaf (head xs))))
op1 num1 num2 = 1+num1+num2*2
op2 num1 num2 = 1-num1*num2*2
樹將被遞歸創建,我嘗試使用foldr來做到這一點,但是由於它不是二叉樹而沒有用。
任何幫助都會很好。
我不確定我是否理解問題,但也許您想要這樣的事情:
data Op = Op1 | Op2
data Tree = Leaf Float | Branch Op Tree Tree
eval :: Tree -> Float
eval (Leaf x) = x
eval (Branch Op1 l r) = op1 (eval l) (eval r)
eval (Branch Op2 l r) = op2 (eval l) (eval r)
op1 :: Float -> Float -> Float
op1 num1 num2 = 1+num1+num2*2
op2 :: Float -> Float -> Float
op2 num1 num2 = 1-num1*num2*2
example :: Float
example = eval (Branch Op1 (Leaf 3) (Branch Op2 (Leaf 2) (Leaf 1)))
如果那是您想要做的,請考慮使用比Tree
少的通用類型,例如
data Exp = Lit Float | Op1 Exp Exp | Op2 Exp Exp
eval :: Exp -> Float
eval (Lit x) = x
eval (Op1 l r) = op1 (eval l) (eval r)
...
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.