2013-01-17 43 views
0

我想寫類似我如何製作|登錄SML?

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

,但我不明白的「|」當我想開始新行時簽字。我得到這樣的東西:

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

當我開始第二行代碼。如果我持有班次和「\」我沒有得到垂直欄,我得到別的東西。

+0

沒關係,ig ot it。你寫 – user1913592

+0

娛樂階乘0 = 1 = |階乘n = n *階乘(n-1); – user1913592

+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 +「\」得到它。但是,由於您的文章包含多個管道,我想您已經知道如何編寫一個管道。