To find sum of n natural numbers
Domains
N,R = integer
Predicates
sum(integer,integer)
Clauses
sum(1,1).
sum(N,R):-N>1,
N1=N-1,
sum(N1,R1),
R=R1+N.
To find factorial of a number
Domains
N,F = integer
Predicates
fact(integer,integer)
Clauses
fact(0,1).
fact(N,F):-N>0,
N1=N-1,
fact(N1,F1),
F=F1*N.
To calculate y=x^n.
Domains
X,N,Y=integer
Predicates
expo(integer,integer,integer)
Clauses
expo(X,0,1).
expo(X,N,Y):-N>0,
N1=N-1,
expo(X,N1,Y1),
Y=Y1*X.
To find maximum of two numbers
Domains
N = real
Predicates
max(real,real,real)
Clauses
max(X,X,X).
max(X,Y,X):-X>Y.
max(X,Y,Y):-Y>X.
To calculate the sum of digits of a number
Domains
N,S=integer
Predicates
sum_digits(integer,integer)
Clauses
sum_digits(0,0).
sum_digits(N,S):-N>0,
R=N mod 10,
N1=N div 10,
sum_digits(N1,S1),
S=S1+R.
To find length of a list
Domains
slist = symbol*
clist = char*
ilist = integer*
rlist = real*
Predicates
length(slist,integer)
length(clist,integer)
length(ilist,integer)
length(rlist,integer)
Clauses
length([],0).
length([H|T],N):-
length(T,N1),
N=1+N1.
To check for an element to be a member of the list.
Domains
slist = symbol*
clist = char*
ilist = integer*
rlist = real*
Predicates
member(symbol,slist)
member(char,clist)
member(integer,ilist)
member(real,rlist)
Clauses
member(X,[X|_]).
member(X,[_|Tail]):-member(X,Tail).
To print first and last element of a list.
Domains
slist=symbol*
ilist=integer*
clist=char*
rlist=real*
Predicates
fele(slist,symbol).
fele(clist,char).
fele(ilist,integer).
fele(rlist,real).
lele(slist,symbol).
lele(clist,char).
lele(ilist,integer).
lele(rlist,real).
Clauses
fele([H|_],H):-write(H," is the first element\n").
lele([X],X):-write(X," is the last element \n").
lele([_|T],X):-lele(T,X).
Append a list to a given list.
Domains
slist=symbol*
ilist=integer*
clist=char*
rlist=real*
Predicates
append(slist,slist,slist)
append(ilist,ilist,ilist)
append(clist,clist,clist)
append(rlist,rlist,rlist)
Clauses
append([],L,L).
append([H|Tail1],List2,[H|Tail3]):-
append(Tail1,List2,Tail3).
To print maximum of a list.
Domains
rlist = real*
Predicates
max(rlist,real).
maxlist(real,real,real).
Clauses
maxlist(H,S,X):-H>=S,X=H,!.
maxlist(_,S,X):-X=S.
max([H],H).
max([H|T],X):-max(T,S),
maxlist(H,S,X).
To delete nth element from the list
Domains
slist=symbol*
ilist=integer*
clist=char*
rlist=real*
Predicates
deleten(slist,integer,slist)
deleten(ilist,integer,ilist)
deleten(clist,integer,clist)
deleten(rlist,integer,rlist)
Clauses
deleten(L,0,L).
deleten([_|T],1,T).
deleten([H|T],N,[H|T1]):-
N1=N-1,
deleten(T,N1,T1).
To insert an element in the list
Domains
slist=symbol*
ilist=integer*
clist=char*
rlist=real*
Predicates
insertn(slist,symbol,integer,slist)
insertn(ilist,integer,integer,ilist)
insertn(clist,char,integer,clist)
insertn(rlist,real,integer,rlist)
Clauses
insertn(L,X,1,[X|L]).
insertn([H|T],X,N,[H|T1]):-
N1=N-1,
insertn(T,X,N1,T1).
To reverse a given list
Domains
ilist = integer*
Predicates
append(ilist,ilist,ilist)
reverse(ilist,ilist)
Clauses
append([],L,L)
append([H|T1],L2,[H|T3]):-
append(T1,L2,T3).
reverse([],[]).
reverse([X|Xs],Zs):-
reverse(Xs,Ys),
append(Ys,[X],Zs).
To print the union of 2 lists
Domains
ilist=integer*
Predicates
union(ilist,ilist,ilist)
Clauses
union([],L,L).
union([H|T],L2,[H|T3]):-
member(H,L2),
delete(L2,H,L3),
union(T1,L3,T3).
union([H|T],L2,[H|T3]):-
not(member(H,L2)),
union(T1,L2,T3).
To print the intersection of 2 lists
Domains
ilist=integer*
Predicates
intersect(ilist,ilist,ilist)
Clauses
intersect([],[_|_],[]).
intersect([H|T],L2,[H|T3]):-
member(H,L2),
intersect(T1,L3,T3).
intersect([H|T],L2,T3):-
not(member(H,L2)),
intersect(T1,L2,T3).
To check whether list1 is a subset of list2 or not
Domains
slist=symbol*
ilist=integer*
clist=char*
rlist=real*
Predicates
subset(slist,slist)
subset(clist,clist)
subset(ilist,ilist)
subset(rlist,rlist)
Clauses
subset([],[_|_]).
subset([H|Tail],L):-member(H,L),
subset(Tail,L).
To split a list into 2 lists such that one contains all the even numbers and other odd
Domains
ilist = integer*
Predicates
split(ilist,ilist,ilist)
Clauses
split([],[],[]).
split([H|T],[H|T1],T2):-
(H mod 2)=0,
split(T,T1,T2).
split([H|T],T1,[H|T2]):-
(H mod 2)<>0,
split(T,T1,T2).
To split a list into 2 lists such that one contains all the smaller numbers than a given number and other greater.
Domains
rlist = real*
Predicates
split(rlist,real,rlist,rlist)
Clauses
split([],_,[],[]).
split([H|T],X,[H|T1],T2):-H<=X,
split(T,X,T1,T2).
split([H|T],X,T1,[H|T2]):-H>X,
split(T,X,T1,T2).
To merge two ordered lists to form 1 ordered list.
Domains
slist = symbol*
clist = char*
ilist = integer*
rlist = real*
Predicates
merge(slist,slist,slist)
merge(clist,clist,clist)
merge(ilist,ilist,ilist)
merge(rlist,rlist,rlist)
Clauses
merge([],[],[]).
merge(L,[],L).
merge([],L,L).
merge([H1|T1],[H2|T2],[H1|T]):-H1<=H2,
merge(T1,[H2|T2],T).
merge([H1|T1],[H2|T2],[H2|T]):-H1>H2,
merge([H1|T1],T2,T).