Ocaml 中的模式匹配函数

Pattern Matching a Function in Ocaml

我是 Ocaml 的新手,我对 Ocaml 中的模式匹配有疑问。 如果我有以下类型定义:

type t = False | True | Function (t -> t)

如何匹配 Function (t -> t) 的字词?到目前为止,我唯一能做的就是匹配 Function f。但是有什么方法可以将参数与函数相匹配吗?理想情况下,有像

这样的东西会很好
match t with
| Function (t1 -> t2) -> ...
| ...

但显然这不是正确的语法。有可能吗?

听起来您正试图从 t -> t 类型的函数值中提取 t 类型的内容,但我认为这没有意义。如果某个东西是 t -> t 类型,那么它就是一个接受 t 类型值和 returns 相同类型值的函数。然而,如果你有这个(函数)类型的值,你就没有两部分的东西,每个部分都是 t 类型。即使您抽象地思考,函数也是 集合 值对,而不是一对值。

可能您想做的是表示成对的值,每个值都是类型 t。那看起来像这样:

type t = False | True | Pair of t * t

现在您可以使用模式匹配提取 Pair 的组件。但是一对值不是一个函数(除非你把你的函数的想法限制在非常微不足道的函数上,我猜是一个单例域和范围)。

模式匹配匹配值的结构。你要做的是匹配你不能匹配的类型。

也说不通。在

type t = False | True | Function (t -> t)

函数始终具有类型 t -> t。如果您已经匹配到它是一个函数,那么您已经知道它是 t -> t。没有其他选择可以匹配。

你也做不到

match t with Function my_function -> ...

但你可以做到

match t with Function f when f == my_function -> ...

我觉得。