元组模式中的重复变量

时间:2014-02-07 17:03:19

标签: tuples sml

我正在学习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)。那表达这种模式的正确方法是什么?

1 个答案:

答案 0 :(得分:2)

正确的方法是:

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

如果您愿意,也可以使用案例陈述:

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