我刚刚开始使用SML,我正在尝试修改一些代码,以便我理解它正在做什么(我找不到一个像样的SML/NJ调试器,但这是一个单独的问题).
fun type_check e theta env non_gens =
case e of
constant_int _ => (integer,theta)
|
constant_bool _ => (boolean,theta)
| ...
Run Code Online (Sandbox Code Playgroud)
假设这是有效的代码,因为constant_int是已经声明的数据类型的一部分,等等.如何添加一个print语句来说"返回"整数"'到案例中?我试过了:
...
constant_int _ => (print "returning integer") (integer,theta)
...
Run Code Online (Sandbox Code Playgroud)
但我得到:
stdIn:167.22-167.65 Error: operator is not a function [tycon mismatch]
operator: unit
in expression:
(print "returning integer") (integer,theta)
我想我只是不理解如何执行一系列语句,只有最后一个语句应该被视为返回值.有什么建议?
另外,我如何打印自己的数据类型值?当我尝试将数据类型值传递给print()时,SML不喜欢所以我可能必须为每种数据类型创建一个新的打印函数,这是正确的吗?
new*_*cct 21
您可以使用分号"执行一系列语句,只应将最后一个语句视为返回值".
...
constant_int _ => ( print "returning integer"; (integer,theta) )
...
Run Code Online (Sandbox Code Playgroud)
在这种情况下,我们需要将括号中的语句序列包装起来,因为分号的优先级低于case-expression,因此如果我们没有括号,它会认为case-expression以分号结束,并且整个case-expression是序列的一部分,在这种情况下不是你想要的.