2015-02-10 86 views
1

我是SML的初學者,它的語法對我來說還不是很友好(我是C#程序員)。所以這個問題在你看來可能是愚蠢的。 所以,我有一個遞歸函數與模式匹配(例如階乘),我要調試,我無法得到如何將print(Int.toString(x))添加到第二種情況。在類似C語言中它會是:如何在模式匹配構造中的SML中創建塊

function fact(x) { 
    if (x == 0) { 
    return 1; 
    } 
    print(x); 
    return x*fact(x-1); 
} 

如何print添加到SML版本,第二個情況?

fun fact 0 = 1 
    | fact x = x*fact(x-1); 

預先感謝您

+0

這已經有一段時間了,但我想你可能會用分號或逗號。試試嗎? – dfeuer 2015-02-10 02:29:20

+0

分號剛剛結束第二種情況,沒有'print'的地方,並用逗號將函數編譯但不顯示任何內容。 – myroman 2015-02-10 02:43:46

回答

1

你需要把括號內各地塊並使用分號在其中的個人表達分開:

fun fact 0 = 1 
    | fact x = (print (Int.toString x); 
       x * fact (x-1)); 

注意,有沒有必要把周圍的括號x只是爲了調用一個函數。