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

时间:2016-05-25 03:04:48

标签: prolog compiled interpreted-language

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

2 个答案:

答案 0 :(得分:8)

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

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

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

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

答案 1 :(得分:6)

要回答这个问题,请确定一些定义。

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

解释语言是将构造转换为可在转换后执行的形式的语言。每个转换后的构造通常都放入一个可以被后面的构造引用的商店中。

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

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

现在回答你的问题:

  

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

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

您看到不同网站的不同答案的原因是您询问语言,将Prolog语言视为abstract concept,但在查看具体实施时,请将网站视为引用{ {1}}。所以有些实体会做一个或另一个,有些实体做两个。

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

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

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

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

  

这种语言起源于20世纪70年代早期Robert A.的工作。   科瓦尔斯基在爱丁堡大学期间(从那时起在帝国大学)   伦敦大学学院和伦敦大学的Alain Colmerauer   Aix-Marseilles在法国。他们的努力导致了1972年的使用   形式逻辑作为编程语言的基础。科瓦尔斯基的   研究提供了理论框架,而Colmerauer给出了   升级到编程语言Prolog。然后Colmerauer和他的团队   建立了第一个翻译,大卫沃伦在AI部门,   爱丁堡大学制作了第一个编译器。