有没有比Prolog更专门用于逻辑编程的新语言?
有没有比Prolog更专门用于逻辑编程的新语言?
Mercury很不错,现代化,类似于Prolog。
Mercury是一种新的逻辑/函数式编程语言,它将声明式编程的清晰性和表达能力与先进的静态分析和错误检测功能相结合。其高度优化的执行算法提供了远远超过现有逻辑编程系统的效率,并接近传统编程系统。Mercury解决了大规模程序开发的问题,允许模块化、分离编译和众多的优化/时间权衡。
有一种非常有前途的函数逻辑编程语言叫做Curry。尽管它很新,但如果你已经了解Haskell和Prolog,那么应该很容易上手Curry,因为它直接受到这两种语言的影响。
Curry以无缝的方式结合了函数式编程(嵌套表达式、高阶函数、惰性求值)、逻辑编程(逻辑变量、部分数据结构、内置搜索)和并发编程(对逻辑变量进行同步的表达式并发评估)的特点。
请不要忘记,Prolog是许多新扩展的主机,可以被视为自己的语言。特别是约束语言,如CLP(R)、CLP(Q)、CLP(FD)。更一般的扩展,如CHR,但也有许多类型的方法。
这些语言通常作为现有Prolog系统中的库来发布。在这种环境中,您得到的往往是比从头开始系统提供的成熟和稳定的实现。毕竟,许多Prolog系统已经接近30年了。
Logtalk 是一种面向对象的逻辑编程语言,它扩展并利用了 Prolog 语言的特性,具有适合大型编程的功能集,专注于代码封装和重用机制。它高度可移植,支持作为后端编译器使用最活跃的 Prolog 实现。其他值得注意的功能包括支持原型和类、协议(接口)、共归、基于组件的编程、事件驱动编程和高级多线程编程。当前发行版包括大量的编程示例、编程工具、库以及文本编辑器和语法高亮器,支持编程和发布源代码。
Oz/Mozart 是一种多范式编程语言,支持逻辑编程作为其特性之一。我从未使用过它,所以无法说它是否好用。但它肯定是很有趣的。
免责声明:我在 Mercury 项目上工作,如果需要在 Oz/Mozart 和 Mercury 之间做出选择,我会选择 Mercury。
其他回答中没有提到Picat:
Picat是一种简单而强大的基于逻辑的多范式编程语言,旨在用于通用应用程序。 Picat是一种基于规则的语言,其中谓词、函数和演员都是通过模式匹配规则来定义的。 Picat包含许多声明性语言特性,以提高软件开发的生产力,包括显式非确定性、显式统一、函数、列表推导、约束和表格化。 Picat还提供了命令式语言结构,如赋值和循环,用于编程日常事物。基于良好设计的虚拟机并集成了垃圾收集和扩展栈和数据区域的内存管理器的Picat实现是高效且可扩展的。 Picat不仅可以用于符号计算,这是声明性语言的传统应用领域,而且还可以用于脚本编写和建模任务。
Picat看起来有些类似于Prolog,但Picat是一种多范式语言:
import util.
input_data(Tri) =>
Lines = read_file_lines("triangle.txt"),
Tri = new_array(Lines.length),
I = 1,
foreach(Line in Lines)
Tri[I] = Line.split().map(to_integer).to_array(),
I := I+1
end.