Prolog是一种无类型的语言吗? Prolog和动态类型语言有什么区别?

时间:2011-06-10 18:02:10

标签: programming-languages types lisp prolog dynamic-typing

如果Prolog在字符串,数字,原子,列表和复合结构之间有明确的区别,那么它如何被称为无类型。 它与动态类型语言(例如Lisp)有何不同。

Prolog与“动态类型语言”定义的哪一部分相冲突? “无类型语言”定义的哪一部分与Lisp冲突?

感谢任何见解。

更新

我已经知道动态,静态,强弱打字之间的区别。我的问题是关于Prolog的一个特例。我只想了解Prolog如何被认为是无类型的,尽管它似乎与动态类型语言没有明显区别。

这是 a 引用,Prolog是无类型的 http://en.wikipedia.org/wiki/Prolog#Types

2 个答案:

答案 0 :(得分:5)

Prolog主要是无类型的,因为你可以将任何类型的术语传递给任何谓词,通常,最坏的情况是谓词不会成功。但是,算术谓词(例如is=:=)期望数字参数并且可能会爆炸 - 因此存在类型的概念。

非纯谓词也可能期望“文件句柄”类型的对象,否则会爆炸。

因此,将Prolog称为“无类型”并非严格属实。

答案 1 :(得分:1)

当您编写类似

的谓词时
head([H|_], H).

你没有在任何地方指定任何类型。您可以拨打head([1,2,3], X),拨打head("foo", X)即可拨打head(1, [1,2,3])。所有这些都运行得很好。最后一个不会导致任何错误,它只会返回false.。我认为这就是“无类型”的意思。