0

SML で型の値を出力しようとしましたが、成功しませんでした。以下のコードを見て、これを修正するために何をする必要があるか教えてください。ありがとう。

(* Language Definition *)
datatype = Id of string;

(* Expression Definition *)
datatype expr = 
Var of ident 
| Num of int 
| Plus of expr * expr
| Paren of expr;

val p = Id "x";
val p = Var p;
print(p);

これは私のエラーです:

stdIn:175.1-175.9 Error: operator and operand don't agree [tycon mismatch]
  operator domain: string
  operand:         expr
  in expression:
    print p

私は多くの組み合わせとキャスティングを試みましたが、成功しませんでした.

4

1 に答える 1

2

コンパイラが言おうとしているように、print文字列を出力するためにのみ使用できます。特定の型を印刷できるようにしたい場合は、データ型に合わせた印刷関数が必要です。痛い、私は知っています。

これを試して:

fun print_expr (Var (Id name)) = print name
    | print_expr (Num n) = print (Int.toString n)
    | print_expr (Plus (lhs, rhs)) = (print_expr lhs; print " + "; print_expr rhs)
    | print_expr (Paren e) = (print "("; print_expr e; print ")")
print_expr p;
于 2012-11-24T19:21:30.610 に答える