我正在學習Prolog。我正在試驗elemindex
謂詞,形式爲elemindex(element, index, list)
,例如,elemindex(1,0,[1,2,3,1]).
或elemindex(3,0,[1,2,3,1]).
。在謂詞的響應中評估s(N),而不會丟失功能
由於實例的限制,我結束了這一點:
elemindex(E, 0, [E|_]).
elemindex(E, s(M), [_|L]) :- elemindex(E,M,L).
不過,如果我查詢?- elemindex(1,N,[1,2,3,1]).
,因爲在我的例子,Prolog的迴應:
N = 0
N = s(s(s(0)))
yes
這肯定是工作,但我想s(s(s(0)))
至少顯示爲3
。此外,我無法執行像?- elemindex(E, 3, [1,2,3,4]).
這樣的查詢,但將代碼更改爲使用N is M+1
使我無法評估第1種查詢。
所以,我的問題是2倍:
- 我怎樣才能得到
s(s(s(0)))
顯示在我的結果3
? - 我該如何實現
elemindex
這樣我可以查詢元素和的索引?
爲什麼你使用'S/1'在這種情況下?你嘗試過'N#= M + 1'嗎? (使用庫'clpfd') – lurker
@lurker能解釋一下'#='會做什麼嗎?我對prolog很陌生。 – AJFarmar