还有比Prolog更新的专门用于逻辑编程的语言吗?
Mercury 漂亮又现代,类似于序言。
Mercury 是一种新的逻辑/函数式编程语言,它将声明式编程的清晰度和表现力与先进的静态分析和错误检测功能结合在一起。其高度优化的执行算法的效率远远超过现有的逻辑编程系统,接近传统的编程系统。 Mercury 解决了大规模程序开发的问题,允许模块化、单独编译和大量优化/时间权衡。
有一种非常有前途的函数式逻辑编程语言,称为 Curry。尽管 Curry 很新颖,但如果您已经了解 Haskell 和 Prolog,那么应该很容易习惯 Curry,因为它直接受到这两种语言的影响。
咖喱无缝结合 函数式编程的特点 (嵌套表达式,高阶 函数、惰性求值)、逻辑 编程(逻辑变量, 部分数据结构,内置 搜索)和并发编程 (表达式的并发计算 逻辑同步 变量)。
不要忘记 Prolog 是许多新扩展的宿主,这些扩展本身可以被视为语言。特别是像 CLP(R)、CLP(Q)、CLP(FD) 这样的约束语言。更通用的扩展,例如 CHR,还有许多类型化方法。
这些语言通常作为现有 Prolog 系统中的库提供。在这种设置中,您得到的通常是比从头开始的系统所能提供的更加成熟和稳定的实现。毕竟,很多 Prolog 系统已经有近 30 年的历史了。
Logtalk是一种面向对象的逻辑编程语言,它扩展和利用了Prolog语言,具有适合大规模编程的功能集,重点关注代码封装和重用机制。它具有高度可移植性,支持作为最积极维护的 Prolog 实现的后端编译器。其他值得注意的功能包括对原型和类、协议(接口)、共归纳、基于组件的编程、事件驱动编程和高级多线程编程的支持。当前发行版包括大量编程示例、编程工具、库以及文本编辑器和语法突出显示,支持编程和发布源代码。
Oz/Mozart 是一种多范式编程语言,支持逻辑编程作为其功能之一。 我没用过所以不能说好不好。 不过,这确实看起来很有趣。
免责声明:我从事 Mercury 项目,并且会在 Oz/Mozart 和 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.