代码之家  ›  专栏  ›  技术社区  ›  corvuscorax

球拍模式匹配时的备选方案

  •  2
  • corvuscorax  · 技术社区  · 16 年前

    我想匹配以下两个列表中的一个(以前的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这条线?如果不是这样,那么上述两种球拍方式中哪一种是最惯用的球拍方式?

    1 回复  |  直到 15 年前
        1
  •  5
  •   Eli Barzilay    16 年前

    使用一个 or 模式 (or 'o 'io) . 当然,别忘了这一切都是 documented .