2013-10-08 14 views
12

我知道在REPL中使用分號作爲終止符。但是我很困惑什麼時候在源文件中使用它們。例如,val x = 1之後不需要。但是如果我在use "foo.sml"之後省略它,編譯器會抱怨它。什麼時候在SML中使用分號?

那麼,使用分號的規則是什麼?

回答

11

分號用於SML中的一些語法實體。它們通常用於創建例如表達式或聲明的序列。這裏有一個鏈接到SML語法:

http://www.mpi-sws.org/~rossberg/sml.html

你的情況,你有興趣分號的聲明(該類)。請注意,創建decs序列的分號是可選的。在編寫SML模塊時你從來不需要它,而且很少見到它們。例如

structure S = struct 
    val x = 5 
    fun f x = x 
    val z = x + x 
end 

structure S = struct 
    val x = 5; 
    fun f x = x; 
    val z = x + x 
end 

在源文件中,您通常使用一個分號分隔有副作用表達的唯一地方。例如,

val x = ref 5 
val _ = (x := !x + 1; x := !x+ 2) 

但這種用法很少見。

smlnj repl只會在看到分號時評估聲明,所以無論何時您想查看或使用該值,都應該使用分號。我認爲use "foo.sml";的情況令人困惑,因爲它不是一個聲明;這是一個表達。我想像repl會將use "foo.sml"這樣的表達轉換爲val _ = use "foo.sml"。因此它需要分號來告訴repl真正運行它,如上所述。作爲一個便箋,use沒有什麼特別的。它只是string -> unit類型的函數。

+0

謝謝。現在我知道爲什麼在聲明中沒有必要。然後你能解釋爲什麼需要在'use「foo.sml中使用';'?我仍然不理解它。 – Ben

+0

我試圖澄清以上。 – seanmcl

+0

+1對於SML語法參考。 –

相關問題