Prolog:编译或解释语言还是两者兼而有之?

Cha*_*aga 6 compiled interpreted-language prolog

有prolog的编译器,但其他网站说语言本身是一种解释语言.如果prolog真的是一种解释性语言,我很困惑.有人可以澄清一下该语言究竟是什么吗?编译语言或口译语言?

小智 8

大多数实现编译为字节代码并在Prolog VM上运行.实现使用自己的VM,具有不同的设计选择和权衡.

GNU-Prolog最初是作为C语言编辑器的Prolog开始的,现在它被编译为本机代码.

你也有Logtalk(带Prolog的OOP),据我所知,它将Logtalk源重新写入Prolog.它可以使用整个Prolog实现作为后端,因此它可以用作Prolog实现之间的兼容层.

这个问题真的无法回答; 您应该阅读您感兴趣的每个Prolog实现的文档.但是,您可以获得的最佳答案是Prolog实现的具体方式.Prolog语言只是:编程语言,而不是运行时或VM或编译器等等.

  • 你说的没错.Wrt Logtalk,它的编译器是一个三阶段编译器,第三阶段和最后一阶段是在生成的中间Prolog文件上调用后端Prolog编译器.这里发生的事情当然取决于所选择的后端Prolog编译器.这不是一种不常见的方法(例如早期的C++和Cfront). (5认同)

Guy*_*der 6

要回答这个问题,可以确定一些定义.

编译语言是将源代码文件转换为表单(二进制,字节代码等)以供独立执行或转换为库以与其他程序链接的语言.结构是固定的,不能修改.

解释语言是将构造转换为可在转换后执行的形式的语言.通常将每个转换的构造放入可以由后面的构造引用的存储中.

现在许多编程语言都可以编译和解释,没有规则说编程语言只能是一个或另一个.

在早期,大多数编程语言都是其中之一,例如C++ - 编译,BASIC - 解释.

现在回答你的问题:

Prolog:编译或解释语言还是两者兼而有之?

Prolog语言可以编译,可以解释,所以答案都是.

您在不同网站上看到不同答案的原因是您询问的是语言,将Prolog语言视为一种语言abstract concept,但在查看具体实现时,请将这些网站视为指代 concrete implementation.所以一些实体做一个或另一个,有些实体做两个.

在过去几年中,在我看来,如果你有一个主要的编程语言,它必须有一个编译器来生成有效的代码和一个使用解释器来快速开发构造的REPL.

通常,趋势是使用REPL开发和测试基本编程构造,然后将它们移动到将被编译以构建库的源代码文件中.然后从REPL引用这些库; 冲洗并重复.

有趣的是Prolog是我使用过的第一种语言,而且这种语言早在1980年代.

如果您阅读ISO/IEC 13211 Information technology -- Programming languages -- Prolog -- Part 1: General core它说:

该语言起源于20世纪70年代早期Robert A. Kowalski在爱丁堡大学(以及伦敦帝国理工学院)和法国Aix-Marseilles大学的Alain Colmerauer工作.他们的努力在1972年导致使用形式逻辑作为编程语言的基础.Kowalski的研究提供了理论框架,而Colmerauer则提出了编程语言Prolog.然后Colmerauer和他的团队建立了第一个翻译,爱丁堡大学AI部门的David Warren制作了第一个编译器.