我正在学习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