Prolog-是内置命令

Prolog-是内置命令,prolog,Prolog,我不明白,为什么第二个不起作用。在第一个示例中,我认为不需要II变量,但看起来是这样,但我不知道为什么? 如果我调用findex([1,2,5,4],5,i),则第一个示例返回正确的索引3,第二个示例返回false。有人能帮我理解吗 findex([X|_], X, 1). findex([_|T], MAX, INDEX) :- findex(T, MAX, II), INDEX is II +1. findex([X|_], X, 1). findex([_|T], MAX, INDEX)

我不明白,为什么第二个不起作用。在第一个示例中,我认为不需要II变量,但看起来是这样,但我不知道为什么? 如果我调用
findex([1,2,5,4],5,i)
,则第一个示例返回正确的索引
3
,第二个示例返回
false
。有人能帮我理解吗

findex([X|_], X, 1).
findex([_|T], MAX, INDEX) :- findex(T, MAX, II), INDEX is II +1.

findex([X|_], X, 1).
findex([_|T], MAX, INDEX) :- findex(T, MAX, INDEX), INDEX is INDEX +1.

第二个例子行不通

要理解的关键是
索引中的
索引
s和
索引+1
都是相同的,它们必须具有相同的值。这就像代数中的变量——方程中的所有X都表示相同的值

另一种思考方式是,Prolog中的所有变量都是“赋值一次”变量:在一个变量有了它的值之后,如果没有回溯,它就不能被更改