我刚刚开始使用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不喜欢所以我可能必须为每种数据类型创建一个新的打印函数,这是正确的吗?
答案 0 :(得分:20)
您可以使用分号“执行一系列语句,只应将其中的最后一个语句视为返回值”。
...
constant_int _ => ( print "returning integer"; (integer,theta) )
...
在这种情况下,我们需要在括号中包装语句序列,因为分号的优先级低于case-expression,因此如果我们没有括号,它会认为case-expression结束了在分号处,并且整个case-expression是序列的一部分,在这种情况下不是你想要的。