我想写类似的东西
fun factorial 0 = 1
| factorial n = n * factorial(n-1);
但我没有得到“|” 当我想开始新行时签名。我得到类似的东西:
fun factorial 0 = 1
= factorial n = n * factorial(n-1);
当我开始第二行代码时。如果我按住 shift 和 "\" 我没有得到竖线,我会得到别的东西。
我想写类似的东西
fun factorial 0 = 1
| factorial n = n * factorial(n-1);
但我没有得到“|” 当我想开始新行时签名。我得到类似的东西:
fun factorial 0 = 1
= factorial n = n * factorial(n-1);
当我开始第二行代码时。如果我按住 shift 和 "\" 我没有得到竖线,我会得到别的东西。
既然您说第二行以等号 (=) 开头,那么您似乎正在将代码直接写入解释器?
无论如何,您必须自己编写管道。管道是 SML 语法的一部分,用于“指示”不同的函数子句,而分号在这里具有双重含义。双重作为 SML 语法的一部分(尽管这里并不严格需要)和作为解释器的特殊指示符(如下所述)。
大多数解释器会一直从标准输入读取数据,直到它读取一个分号,然后它首先会开始解释你所写的内容。在 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+"\" 来获得它。但是,由于您的帖子包含多个管道,我想您已经知道如何编写一个。