2017-04-11 22 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
我們通常,它需要兩個,但從類型系統的角度來看,只有一個參數(這是一對)。