如果Prolog在字符串,数字,原子,列表和复合结构之间有明确的区别,那么它如何被称为无类型。 它与动态类型语言(例如Lisp)有何不同。
Prolog与“动态类型语言”定义的哪一部分相冲突? “无类型语言”定义的哪一部分与Lisp冲突?
感谢任何见解。
更新
我已经知道动态,静态,强弱打字之间的区别。我的问题是关于Prolog的一个特例。我只想了解Prolog如何被认为是无类型的,尽管它似乎与动态类型语言没有明显区别。
这是 a 引用,Prolog是无类型的 http://en.wikipedia.org/wiki/Prolog#Types
答案 0 :(得分:5)
Prolog主要是无类型的,因为你可以将任何类型的术语传递给任何谓词,通常,最坏的情况是谓词不会成功。但是,算术谓词(例如is
和=:=
)期望数字参数并且可能会爆炸 - 因此存在类型的概念。
非纯谓词也可能期望“文件句柄”类型的对象,否则会爆炸。
因此,将Prolog称为“无类型”并非严格属实。
答案 1 :(得分:1)
当您编写类似
的谓词时head([H|_], H).
你没有在任何地方指定任何类型。您可以拨打head([1,2,3], X)
,拨打head("foo", X)
即可拨打head(1, [1,2,3])
。所有这些都运行得很好。最后一个不会导致任何错误,它只会返回false.
。我认为这就是“无类型”的意思。