12

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

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

假设这是有效的代码,因为 constant_int 是已经声明的数据类型的一部分,等等。如何添加打印语句来表示“返回“整数””?我试过:

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

但我得到:

    标准输入:167.22-167.65 错误:运算符不是函数 [tycon 不匹配]
      操作员:单位
      表达:
        (打印“返回整数”)(整数,θ)

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

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

4

1 回答 1

23

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

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

在这种情况下,我们需要将语句序列包装在括号中,因为分号的优先级低于 case 表达式,所以如果我们没有括号,它会认为 case 表达式以分号结尾,并且整个 case 表达式是序列的一部分,在这种情况下,这不是您想要的。

于 2009-04-12T22:08:04.430 回答