2011-06-10 106 views
9

如果Prolog在字符串,數字,原子,列表和複合結構之間有明確的區別,它如何被稱爲無類型。 它與動態類型語言(如Lisp)有什麼不同?Prolog是一種無類型的語言嗎? Prolog和動態類型語言有什麼區別?

「動態類型語言」的定義中的哪一部分與Prolog衝突? Lisp與「無類型語言」的定義有哪些衝突?

任何洞察力是讚賞。

更新

我已經知道什麼是動態的,靜態的,強類型之間的區別。我的問題是關於Prolog的特例。我只是想了解Prolog如何被認爲是無類型的,儘管它似乎與動態類型語言沒有明顯的區別。

這裏有一個參考這Prolog是類型化 http://en.wikipedia.org/wiki/Prolog#Types

+0

你有這個參考嗎? – 2011-06-10 18:06:04

+1

我是你混合了強大的打字和動態打字。 – mikerobi 2011-06-10 18:07:39

+0

究竟是什麼參考? – is7s 2011-06-10 18:08:01

回答

5

從某種意義上講,Prolog基本上是無類型的,您可以將任何類型的術語傳遞給任何謂詞,通常最糟糕的情況是謂詞不會成功。但是,算術謂詞,如is=:=需要數字參數,並且可能會爆炸 - 因此存在類型的概念。

非純謂詞也可能期望類型爲「文件句柄」的對象,否則就爆發。

因此,調用Prolog「untyped」並不嚴格。

1

當你寫這樣

head([H|_], H). 

謂詞時,不要在任何地方指定任何類型。你可以撥打電話head([1,2,3], X),你可以撥打head("foo", X),你甚至可以撥打head(1, [1,2,3])。他們都運行得很好。最後一個不會導致任何錯誤,它只會返回false.。我認爲這就是「無類型」的含義。

+0

+1個很好的例子......但是它返回false而不是發出一個足以稱之爲「無類型」的錯誤的事實? – is7s 2011-06-10 20:17:12

+0

@ is7s,我認爲它確實。如果你試圖調用'head(1)',它會導致一個錯誤,因爲它有錯誤的參數計數,它不會返回'false'。 'false'是語言正常功能的一部分,不是一些錯誤狀態。 – svick 2011-06-10 20:32:38

+0

@svick其實你剛剛給出的例子顯示了prolog有類型,因爲它表明,'head'類型是一個期望一個參數的謂詞,如果它真的是無類型的,它在這種情況下也應該返回false。此外,你的文章中的主要例子也可以被理解爲:「head」是一個謂詞,它需要_type_ list的第一個參數,如果第一個參數不是_type_列表的任何東西,它就是undefined('false')。 – is7s 2011-06-10 21:22:24

相關問題