OCaml函数比较数字
我正在写一个函数,它有3个数字,x,y,z。如果x等于y,那么它应该返回z。否则,返回x。我很难弄明白为什么我的尝试总是返回z,即使是x=Y如果有任何帮助,我将不胜感激。我对OCaml还是新手OCaml函数比较数字,ocaml,Ocaml,我正在写一个函数,它有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 您的代码不会将x与y进行比较,而是使用模式y与x进行匹配。这总是成功的,并将y绑定到x的值。也就是说,您正在创建一个新的局部变量y
let test x y z =
match x with
| y when x = y -> z
| _ -> x
您的代码不会将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
您的代码不会将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
第3行上的y是函数参数的阴影。x反弹的值很简单。我不确定这是什么意思。第3行的y是函数参数的阴影。很简单,x反弹的值。我不确定这是什么意思。请接受我的建议,指出这里的模式匹配是愚蠢的。看起来初学者倾向于过度使用这些,就好像它是某种金锤一样。看起来初学者倾向于过度使用这些,就好像它是某种金锤一样。