为什么我不能匹配评估?

时间:2017-10-31 14:47:50

标签: pattern-matching ocaml

我正在尝试使用前一行(tmp)的列表生成pascal三角形,并且想要评估列表的大小并匹配这种情况,如下所示:

(* b is the index pos I'm generating at the moment *)
(* I need a function I can pass into another function, so the case must evaluate at runtime *)

fun b -> match b with
| 0 -> 1
| List.length tmp -> 1
| _ -> (* Ignore this part *)

为什么第二行不评估和匹配?

3 个答案:

答案 0 :(得分:2)

OCaml匹配非常有效,因为模式是编译时已知的常量。要与运行时计算的值进行比较,您可以使用if

when中还有一个match子句,可用于在执行初始匹配后测试表达式的值。这相当于if,但有时更清晰。

答案 1 :(得分:1)

match不是一种模式 - 这是一种表达方式; curl -v --tlsv1 https://prod.example.com:443/BLAH/BLAH_NO_SAML --cert cert.pem 仅适用于模式。 见patterns

答案 2 :(得分:0)

此处没有模式,只有条件表达式的值才能进行评估,因此如果有更多适应的说明,请使用。

    if b = 0 then 1 else
    if b = (List.length tmp) then 1 else
    whatever expression