【问题标题】:OCaml function comparing numbersOCaml 函数比较数字
【发布时间】:2018-01-28 22:34:13
【问题描述】:

我正在尝试编写一个需要 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

【问题讨论】:

  • 您在第 3 行的 y 正在隐藏函数参数。很简单x反弹的值。
  • 我不确定这是什么意思。

标签: ocaml


【解决方案1】:

您的代码不会将xy 进行比较,它使用y 模式来匹配x。这总是成功并将y 绑定到x 的值。也就是说,您正在创建一个与 x 具有相同值的新局部变量 y

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

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

【讨论】:

  • 赞成我指出这里的模式匹配是愚蠢的。看起来初学者倾向于过度使用这些,就好像它是某种金锤一样。
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 2011-11-24
  • 2016-08-13
  • 2013-08-27
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多