10

如果 Prolog 对字符串、数字、原子、列表和复合结构有明确的区分,它怎么能被称为无类型。以及它与动态类型语言(例如 Lisp)有何不同。

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

任何见解都值得赞赏。

更新

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

这是 Prolog 无类型 的参考http://en.wikipedia.org/wiki/Prolog#Types

4

2 回答 2

4

Prolog 基本上是无类型的,因为您可以将任何类型的术语传递给任何谓词,通常最坏的情况是谓词不会成功。但是,算术谓词,例如is=:=期望数字参数,可能会爆炸 - 所以那里有一个类型的概念。

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

因此,严格来说,将 Prolog 称为“无类型”并不正确。

于 2011-06-10T19:48:52.603 回答
1

当你写一个谓词时

head([H|_], H).

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

于 2011-06-10T19:30:02.947 回答