我刚刚设计了一个无用的功能:
let rec f = fun x y->
let tmp = f (x-1) y in (match tmp with | y->y|m->m);;
为什么m->m
是未使用的匹配项?为什么y->y
实际上是通配符而不是参数y的值?
我想做的事情如下:
let rec f = fun x y ->
let tmp = f (x-1) y in if tmp=y then y else tmp;;
为什么匹配一个的模式不起作用?在回答时,请解决该问题,而不是建议采取必要的方法。谢谢!
答案 0 :(得分:3)
y
中的match tmp with y -> y | m -> m
是一个(新)变量。因此,它匹配任何值。
尝试评估此表达式:
(fun x -> match x with y -> y + 1 | w -> w + 2) 3;;
结果为4
:应用该函数时,x
绑定到3
; 3
与变量y
相匹配;最后,子表达式y + 1
在上下文[ x = 3; y = 3]
中求值为4。
子表达式if tmp=y then y else tmp
等同于tmp
。
为什么要对整数进行模式匹配? 您的功能应该做什么?
答案 1 :(得分:-1)
使用when
克服它。
let rec f = fun x y->
let tmp = f (x-1) y in (match tmp with |_ when tmp = y->y|m->m);;