0

我不明白,为什么第二个不起作用。我认为在第一个示例中,不需要 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.
4

1 回答 1

2

第二个例子不起作用。

要理解的关键是两个INDEXs inINDEX is INDEX +1是相同的,它们必须具有相同的值。这就像代数中的变量——方程中的所有 X 表示相同的值。

另一种思考方式是,Prolog 中的所有变量都是“赋值一次”变量:在变量具有其值之后,如果不回溯就无法更改它。

于 2013-05-27T21:56:56.297 回答