我想在Racket(以前的PLT Scheme)中匹配以下两个列表中的一个:
'(somename : (_ptr o sometype))
或
'(somename : (_ptr io sometype))
正如您所看到的,唯一的区别是嵌入列表中的文字“o”和“io”。
我可以看到两种基本方法。
或者:
(match myexpr
[(list name ': (list '_ptr 'o _)) name]
[(list name ': (list '_ptr 'io _)) name]
[_ 0])
这似乎是重复的努力,但非常清楚。或者:
(match myexpr
[(list name ': (list '_ptr mode _))
(if (or (eq? mode 'o)
(eq? mode 'io))
name
0)]
[_ 0])
避免了几乎重复的模式,但不太清楚。
我的问题是,有没有办法在球拍模式匹配中指定替代品,这是{'o | “IO}?而且,如果没有,上面提到的两种方式中的哪一种将是最惯用的Racket方式?