我想定義一個多型資料型別來表示涉及加法、乘法和數字的運算式
data Expr =
Number (Integer, Double)
| Plus Expr Expr
| Times Expr Expr
deriving Show
expr1 = Times (Plus (Number (5.2 :: Double)) (Number 4)) (Number 2)
expr2 = Plus (Number (2 :: Int)) (Times (Number 3) (Number 4))
expr3 = Times (Number "hello") (Number "world")
我也有以下測驗用例:
testEval1 = "Expected 18.4; eval expr1 returned " show (eval expr1 :: Double)
testEval2 = "Expected 14; eval expr2 returned " show (eval expr2 :: Int)
testEval = putStr (testEval1 "\n" testEval2 "\n")
我將如何在 Haskell 中定義它?
uj5u.com熱心網友回復:
在評論中,chi寫道:
您可以使用,
data Expr = NumberI Integer | NumberD Double | Plus Expr Expr | ...以便您可以在運算式中存盤這兩種常量
...但個別。
Haskell 沒有未標記的聯合型別。Haskell 標記了聯合型別(這些是可搜索的術語)。
因此,該Integer值有自己的標簽 ,NumberI而該Double值有自己的標簽NumberD。
你在你的資料型別定義寫道Number (Integer, Double),手段,同時擁有Integer 并 Double 同時在型別的值Expr。
但是,在你的榜樣,你寫的Number (5.2 :: Double),并Number 4在那里你有任何一個Double(5.2),或者你大概意思為Integer(4型別的)那里,里面的值Expr。
轉載請註明出處,本文鏈接:https://www.uj5u.com/qiye/345089.html
上一篇:Haskell:獲取所有路徑
