逻辑编程与约束逻辑编程入门
1. SLD 消解与逻辑编程基础
在逻辑编程中,SLD 消解(Selective Linear Definite clause resolution)是一个关键概念。它是对 Robinson 消解的线性限制,适用于确定子句。当一个查询作为第一个消解式进行 SLD 推导时,如果至少有一个原子无法消除,则推导失败;如果所有原子都被消除,生成空消解式,则推导成功。计算得到的答案是应用于初始查询的合一子的组合。
一旦确定了消解式中原子的选择策略,一个查询的所有可能 SLD 推导集合可以看作是一棵树,搜索策略指定了遍历这棵 SLD 树的方法。如果搜索策略是公平的,即如果可能的话,SLD 消解规则将应用于树的每个消解式,那么选择策略可以是任意的。一个确定程序 P 的 Herbrand 基中,存在导致成功的 SLD 推导的元素集合,与 P 的最小 Herbrand 模型一致。这意味着确定程序的过程语义是双重的,与两种声明性语义相吻合,为每个程序提供了双重的编程方法。此外,消解式中原子的选择和与该原子合一的子句的选择会导致两种并行性。
2. Prolog 语言
2.1 Prolog 语言概述
Prolog(法语 “Programmation en logique”)是基于 Horn 子句范式的逻辑编程语言,更侧重于编程而非逻辑。基于 Horn 子句的逻辑编程是一种理论工具,由于非确定性,可能会产生无限数量的 SLD 推导,需要并行处理。只有公平的搜索策略(如广度优先策略)才能保证 SLD 消解的完整性,但这必然会导致成本过高的机制。因此,Prolog 采用深度优先搜索策略,通过回溯栈来存储选择点,以保留 SLD 树中尚未探
超级会员免费看
订阅专栏 解锁全文
22万+

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



