我不明白,为什么第二个不起作用。我想在第一个例子中,不需要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.
答案 0 :(得分:2)
第二个例子不起作用。
要理解的关键是INDEX
中的INDEX is INDEX +1
都是相同的,它们必须具有相同的值。它就像代数中的变量 - 等式中的所有X都表示相同的值。
另一种思考方式是Prolog中的所有变量都是“赋值一次”变量:在变量具有其值之后,如果没有回溯,则无法更改。