通常,方法查找会返回一个要执行的主体。这类似于模式匹配通常按顺序尝试模式,最终只选择一个继续执行的方式。
相反,如果我们允许执行来自一堆备选方案的所有匹配模式,会怎么样?(或者,用面向对象的术语来说:执行所有可能与给定方法调用匹配的方法。)
模式替代不会成为一种叠加,因为不存在互斥的概念;相反,它们会以某种方式成为创建多个并发执行分支的一种方式。(更不用说这些分支的交错或并行执行有什么意义了!首先,我们可以将考虑范围限制在每个匹配方法的顺序执行上。)
我们能从这种“每次匹配”的结构中恢复出真正的替代方案吗(它需要一个名字!)?一种方法是遵循 Alex、Mahdi 和我的 PEG 论文1中的想法,将交替 ( /
) 视为一种并行匹配结构,并使用负向前瞻,如果某个先前的分支成功,则导致后续分支失败。
-
T. Garnock-Jones、M. Eslamimehr 和 A. Warth,“使用解析表达式语法的导数识别和生成术语”,2018 年 1 月。https ://arxiv.org/abs/1801.10490 ↩
原文: https://eighty-twenty.org/2025/06/25/multiple-continuations