2014-02-07 54 views
1

我正在學習SML中的模式匹配,我想編寫一個函數fact_till (a,b)來計算!/ b !.例如,fact_till(5,3)應該返回5 * 4 = 20。元組模式中的重複變量

我的代碼如下所示:

fun fact_till t = case t of 
        (a,a) => 1 
       | (a,b) => a * fact_till(a-1,b) 

但我得到Error: duplicate variable in pattern(s): a。我認爲SML不承認模式(a,a)。那麼表達這種模式的正確方法是什麼?

回答

2

正確的方式做,這就是:

fun fact_till (a,b) = if a = b 
         then 1 
         else a * fact_till(a - 1, b) 

這也可以用一個case語句完成的,如果你想:

fun fact_till (a,b) = case a = b of 
         true => 1 
        | false => a * fact_till(a - 1, b)