2013-05-27 26 views
0

我不明白,爲什麼第二個不起作用。我想在第一個例子中,II變量不是必需的,但看起來像是這樣,但我不知道爲什麼? 如果我打電話findex([1,2,5,4], 5, I),比第一個例子返回正確的索引3和第二個返回false。有人能幫我理解嗎?序言 - 內置命令

findex([X|_], X, 1). 
findex([_|T], MAX, INDEX) :- findex(T, MAX, II), INDEX is II +1. 

findex([X|_], X, 1). 
findex([_|T], MAX, INDEX) :- findex(T, MAX, INDEX), INDEX is INDEX +1. 

回答

2

第二個例子不起作用。

要知道的關鍵是INDEX s在INDEX is INDEX +1是相同的,它們必須具有相同的值。它就像代數中的變量 - 方程中的所有X都意味着相同的值。

另一種考慮它的方法是Prolog中的所有變量都是「賦值一次」的變量:在一個變量具有它的值之後,它不能在沒有回溯的情況下被改變。