我正在尝试编写一个需要3个数字的函数,x y z。如果x等于y,那么它应该返回z。否则,返回x。我无法弄清楚为什么我的尝试总是返回z,即使x!= y。任何帮助将不胜感激我仍然是OCaml的新手。
let test x y z =
match x with
| y when x = y -> z
| _ -> x
答案 0 :(得分:8)
您的代码没有将x
与y
进行比较,它使用模式y
来匹配x
。这总是成功并将y
绑定到x
的值。也就是说,您要创建一个与y
具有相同值的新本地变量x
。
要修复代码,您可以这样做:
let test x y z =
match x with
| _ when x = y -> z
| _ -> x
但是当你可以这样做时,这似乎有点傻:
let test x y z =
if x = y then z else x