OCaml函数比较数字

hjs*_*qwe 1 ocaml

我正在尝试编写一个需要3个数字的函数,xy z.如果x等于y,那么它应该返回z.否则,返回x.我无法弄清楚为什么我的尝试总是返回z,即使x!= y.任何帮助将不胜感激我仍然是OCaml的新手.

    let test x y z =
      match x with
      | y when x = y -> z
      | _ -> x
Run Code Online (Sandbox Code Playgroud)

mel*_*ene 8

您的代码不比较xy,它使用的模式y来匹配x.这总是成功并且与y价值结合x.也就是说,您正在创建一个y具有相同值的新局部变量x.

要修复代码,您可以这样做:

let test x y z =
  match x with
  | _ when x = y -> z
  | _ -> x
Run Code Online (Sandbox Code Playgroud)

但是,当你可以这样做时,这似乎有点愚蠢:

let test x y z =
  if x = y then z else x
Run Code Online (Sandbox Code Playgroud)