language-agnostic - 使用关联和交换运算符进行模式匹配

标签 language-agnostic pattern-matching theorem-proving

模式匹配(如在 Prolog、ML 系列语言和各种专家系统外壳中发现的)通常通过以严格的顺序逐个元素地匹配查询与数据来进行操作。

然而,在诸如自动定理证明之类的领域中,需要考虑一些运算符是关联的和可交换的。假设我们有数据

A or B or C

并查询
C or $X

按照表面语法,这不匹配,但从逻辑上讲,它应该与 $X 匹配绑定(bind)到A or B因为or是关联的和可交换的。

有没有任何语言的现有系统可以做这种事情?

最佳答案

关联交换模式匹配自 1981 and earlier 以来一直存在,仍然是热门话题today .

有很多系统实现了这个想法并使其有用。这意味着当可以使用关联性或交换性来进行模式匹配时,您可以避免编写复杂的模式匹配。是的,它可能很昂贵;模式匹配器自动执行此操作比您手动执行此操作要好。

您可以在 rewrite system for algebra and simple calculus 中查看示例使用我们的程序转换系统实现。在这个例子中,要处理的符号语言由语法规则定义,那些具有 A-C 属性的规则被标记。通过解析符号语言产生的对树的重写会自动扩展为匹配。

关于language-agnostic - 使用关联和交换运算符进行模式匹配,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/8335187/

相关文章:

f# - 在 F# 中转换抽象语法树 (AST)

error-handling - 伊德瑞斯 12 月 vs 也许

agda - 当相关类型被 Idris 中的 lambda 抽象时,如何证明 "seemingly obvious"事实?

algorithm - 给定2D点列表和正方形网格大小,返回最接近最多点的坐标

web-services - 测试公共(public) Web 服务的客户端

java - 如何允许现有正则表达式中的特殊字符集?

haskell - "lemma"函数的一般类型应该如何理解?

language-agnostic - 通用语言中的实数算术?

language-agnostic - 哪个是更好的长期 URL 设计?

pattern-matching - 不能通过移动绑定(bind)到模式守卫