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