在 ocaml 中一次匹配多个模式

问题描述 投票:0回答:1

具有如下自定义变体类型:

type yolo = 
| A of string
| B of yolo
| C of yolo * yolo
| D of yolo * yolo

我还有一个函数,可以对

yolo
的实例执行一些操作,与此类似:

let rec swag y = 
match y with
| A _ -> 1
| B _ -> 2
| C (left,right) -> (swag left) + (swag right)
| D (left,right) -> (swag left) + (swag right)

由于案例

C
D
的操作完全相同,我想将它们合并,可以吗?

pattern-matching ocaml
1个回答
1
投票

pat1 | pat2
这样的模式与以下两种模式之一匹配:

let rec swag y = 
match y with
| A _ -> 1
| B _ -> 2
| C (left,right) | D (left,right) -> (swag left) + (swag right)

当然,这两个模式必须将相同的名称(在本例中为左和右)绑定到相同的类型。

© www.soinside.com 2019 - 2024. All rights reserved.