Prolog 元素索引

Prolog 元素索引,prolog,Prolog,我不熟悉s.o,也不熟悉Prolog,这正是我正在研究的,特别是SWI Prolog。 我正试着按照标题所说的去做,并使用SWI库中包含的一些方法,让它在一个基于1的列表上工作(从1开始,而不是从零开始)。 这是我的代码: indexof(I,E,L):- nth1(I,L,E). indexof(-1,_,_). 我的任务(是的,它是hw--)是这样做的,但是作为一个基于0的计数 我试图在最后一行添加i是i-1,但我不断地出错。有没有其他方法可以使其进入基于0的计数 对于这个指数

我不熟悉s.o,也不熟悉Prolog,这正是我正在研究的,特别是SWI Prolog。 我正试着按照标题所说的去做,并使用SWI库中包含的一些方法,让它在一个基于1的列表上工作(从1开始,而不是从零开始)。 这是我的代码:

indexof(I,E,L):-
   nth1(I,L,E).
   indexof(-1,_,_).
我的任务(是的,它是hw--)是这样做的,但是作为一个基于0的计数 我试图在最后一行添加i是i-1,但我不断地出错。有没有其他方法可以使其进入基于0的计数

对于这个指数(A,A,[w,x,y,z,A])。我应该得到4,但我得到5。

SWI Prolog的结果与之类似,但索引从0开始

要使您的原始方法发挥作用,您需要:

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

Prolog变量只能分配一次。如果您尝试了
I是I-1
,您就声称
I
本身就是负1。这永远不是真的,所以谓词失败。您需要使用中间变量,如上例中的
I1

嘿,谢谢!有了中间变量就更有意义了。我在我的其他两种方法中使用了这种技术,只是在这里没有想到:p所以是的,这就是我在寻找的,除了我拥有它的方式,而不是当案例为假时,我拥有它,所以它返回-1,尽管我更喜欢你的方式,-1我应该怎么做。有没有一种方法可以让我用a-1换掉假的?((再次抱歉,我可能听起来很傻,但我只是在上周末才开始学习prolog))
(nth1(I1,L,E)->我是I1-1;i=-1)
如果找不到元素,将返回-1。
->组合有点像其他语言中的if-then-else。