如果Prolog在字符串、数字、原子、列表和复合结构之间有明确的区别,那么它如何被称为非类型化。它与像Lisp这样的动态类型化语言有什么不同。
Prolog与“动态类型化语言”定义的哪一部分相冲突?李斯特的“非类型化语言”定义的哪一部分与之冲突?
任何洞察力都是值得赞赏的。
更新
我已经知道了动态、静态、强和弱打字之间的区别。我的问题是关于一个特例,那就是Prolog。我只想了解Prolog是如何被认为是非类型化的,尽管它似乎与动态类型化语言并没有明显的区别。
下面是Prolog是非类型化http://en.wikipedia.org/wiki/Prolog#Types的引用
发布于 2011-06-10 11:48:52
Prolog大多是非类型化的,因为您可以将任何类型的术语传递给任何谓词,而且通常最糟糕的情况是谓词不会成功。但是,算术谓词(如is
和=:=
)期望使用数值参数,并且可能会失败--因此存在一个类型的概念。
非纯谓词也可能期望类型为“文件句柄”的对象,否则就会爆炸。
因此,将Prolog称为"untyped“并不是严格意义上的。
发布于 2011-06-10 11:30:02
当您编写一个谓词时,如
head([H|_], H).
您没有在任何地方指定任何类型。您可以调用head([1,2,3], X)
,也可以调用head("foo", X)
,甚至可以调用head(1, [1,2,3])
。他们都跑得很好。最后一个不会导致任何错误,它只会返回false.
。我想这就是“未打字”的意思。
https://stackoverflow.com/questions/6310330
复制相似问题