如何在SML中进行|登录?

如何在SML中进行|登录?,sml,Sml,我想写一些像这样的东西 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语法的一部分(虽然这里不严格需要)和作为解释器的特殊指示符(如下所述)

大多数解释器将一直从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+“\”来获得它。但是,由于您的帖子包含多个管道,我想您已经知道如何编写管道了。

没关系,我会的。你写的阶乘0=1=|阶乘n=n*阶乘(n-1);当你说你得到了别的东西。你得到了什么?考虑到你文章中的管道数量,你显然知道如何编写管道。