2010-06-21 65 views
2

匹配我想匹配在球拍以下兩個列表(前身爲PLT的計劃)中的一個:替代當模式球拍

'(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}?如果不是,上面列出的兩種方法中的哪一種將是最常用的球拍方式?

回答

5

使用or模式(or 'o 'io)。當然,不要忘記所有這些都是documented

+0

Thanx - 不知道我是如何錯過的,因爲我實際上是在找它。不完全是 :-) – corvuscorax 2010-06-21 16:57:17