为了回答这个问题,让我们先明确一些定义。
编译型语言是将源代码文件转换成可独立执行的形式(二进制、字节码等),或者转换成库以与其他程序链接。构造固定,不能修改。
解释型语言是将构造转换成可执行形式。每个转换后的构造通常会被放入一个存储区,以便后续构造引用。
现在许多编程语言既可以编译也可以解释,没有规定编程语言只能是其中之一。
在早期,大多数编程语言都是编译型或解释型的,例如C++——编译型,BASIC——解释型。
现在来回答你的问题:
Prolog:编译型语言、解释型语言还是两者兼备?
Prolog语言可编译,也可解释,因此答案是两者兼备。
不同网站给出不同答案的原因在于你正在询问语言本身,把Prolog语言看作一个抽象概念,但具体实现则指的是具体实现。因此,有些实体只进行编译或解释,而有些则两者兼备。
在我看来,过去几年中,普遍认为,如果你有一个主要的编程语言,它必须具备编译器来生成高效的代码和 REPL,使用解释器进行快速构建开发。
通常的趋势是使用 REPL 开发和测试基本的编程结构,然后将它们移动到源代码文件中,以编译构建库。然后从 REPL 引用这些库;反复操作。
有趣的是,Prolog 是我使用的第一种同时具备这两个功能的语言,那还是在 1980 年代。
如果您阅读 ISO/IEC 13211 Information technology -- Programming languages -- Prolog -- Part 1: General core
,它会说明:
这种语言起源于1970年代初期,当时Robert A. Kowalski在爱丁堡大学(后来在伦敦帝国学院)和Alain Colmerauer在法国Aix-Marseilles大学工作。他们的努力导致了在1972年将形式逻辑作为一种编程语言的基础。Kowalski的研究提供了理论框架,而Colmerauer则创造了编程语言Prolog。Colmerauer及其团队随后建立了第一个解释器,爱丁堡大学AI部门的David Warren制作了第一个编译器。