Professional Documents
Culture Documents
Reversing a list:
TRACE
NOWARNINGS
DOMAINS
list=symbol*
PREDICATES
rev(list)
findrev(list,list,list)
CLAUSES
rev(L):-
findrev(L,[],List2),
write(List2),
nl.
findrev([],List1,List1).
findrev([X|Tail],List1,List2):-
findrev(Tail,[X|List1],List2).
OUTPUT:
From Beginning:
DOMAINS
list=integer*
element=integer
PREDICATES
find(list,element)
CLAUSES
find([],N) :-
find([Element|List],N) :-
N1 = N-1,
find(List,N1).
From End:
NOWARNINGS
DOMAINS
X = symbol
Tail = symbol
list = symbol*
PREDICATES
member(symbol,list,integer)
go(symbol,list,integer)
findrev(list,list,list)
CLAUSES
go(X,List,N):-
findrev(List,[],List2),
member(X,List2,N).
member(X,[X|_],0):-!.
member(X,[_|Tail],N):-
member(X,Tail,NN),
N=NN+1.
findrev([],List1,List1).
findrev([X|Tail],List1,List2):-
findrev(Tail,[X|List1],List2).