###実現したい内容
Add (x, Mul (Num (-1), y))
を
Add(Var "x", Var "-y")もしくは
Sub(Var "x", Var "y")
という表現に治したい.
できれば,
Add (Add (y, Num 1), Add (x, Num 2))
を
Add(Add(Var "x", Var "y"), Num 3)
のように直したい.
###現状のコード
"-y"のようなものを作るために
m1 = Num (-1) then Var "-"^m2のように行おうとしたが,"-"がstringであるのに対して,m2がexpであるので型のエラーが出てしまった.
(なので下のコードでは除いてある.)
ocaml
1type exp = 2 | Num of int 3 | Var of string 4 | Add of exp * exp 5 | Mul of exp * exp 6 | Sub of exp * exp;; 7 8let make_sum a1 a2 = 9 Add (a1,a2);; 10 11let make_product m1 m2 = 12 Mul (m1,m2);; 13 14let rec deriv var = function 15 | Num n -> Num 0 16 | Var x -> if Var x = var then Num 1 else Num 0 17 | Add (x, y) -> make_sum (deriv var x) (deriv var y) 18 | Mul (x, y) -> make_sum (make_product x (deriv var y)) 19 (make_product (deriv var x) y);; 20 (*微分*) 21 22let x = Var "x" and y = Var "y";;
バッドをするには、ログインかつ
こちらの条件を満たす必要があります。