I’m using: SWI-Prolog version 9.0.3
My code looks like this:
append([],Y,Y).
append([U|V],Y,[U|Z]) :- append(V,Y,Z).
reverse1([],[]).
reverse1([H|T],L) :- reverse1(T,X), append(X, [H], L).
My query looks like this:
?- reverse1(X,[1,2,3]).
I want the code to: Never stop. Because the X
isn’t a complete list.
But what I’m getting is: X = [3, 2, 1]
. Why?
EricGT
2
Have you tried using trace or gtrace?
1 Like
Sorry, I am a newbee in prolog.
I tried to trace the execution of reverse1(X,[1,2,3])
. And I noticed it will choice to call append(X,[H],L)
after calling reverse1(T,X).
So it will regard T
and X
as []
here.
I know, I subconsciously always thought of reverse1([],[]).
as a RULE. But it is a fact.
wlodr
4
It loops when you ask for a next answer (by a ‘;’).