Ocaml模式匹配:为什么不使用此匹配?
Posted
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了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;;
为什么模式匹配不起作用?作为回答,请解决问题,而不是建议采取必要的方法。谢谢!
答案
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
。
为什么要在整数上进行模式匹配?你的功能应该是什么?
另一答案
使用when
来克服它。
let rec f = fun x y->
let tmp = f (x-1) y in (match tmp with |_ when tmp = y->y|m->m);;
以上是关于Ocaml模式匹配:为什么不使用此匹配?的主要内容,如果未能解决你的问题,请参考以下文章