并发约束逻辑编程

编辑
本词条由“匿名用户” 建档。

并发约束逻辑编程是约束逻辑编程的一个版本,主要目的是对并发过程进行编程,而不是解决约束满足问题(或除此之外)。约束逻辑编程中的目标被并发地评估;因此,一个并发过程被编程为解释器对一个目标的评估。从语法上看,并发约束逻辑程序与非并发程序相似,唯一的例外是,子句中包括守护,即在某些条件下可能阻止子句的适用性的约束。在语义上,并发约束逻辑程序与其非并发版本不同,因为目标评估的目的是实现一个并发的过程,而...

并发约束逻辑编程

编辑

并发约束逻辑编程是约束逻辑编程的一个版本,主要目的是对并发过程进行编程,而不是解决约束满足问题(或除此之外)。约束逻辑编程中的目标被并发地评估;因此,一个并发过程被编程为解释器对一个目标的评估。从语法上看,并发约束逻辑程序与非并发程序相似,xxx的例外是,子句中包括守护,即在某些条件下可能阻止子句的适用性的约束。在语义上,并发约束逻辑程序与其非并发版本不同,因为目标评估的目的是实现一个并发的过程,而不是寻找问题的解决方案。最值得注意的是,这种差异影响了解释器在多个条款适用时的行为:非并发约束逻辑编程递归地尝试所有条款;并发约束逻辑编程只选择一个条款。这是解释器的预期方向性的最明显的影响,解释器永远不会修改它之前的选择。这方面的其他影响是,在语义上有可能出现一个无法证明的目标,而整个评估并没有失败,还有一种特殊的方式来等同于目标和句首。约束处理规则可以被看作是并发约束逻辑编程的一种形式,但用于约束简化器或求解器的编程,而不是并发过程。

并发约束逻辑编程的描述

编辑

在约束逻辑编程中,当前目标中的目标是按顺序评估的,通常以后进先出的顺序进行,较新的目标先被评估。逻辑编程的并发版本允许并行地评估目标:每个目标都由一个进程来评估,而且进程是并发运行的。这些进程通过约束存储进行交互:一个进程可以向约束存储添加一个约束,而另一个进程则检查约束是否被存储所包含。向存储空间添加约束的过程与常规约束逻辑编程一样。检查约束的包含性是通过子句的防护措施来完成的。守护需要一个语法扩展:并发约束逻辑编程的一个子句被写成H:-G|B,其中G是一个约束,称为子句的守护。这个规则的精确定义比较复杂,下面将给出。非并发和并发约束逻辑编程的主要区别在于,前者是针对搜索的,而后者是针对实现并发过程的。这种差异影响到选择是否可以被撤销,是否允许进程不终止,以及目标和子句头如何被等同。常规约束逻辑编程和并发约束逻辑编程之间的xxx个语义差异是关于当一个以上的子句可以用来证明一个目标的条件。非并发逻辑编程重写一个目标时,会尝试所有可能的子句:如果目标不能被证明,同时用一个子句的新变体替换它,则证明另一个子句,如果有的话。这是因为我们的目的是证明目标:所有可能证明目标的方法都被尝试了。另一方面,并发约束逻辑编程的目的是对并行进程进行编程。

并发编程

在一般的并发编程中,如果一个进程做出了选择,这个选择就不能被撤销。并发版本的约束逻辑编程通过允许进程做出选择来实现,但一旦做出选择就会承诺。从技术上讲,如果有一个以上的子句可以用来重写目标中的文字,非并发版本会依次尝试所有的子句,而并发版本会选择一个任意的子句:与非并发版本相反,其他子句将永远不会被尝试。这两种处理多重选择的不同方式通常被称为不知道非决定性和不关心非决定性。当重写目标中的字词时,xxx被考虑的子句是那些由约束存储和字词与子句头的等式的结合所带来的防护。

内容由匿名用户提供,本内容不代表vibaike.com立场,内容投诉举报请联系vibaike.com客服。如若转载,请注明出处:https://vibaike.com/170939/

(4)
词条目录
  1. 并发约束逻辑编程
  2. 并发约束逻辑编程的描述

轻触这里

关闭目录

目录