功能逻辑程序修正与表格逻辑编程中的近似剪枝
功能逻辑程序修正
在功能逻辑程序的修正方面,由于目前还没有合适的系统来处理初始过度专业化的程序,因此采用了归纳功能逻辑系统 FLIP 来计算相关基准。通过自上而下的校正器和自下而上的学习器 FLIP 进行了一些测试,旨在修复过度泛化以及过度专业化的功能逻辑程序,测试涵盖了自然数、列表和有限域等多个领域的程序。
为了使基准的生成系统化,对正确的程序进行了轻微修改,以获得错误的程序变体。结果表明,能够成功修复这些不正确的变体,在许多情况下,不仅能根据示例集进行修正,还能符合预期的程序语义。
表格逻辑编程中的近似剪枝
引言
Prolog 是一种使用 Horn 子句指定计算的编程语言,采用反向链、目标导向、需求驱动的评估策略。这种策略的优势在于只推导与主查询目标相关的子目标,但也可能导致同一子目标被多次推导,从而产生不必要的指数级行为。
Tabled Prolog 对 Prolog 进行了改进,它不仅只推导目标所需的内容,而且每个子目标只推导一次,使用表格来避免重复计算。例如,在识别上下文无关语言时,Tabled Prolog 可以达到多项式时间复杂度。
然而,即使是 Tabled Prolog 也存在不必要的计算。在 Prolog 中,程序员可以使用剪枝运算符(如 cut 或 once 运算符)来消除不必要的计算,但 Tabled Prolog 缺乏对剪枝操作的良好支持。这是因为在 Tabled Prolog 中,一个表的计算是为所有用户服务的,单个用户决定不再需要该表时,可能还有其他用户依赖该计算。因此,Tabled Prolog 中的剪枝运算符需要更复
超级会员免费看
订阅专栏 解锁全文
2045

被折叠的 条评论
为什么被折叠?



