【问题标题】:Concurrent and Parallel Logic Programming并发和并行逻辑编程
【发布时间】:2014-03-07 20:47:24
【问题描述】:

Prolog 的艺术 的介绍中,Sterling 和 Shapiro 将并行性、并发性和逻辑编程的讨论推迟到另一本书。我的问题是有没有这样的资源:

[the] 并行计算机的承诺,结合逻辑编程模型中似乎可用的并行性,导致了许多尝试,这些尝试仍在进行中,以并行执行 Prolog,并设计新颖的并发编程语言基于逻辑编程计算模型。然而,这是另一本书的主题(序言的艺术,第 xx 页)。

在 Google 上搜索,除了数百篇研究论文和论文外,我还发现了 Mercury 的 Prolog 和并发库的并行实现。但是在本段的第二部分很难找到关于并发编程和基于逻辑编程语言执行模型的编程语言的资源。有没有关于这些主题的好资源?我对编译编写并行和并发逻辑程序的参考资料特别感兴趣。

【问题讨论】:

  • 我认为历史的结论是 Prolog 被证明是一种不适合并行或并发编程的语言。我记得几年前研究过这个问题,并找到了一些关于这个主题的不错的文章。让我尝试重建我的步骤。
  • hardmath:如果您有时间,我将不胜感激。如果历史的结论是逻辑编程语言不适合该任务,那么您的评论听起来像是我应该将搜索改进为并行和并发逻辑编程的实现历史。
  • 我不想过分强调历史角度,因为这个问题值得对语言的优点进行分析。不过我推荐2010 blog article“谁杀了Prolog?”作者:Maarten van Emden,上个月(2014 年 2 月)有一个后记。它主要涉及日本“第五代计算机系统”项目(1982-1992),但这是一个重要的历史数据点。
  • 另见2011 SO Question,Prolog 的并发性如何?我对其中的三个答案投了赞成票!
  • 大规模并发的类似 Prolog 的语言?会不会是...... Erlang?

标签: concurrency parallel-processing prolog programming-languages logic-programming


【解决方案1】:

在 Prolog 中,您可以同时拥有非确定性和并发性。非确定性通常被描述为统一和回溯。你可以想象一个 Prolog 子句充满了隐含的amb 语句。鲜为人知的是,逻辑编程也支持并发。

但是今天我们可能只是在逻辑编程中进行操作。 Here 是通过线程实现 findall 的示例。这也可以修改为在集合上执行各种任务,甚至可以生成面向分布式人工智能的代理网络。

甚至有一个关于支持 Prolog 内部线程的 ISO 标准谓词的提议。这些谓词还包括同步和排队原语。但更重要的是,基于轻量级 Prolog 的 Web 服务器无法工作,周围没有多线程 Prolog 系统:

ISO/IEC DTR 13211–5:2007 Prolog 多线程支持
http://logtalk.org/plstd/threads.pdf

【讨论】: