由于类型不匹配,在SML中打印错误

时间:2012-11-24 17:49:06

标签: sml smlnj ml

我试图在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

我尝试了很多组合和铸件但没有成功。

1 个答案:

答案 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;