元素索引

时间:2012-10-24 04:01:35

标签: prolog

我是s.o的新手,也是Prolog的新手,这正是我正在研究的,特别是SWI-Prolog。 我正在尝试按照标题所说的方式进行操作,并使用SWI库中包含的一些方法将其用于基于1的列表(从1开始而不是零开始)。 这是我的代码:

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

我的任务(是的,它是hw - _ - )是这样做的,但作为基于0的计数 我尝试在最后一行添加我是我 - 1但我不断收到错误。有没有其他方法可以将它变成基于0的计数?

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

1 个答案:

答案 0 :(得分:2)

SWI-Prolog的nth0/3nth1/3类似,但索引从0开始。

要使原始方法有效,您需要以下内容:

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

Prolog变量只能分配一次。如果您尝试I is I - 1,则声称I本身为负1.这绝不是真的,因此谓词失败了。您需要使用中间变量,例如上面示例中的I1