有prolog的编译器,但其他网站说该语言本身是一种解释语言。我很困惑prolog是否真的是一种解释语言。有人能澄清一下语言到底是什么吗?编译语言还是解释语言?
要回答这个问题,让我们确定一些定义。
编译语言是一种将源代码文件转换为单独执行的形式(二进制、字节码等)或转换为与其他程序链接的库的语言。构造是固定的,不能修改。
解释语言是一种将结构转换为可以在转换后执行的形式的语言。每个转换后的构造通常都被放入一个存储中,以后的构造可以引用该存储。
现在许多编程语言既可以编译也可以解释,没有规则规定编程语言只能是其中之一。
在早期,大多数编程语言都是这样或那样的,例如C++编译的、BASIC解释的。
现在回答您的问题:
Prolog:编译语言或解释语言,还是两者兼而有之?
Prolog语言可以编译,也可以解释,所以答案是两者兼而有之。
对于不同的站点,您看到不同答案的原因是,您询问的是语言,将Prolog语言视为抽象概念,但从具体实现来看,将这些站点视为具体实现。因此,有些实体做其中一个或另一个,有些实体同时做这两个。
在过去的几年里,在我看来,人们的共识是,如果你有一种主要的stay编程语言,它必须有一个编译器来生成高效的代码,以及一个使用解释器来快速开发构造的REPL。
通常,趋势是使用REPL开发和测试基本的编程构造,然后将它们移动到将被编译以构建库的源代码文件中。然后从REPL中引用库;冲洗并重复。
有趣的是,Prolog是我使用的第一种同时拥有这两种语言的语言,那要追溯到20世纪80年代。
如果您阅读ISO/IEC 13211 Information technology -- Programming languages -- Prolog -- Part 1: General core
,它会显示:
该语言源于20世纪70年代初罗伯特·A的作品。科瓦尔斯基在爱丁堡大学期间(此后在帝国理工学院伦敦学院)和伦敦大学的Alain Colmerauer艾克斯马赛在法国。他们的努力导致在1972年使用形式逻辑作为编程语言的基础。科瓦尔斯基氏研究提供了理论框架,而Colmerauer的研究提供了编程语言Prolog的兴起。Colmerauer和他的团队建造了第一个口译员,人工智能部门的David Warren,爱丁堡大学,产生了第一个编译器。
大多数实现编译为字节码并在Prolog VM上运行。实施使用具有不同设计选择和权衡的自己的虚拟机。
GNU Prolog最初是一个Prolog到C的"transpiler",现在它被编译为本地代码。
您还有Logtalk(Prolog的OOP),据我所知,它将Logtalk源代码重写到Prolog。它可以使用整个Prolog实现阵列作为后端,因此可以用作Prolog实现之间的兼容性层。
这个问题真的无法回答;你应该阅读你感兴趣的每个Prolog实现的文档。然而,你能得到的最好答案是特定的Prolog实现是如何做到的。Prolog语言就是这样:一种编程语言,而不是运行时、VM或编译器等等。