OCaml:一个返回函数的函数

时间:2014-04-16 01:42:28

标签: ocaml

当函数返回函数作为结果时,让我们说:

let func = function
| pat -> (function | pat -> x
                   | b -> y)

两个pat不是同一个东西,第二个pat可以匹配任何东西,所以永远不会到达最后一行。有关如何解决这个问题的任何提示?

2 个答案:

答案 0 :(得分:2)

如果您想表示第二个pat应该等于代码中第一个pat的匹配值,那么您的代码是错误的。必须是:

let func = function pat ->
  function 
    | pat' when pat = pat' -> x
    | b -> y

模式变量引入新的新变量,不能引用绑定到同名变量的值。

答案 1 :(得分:0)

您不应仅仅使用模式匹配来测试相等性。您应该使用if then else。 您的功能相当于:

let func a b if a = b then x else y

使用警卫(camlspotter的答案的when部分)会起作用,但风格很糟糕(caml编译器常常抱怨它)。