我想写点像
fun factorial 0 = 1
| factorial n = n * factorial(n-1);
但我没有得到“|”当我想开始新线时签名。我得到类似的东西:
fun factorial 0 = 1
= factorial n = n * factorial(n-1);
当我开始第二行代码时。如果我按住shift和“\”我没有得到垂直条,我得到别的东西。
答案 0 :(得分:2)
既然您说第二行以等号(=)开头,那么您似乎是将代码直接写入解释器?
无论如何,你必须自己写管道。管道是SML语法的一部分,用于“指示”不同的函数子句,而分号在这里具有双重含义。加倍作为SML语法的一部分(虽然这里不是严格要求),并作为解释器的特殊指示器(如下所述)。
大多数解释器将继续从stdin读取数据,直到它读取分号,然后它将开始解释你所写的内容。 在SML / NJ解释器的情况下,第一行以“ - ”开头,任何后续行以“=”开头。请注意,“ - ”和“=”符号不会被解释为最终程序的一部分。 这方面的一个例子可以在下面看到
- fun foo 0 y = 0
= | foo 1 y = y
= | foo x y = x*y;
val foo = fn : int -> int -> int
这里最后一行是解释器的输出,当它读取分号时。 但是,在编写分号
之前,我们也可以声明两个函数- fun foo 0 y = 0
= | foo 1 y = y
= | foo x y = x * y
= fun fact 0 = 1
= | fact n = n * fact (n-1);
val foo = fn : int -> int -> int
val fact = fn : int -> int
关于管道,它取决于您的键盘布局,无论您是否通过键入shift +“\”获得它。但是,由于你的帖子包含多个管道,我想你已经知道如何写一个。