0
と一致しませんでした:が、これは私の現在のコードで期待されるタイプ(カスタムタイプ)
data Exp x = Con Int | Var x | Sum [Exp x] | Prod [Exp x]
| Exp x :- Exp x | Int :* Exp x | Exp x :^ Int
expression :: Exp String
expression = Sum [3:*(Var"x":^2), 2:*Var"y", Con 1]
type Store x = x -> Int
exp2store :: Exp x -> Store x -> Int
exp2store (Con i) _ = i
exp2store (Var x) st = st x
exp2store (Sum es) st = sum $ map (flip exp2store st) es
exp2store (Prod es) st = product $ map (flip exp2store st) es
exp2store (e :- e') st = exp2store e st - exp2store e' st
exp2store (i :* e) st = i * exp2store e st
exp2store (e :^ i) st = exp2store e st^i
経験が多項式とexp2storeを表す必要は値を式の中で変数を提供発現および機能を取ります。
例:作品
*Main> exp2store (Var"x") $ \"x" -> 5
5
。異なる値の複数の変数をどのように供給できるかわかりません。つまり、
*Main> exp2store (Sum[Var"x",Var"y"]) $ \"x" "y" -> 5 10
明らかに、これは例外をスローします。誰か助けてくれますか?