You are on page 1of 4

PRACTICAL 7 18bce363

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:

Finding the position of given element in the list:

From Beginning:

DOMAINS

list=integer*

element=integer

PREDICATES

find(list,element)

CLAUSES

find([],N) :-

write("There is no such element in the list"),nl.


find([Element|List],1) :-

write("The element is at index",Element),nl.

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).

You might also like