Я хочу, чтобы соответствовать одному из следующих двух списков в Ракетка (ранее 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 | «Ю}? И, если нет, то какой из двух способов, описанных выше, был бы самым идиоматическим способом Racket?
Thanx - dunno, как я пропустил это, так как я действительно искал его. Нет, действительно :-) – corvuscorax