###やりたいこと
ocamlにおいて,
(Mul (Mul (x,y), Add (y,Num 1)));;
のように与えられた内部表現を
xy(y+1)
のように表現したい.
###現状のコード
ocaml
1type exp = 2 | Num of int 3 | Var of string 4 | Add of exp * exp 5 | Mul of exp * exp;; 6 7let make_sum a1 a2 = Add (a1,a2);; 8 9let make_product m1 m2 = Mul (m1,m2);; 10 11let rec string_of_exp var = function 12 | Num n -> string_of_int n 13 | Var x -> x 14 | Add (x, y) -> "(" ^ string_of_exp (x) ^ "+" ^ string_of_exp (y) ^")" 15 | Mul (x, y) -> string_of_exp (x) ^ "*" ^ string_of_exp (y);;
###表示されるエラー
type exp = Num of int | Var of string | Add of exp * exp | Mul of exp * exp val make_sum : exp -> exp -> exp = <fun> val make_product : exp -> exp -> exp = <fun> File "ex3_1.ml", line 14, characters 24-41: 14 | | Add (x, y) -> "(" ^ string_of_exp (x) ^ "+" ^ string_of_exp (y) ^")" ^^^^^^^^^^^^^^^^^ Error: This expression has type exp -> string but an expression was expected of type string
###質問したい内容
stringとしてつなげたいのですが,上記の表現ではうまくそのように表現できていない様子です.
valはstringであるし,Numもstring_of_intでstringにしているのに,なぜstringとして受け取られなのでしょうか.
回答2件
あなたの回答
tips
プレビュー
バッドをするには、ログインかつ
こちらの条件を満たす必要があります。
2021/06/02 01:59