2010-04-06 41 views
4
head([Y],Y):-!. 

head([X|XS],X). 

我理解的是,列表頭存儲在變量X瞭解這個序言實施頭

什麼是第一句話是什麼意思?這是削減嗎?爲什麼?

+0

嘗試一下,不要削減,看看你得到什麼。 – outis 2010-04-06 22:42:22

回答

1

第一個條款意味着如果您只有一個元素在列表中的真實(Y)將有頭。所以是的,這是一個切入點,因爲它告訴prolog如果成功達到那一點就停止尋找答案。然後第二個條款擴展到列表中有多個元素。

3

head/2的實現很簡單:

head([X | _], X). 

注意下劃線這裏的意思是「我們不關心零個或多個元素」。

沒有必要單獨列出只有一個元素(然後使用剪切)的情況。

+0

列表是[1,2,3] = [1 | [2 | [3 | []]]]。下劃線與此案例的任何列表相統一。附:頭部的第一條規則等於'head([Y | []],Y): - !。'這個剪切是必需的,或者在其他情況下它會與'head([X | Y],X)會產生額外的結果。 – ony 2010-04-07 13:15:35