Warning: file_get_contents(/data/phpspider/zhask/data//catemap/0/drupal/3.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
OCaml函数比较数字_Ocaml - Fatal编程技术网

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

我正在写一个函数,它有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,它的值与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反弹的值。我不确定这是什么意思。请接受我的建议,指出这里的模式匹配是愚蠢的。看起来初学者倾向于过度使用这些,就好像它是某种金锤一样。看起来初学者倾向于过度使用这些,就好像它是某种金锤一样。