16

有没有比 Prolog 专门用于逻辑编程的新语言?

4

6 回答 6

10

水星是美好而现代的,类似于序言。

Mercury 是一种新的逻辑/函数式编程语言,它将声明式编程的清晰性和表现力与高级静态分析和错误检测功能相结合。其高度优化的执行算法提供的效率远远超过现有的逻辑编程系统,并接近传统的编程系统。Mercury 解决了大规模程序开发的问题,允许模块化、单独编译和大量优化/时间权衡。

于 2011-01-16T16:18:04.350 回答
5

有一种很有前途的函数式逻辑编程语言,叫做Curry。尽管它很新,但如果您已经了解 Haskell 和 Prolog,应该很容易习惯 Curry,因为它直接受到这两种语言的影响。

Curry 以无缝方式结合了函数式编程(嵌套表达式、高阶函数、惰性求值)、逻辑编程(逻辑变量、部分数据结构、内置搜索)和并发编程(表达式的并发求值与同步逻辑变量)。

于 2011-01-16T16:22:28.357 回答
3

Logtalk is an object-oriented logic programming language that extends and leverages the Prolog language with a feature set suitable for programming in the large, focusing in code encapsulation and reuse mechanisms. It's highly portable supporting as a backend compiler most actively maintained Prolog implementations. Other noteworthy features include support for both prototypes and classes, protocols (interfaces), coinduction, component-based programming, event-driven programming, and high-level multi-threading programming. The current distribution include a large set of programming examples, programming tools, libraries, and text editors and syntax highlighters support for programming and publishing source code.

于 2013-11-16T02:23:26.483 回答
1

不要忘记 Prolog 是许多新扩展的宿主,这些扩展本身可以被视为语言。特别是 CLP(R)、CLP(Q)、CLP(FD) 等约束语言。更通用的扩展,如 CHR,但也有许多类型化的方法。

这些语言通常作为现有 Prolog 系统中的库提供。您在该设置中得到的通常是比从头开始的系统所能提供的更加成熟和稳定的实现。毕竟,许多 Prolog 系统已经有将近 30 年的历史了。

于 2013-11-16T01:35:33.770 回答
1

Oz/Mozart是一种多范式编程语言,支持逻辑编程作为其功能之一。我从来没有用过它,所以我不能说它是否好。不过,这当然看起来很有趣。

免责声明:我从事 Mercury 项目,在 Oz/Mozart 和 Mercury 之间进行选择时会选择 Mercury。

于 2011-08-04T04:24:24.743 回答
1

其他答案都没有提到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.
于 2021-06-28T12:53:41.067 回答