是的,有可能:
module Test
let unpack_demo () =
let tup = (true, false) in (* parens required here! *)
match tup with
| True, False -> true (* pattern must use bool's constructor tags *)
| _ -> false
end
let ex2 () = match true, false with (* parens not required here *)
| True, x -> x
| False, True -> false
| False, False -> true
end
end
hayai[cygwin64][1155]:~/prog/why3$ why3 execute test.mlw Test.unpack_demo
Execution of Test.unpack_demo ():
type: bool
result: true
globals:
hayai[cygwin64][1156]:~/prog/why3$ why3 execute test.mlw Test.ex2
Execution of Test.ex2 ():
type: bool
result: false
globals:
与 SML 或 OCaml 相比,Why3 的模式语言非常基础。Why3 中的模式中唯一允许的值是构造函数(甚至不允许使用整数常量),并且只有元组可以被解构。这就是上述模式中使用True
和使用的原因;False
它们实际上是合适的构造函数bool
——true
并且false
为了方便而存在,但它们不会在模式中工作。参见语法参考中的图 7.2并查看pattern
.