Ocaml模式匹配:为什么不使用此匹配?

时间:2018-10-08 06:44:50

标签: pattern-matching ocaml

我刚刚设计了一个无用的功能:

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;;

为什么匹配一个的模式不起作用?在回答时,请解决该问题,而不是建议采取必要的方法。谢谢!

2 个答案:

答案 0 :(得分:3)

y中的match tmp with y -> y | m -> m是一个(新)变量。因此,它匹配任何值。

尝试评估此表达式:

(fun x -> match x with y -> y + 1 | w -> w + 2) 3;;

结果为4:应用该函数时,x绑定到33与变量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);;