2012-10-24 242 views
3

我是新來的s.o和Prolog,這是我正在從事的工作,特別是SWI-Prolog。 我試圖按照標題說的去做,並且已經使用SWI庫中包含的一些方法使它在基於1的列表上工作(從1開始而不是零)。 ,這是我的代碼:元素索引

indexof(I,E,L):- 
    nth1(I,L,E). 
    indexof(-1,_,_). 

我的任務(是的,它是硬件 - _ - )是這樣做,但爲0以計數爲基礎 我試圖在最後一行添加我就是我 - 1但我不斷收到錯誤。有沒有其他方法可以將它計入基於0的計數?

對於(A,a,[w,x,y,z,a])這個索引。我應該得到4,但我得到5

回答

2

SWI-Prolog有nth0/3這就像​​但該指數在0

開始製作你原來的工作方式,你需要的東西,如:

indexof(I,E,L) :- 
    nth1(I1,L,E), 
    I is I1 - 1. 

序言變量只能分配一次。如果你嘗試I is I - 1,你聲稱I本身就是-1。這是不對的,所以謂詞失敗。您需要使用中間變量,如上例中的I1

+0

嘿謝謝!有這個中間變量更有意義。我在其他方法中使用了這種技術,只是沒有想到它在這裏:p所以是的,這就是我一直在尋找的東西,除了我擁有它的方式,而不是當案例是假的時候,我擁有它,所以它返回-1儘管我更喜歡你的方式,但我應該怎麼做。有沒有辦法我可以換出一個-1的假? ((再次對不起,我可能聽起來很愚蠢,但我只是在上週末纔開始學習序言)) – erp

+0

'(nth1(I1,L,E) - > I is I1 - 1; I = -1)'will return - 1如果找不到元素。 ' - >;'組合在其他語言中有點像if-then-else。 – mndrix