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 回答