2017-04-11 26 views
0

零参数的功能如果有一个功能这样的:如何“运行”中SML

fun foo() = 10 

当我想运行,我写的是这样的:

val bar = foo 

酒吧变成函数(单位 - > INT)不是10

所以我TR ied像这样:

val int bar = foo 

但它会报错。所以,我想是这样的:

fun foo x = 10 

val bar = foo 0 

最后我得到酒吧 = 10,但它看起来太可怕了。

那么,我应该怎么做运行零参数函数没有改变什么?

回答

4

您可能会想到其他一些语言,其中()意味着一个空的参数列表。
在SML中,它没有。

foo不带零参数;它只需要一个参数:()

- fun foo() = 10; 
val foo = fn : unit -> int 

正如你所看到的,foounitint功能。

-(); 
val it =() : unit 

()(通常发音为 “单元”)是unit类型的唯一值。
(守信用“单位”可以指“一个单一的东西”,这是该类型是什么。)

要调用的函数,通过它unit类型的参数:

- foo(); 
val it = 10 : int 

你当然可以的名字也绑定到()

- val kittens =(); 
val kittens =() : unit 
- foo kittens; 
val it = 10 : int 

旁注:你可能会想,如果你比较,说这是奇怪的,

- fun bar (x,y) = x + y; 
val bar = fn : int * int -> int 

bar也只需要一个参数,类型int * int
我们通常,它需要两个,但从类型系统的角度来看,只有一个参数(这是一对)。