我试图在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
我尝试了很多组合和铸件但没有成功。
答案 0 :(得分: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;