多线程...函数式语言?(序言)

Blu*_*eft 5 multithreading functional-programming prolog logic-programming

当我的朋友开始在学校学习Prolog时,我取笑他学习一种无用的语言.然而,他向我展示了一些我从未知道的东西; 我想知道这种技术的来源.

技术是这样的:

permutation(List) :-
    isAMember(X, List),
    deleteFirstElement(X, List, Substring),
    % and so on
Run Code Online (Sandbox Code Playgroud)

在这段代码中,isAMember(X, List)是一个函数,如果X在,则返回true List.然而,到现在为止X没有被定义为一个变量- 这样的计划将产生一堆新的线程,每一个可能的值X,使isAMember(X, List)真实的,并从那里继续.

这使我们能够以我能想象到的最简单,最优雅的方式创建多线程算法.

所以我的问题是: 这是Prolog特定的,还是所有逻辑和/或功能语言的特征? 另外,我在哪里可以学到更多这样令人惊叹的多线程技术 - 这无疑是编程的未来.

Nor*_*sey 9

被称为"数据记录"的Prolog子集仅限于纯逻辑特征(没有"切割"),并且原则上,证明搜索可以并行完成.但是你必须要小心,因为完整Prolog的语义对结果的生成顺序非常敏感,而一些真正的Prolog程序依赖于此.

像Haskell和Clean这样的纯函数式语言的情况要好一些 - 并行地评估子表达式总是安全的 - 但是性能存在很多挑战.如果你进行极端并行(每个子表达式),由于所有开销,你不会获得任何性能提升.目前有希望的方法似乎是

  • 线程(并发Haskell)

  • 数据并行Haskell

  • "火花"以parseq运营商.

并行功能已经存在了近30年,人们仍在努力使其表现良好.如果您想了解更多信息,请尝试

  • 最近关于Haskell的ACM研讨会的会议记录(以及之前的Haskell研讨会)

  • 麻省理工学院的Arvind的工作,他是这个领域的伟大先驱(查看他与R. Nikhil关于pH并行编程的书)