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 -> ...
我觉得。
我是 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 -> ...
我觉得。