我如何制作|登录SML?

时间:2013-01-17 08:59:25

标签: sml

我想写点像

fun factorial 0 = 1
  | factorial n = n * factorial(n-1);

但我没有得到“|”当我想开始新线时签名。我得到类似的东西:

fun factorial 0 = 1
=   factorial n = n * factorial(n-1);

当我开始第二行代码时。如果我按住shift和“\”我没有得到垂直条,我得到别的东西。

1 个答案:

答案 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 +“\”获得它。但是,由于你的帖子包含多个管道,我想你已经知道如何写一个。