如何在SML中的case语句中打印?

时间:2009-04-12 20:28:55

标签: sml smlnj

我刚刚开始使用SML,我正在尝试修改一些代码以便我理解它正在做什么(我找不到一个像样的SML / NJ调试器,但这是一个单独的问题)。

fun type_check e theta env non_gens = 
  case e of
   constant_int _ => (integer,theta) 
  | 
   constant_bool _ => (boolean,theta) 
  | ...

假设这是有效的代码,因为constant_int是已经声明的数据类型的一部分,等等。如何添加一个print语句来对案例说“返回”整数“'?我试过了:

...
constant_int _ => (print "returning integer") (integer,theta)
...

但我明白了:

    stdIn:167.22-167.65 Error: operator is not a function [tycon mismatch]
      operator: unit
      in expression:
        (print "returning integer") (integer,theta)

我想我只是不理解如何执行一系列语句,只有最后一个语句应该被视为返回值。有什么建议吗?

另外,我如何打印自己的数据类型值?当我尝试将数据类型值传递给print()时SML不喜欢所以我可能必须为每种数据类型创建一个新的打印函数,这是正确的吗?

1 个答案:

答案 0 :(得分:20)

您可以使用分号“执行一系列语句,只应将其中的最后一个语句视为返回值”。

...
constant_int _ => ( print "returning integer"; (integer,theta) )
...

在这种情况下,我们需要在括号中包装语句序列,因为分号的优先级低于case-expression,因此如果我们没有括号,它会认为case-expression结束了在分号处,并且整个case-expression是序列的一部分,在这种情况下不是你想要的。