何时在SML中使用分号?
我知道分号在REPL中用作终止符。但我不知道什么时候在源文件中使用它们 例如,在何时在SML中使用分号?,sml,smlnj,ml,Sml,Smlnj,Ml,我知道分号在REPL中用作终止符。但我不知道什么时候在源文件中使用它们 例如,在val x=1之后不需要。但是如果我在使用“foo.sml”之后省略了它,编译器会抱怨它 那么,使用分号的规则是什么呢?分号用于SML中的许多语法实体。它们通常用于创建表达式或声明等序列。以下是SML语法的链接: 在您的例子中,您对声明的分号(dec类)感兴趣。请注意,创建DEC序列的分号是可选的。在编写SML模块时,您从来都不需要它,而且很少看到它们。比如说 structure S = struct val
val x=1
之后不需要。但是如果我在使用“foo.sml”
之后省略了它,编译器会抱怨它
那么,使用分号的规则是什么呢?分号用于SML中的许多语法实体。它们通常用于创建表达式或声明等序列。以下是SML语法的链接: 在您的例子中,您对声明的分号(dec类)感兴趣。请注意,创建DEC序列的分号是可选的。在编写SML模块时,您从来都不需要它,而且很少看到它们。比如说
structure S = struct
val x = 5
fun f x = x
val z = x + x
end
不是
在源文件中,通常使用分号的唯一位置是分隔有副作用的表达式。比如说,
val x = ref 5
val _ = (x := !x + 1; x := !x+ 2)
但这种用法很少见
smlnj repl仅在看到分号时才计算声明,因此您应该在希望看到或处理该值时使用分号。我认为
使用“foo.sml”代码>大小写比较混乱,因为它不是一个声明;这是一个表达。我想repl会将use“foo.sml”
这样的表达式转换为val\uz=use“foo.sml”
。因此,它需要分号来告诉repl真正运行它,如上所述。作为旁注,使用
没有什么特别之处。它只是一个类型为string->unit
的函数 谢谢。现在我知道为什么在声明中不需要它了。然后请您解释一下为什么在中需要使用“foo.sml”代码>?我还是不明白。谢谢你的澄清。这是否意味着在源文件(不是REPL)中,如果我在一行中编写表达式,如1+1
,我必须用分号终止它?是的,除非您希望表达式继续到下一行,例如1\n+\n 1
根据经验,如果希望查看结果,请在repl中使用分号。
val x = ref 5
val _ = (x := !x + 1; x := !x+ 2)