0% found this document useful (0 votes)
268 views

Prolog Program

The document describes 11 problems related to writing Prolog programs. It provides the objective, prerequisites, and solution for each problem. The problems cover topics like creating a family tree, calculating factorials and Fibonacci numbers, finding greatest common divisors, Tower of Hanoi, list operations, and graph traversal. The document aims to demonstrate the use of recursion, logic programming, and core Prolog concepts.

Uploaded by

Rakesh Ghara
Copyright
© © All Rights Reserved
Available Formats
Download as PDF, TXT or read online on Scribd
0% found this document useful (0 votes)
268 views

Prolog Program

The document describes 11 problems related to writing Prolog programs. It provides the objective, prerequisites, and solution for each problem. The problems cover topics like creating a family tree, calculating factorials and Fibonacci numbers, finding greatest common divisors, Tower of Hanoi, list operations, and graph traversal. The document aims to demonstrate the use of recursion, logic programming, and core Prolog concepts.

Uploaded by

Rakesh Ghara
Copyright
© © All Rights Reserved
Available Formats
Download as PDF, TXT or read online on Scribd
You are on page 1/ 6

Prolog Program

Problem (1): Write a program to create a family tree.


Objective:
1. To find the relation between two person.
2. To find the persons who are related with each other by any relation.
3. To get the basic knowledge of facts, rules and queries.
Prerequisite/Recommendation:
a. Knowledge of Prolog.
b. Knowledge of propositional and predicate logic.

Solution​:
%family tree
parent(​nitu​,​rakhi​)​.
parent(​hari​,​jodu​)​.
parent(​jodu​,​rekha​)​.
parent(​nitu​,​rekha​)​.
parent(​hari​,​shyam​)​.
parent(​shyam​,​ram​)​.
parent(​shyam​,​sita​)​.
parent(​moli​,​sita​)​.
parent(​rekha​,​boby​)​.
parent(​jodu​,​rakhi​)​.
brother(​ram​,​sita​)​.
female(​sita​)​.
female(​boby​)​.
female(​nitu​)​.
female(​mita​)​.
wife(​nitu​,​jodu​)​.
sister(​rekha​,​rakhi​)​.
male(​jodu​)​.
male(​hari​)​.
sister(X,Y)​:-​brother(Y,X)​,​female(X)​.
mother(X,Y)​:-​parent(X,Y)​,​female(X)​.
grandfather(X,Y)​:-​parent(W,Y)​,​parent(X,W)​,​male(X)​.
%grandfather(X,Y):-parent(W,Y),parent(X,W),female(X).

?-​brother(X,​sita​)​,​write(X)​,​ln​,​nl​.
?-​nl​,​sister(X,​ram​)​,​write(X)​,​ln​.
?-​nl​,​mother(P,​rakhi​)​,​write(P)​,​ln​.
?-​nl​,​grandfather(A,​sita​)​,​write(A)​,​ln​.
?-​nl​,​grandfather(A,​boby​)​,​write(A)​,​ln​.
?-​n1​,​parent(B,​boby​)​,​write(B)​,​ln​.
?-​trace​.

Suggested web site- ​http://boklm.eu/prolog/page_0.html


Prolog Program

Problem (2):​ ​Write a program to find the factorial of a number.


Objective:
a. To solve the combinatorial problems.
b. To use recursion in Prolog.
Prerequisite/Recommendation:
a. Knowledge of Prolog.
b. Knowledge of propositional and predicate logic.

Solution​:
%factorial of N
factorial(​0​,​1​)​.
factorial(N,F)​ :-
N​>​0​,​N1​ is​ N​-​1​,​factorial(N1,F1)​,​F​ is​ N​ *​ F1​.

?-​ factorial(​5​,W)​,​write(W)​.

Problem (3): Write a program to find the Nth term of fibonacci


Objective:
a. To use recursion in Prolog.
b. To solve similar types of problems such as Ackermann’s function and Tower of Hanoi.
Prerequisite/Recommendation:
a. Knowledge of Prolog.
b. Knowledge of propositional and predicate logic.

Solution​:
%Nth term of fibonacci
fibo(​1​,​ 0​)​.
fibo(​2​,​ 1​)​.
fibo(N, R)​ :-
N1​ is​ N​-​1​,​ N2​ is​ N​-​2​,
fibo(N1, R1)​,​fibo(N2, R2)​,
R​ is​ R1​ +​ R2​.
?-​fibo(​6​,W)​,​write(W)​.

Problem (4): Write a program to find the GCD of two numbers.


Objective:
a. To use recursion in Prolog.
b. To solve similar types of problems such as Ackermann’s function and Tower of Hanoi.

Suggested web site- ​http://boklm.eu/prolog/page_0.html


Prolog Program
Prerequisite/Recommendation:
a. Knowledge of Prolog.
b. Knowledge of propositional and predicate logic.

Solution​:
%gcd of A and B
gcd(A,​ 0​, A)​.
gcd(A, B, D)​ :- (​A​>​B​),(​B​>​0​),​R​ is​ A​ mod​B​,​gcd(B,R,D)​.
gcd(A, B, D)​ :- (​A​<​B​),​gcd(B,A,D)​.
?-​gcd(​50​,​15​,D)​,​ write(D)​.

Problem (5): Write a program to implement tower of Hanoi.


Objective:
1. To use recursion in Prolog.
2. To implement Tower of Hanoi.
Prerequisite/Recommendation:
a. Knowledge of Prolog.
b. Knowledge of propositional and predicate logic.
Solution​:

%Towers of Hanoi
​move(1,X,Y,_):-
write("Move top disk from"),
Write(X) ,
Write(‘to’),
write(Y),
nl.
move(N,X,Y,Z):-
N>1,
M is N-1,
move(M,X,Z,Y),
move(1,X,Y,_),
move(M,Z,Y,X).
?-move(3,left,right,centre).

Problem (6): Write a program to search an element in a list of elements.


Objective:
a. To handle lists in Prolog.
b. To implement sequential searching.
Prerequisite/Recommendation:
a. Knowledge of Lists in Prolog.
b. Knowledge of propositional and predicate logic.

Suggested web site- ​http://boklm.eu/prolog/page_0.html


Prolog Program
Solution​:
%search an elememt
arr(X,​[​X​|​_​]​,​1​)​.
arr(X,​[​_​|​Y​]​,N)​:-​arr(X,Y,N1)​,​N​ is​ N1​+​1​.

?-​arr(​6​,​[​2​,​3​,​4​,​5​,​6​,​12​]​,N)​,​write(N)​.

Problem (7): Write a program to reverse a list of elements.


Objective:
1. To handle lists in Prolog.
2. To learn list manipulation.
Prerequisite/Recommendation:
a. Knowledge of Lists in Prolog.
b. Knowledge of propositional and predicate logic.

Solution:
%reverse list

reverse(​[]​,X,X)​.
reverse(​[​X​|​Y​]​,Z,W)​ :-​ reverse(Y,​[​X​|​Z​]​,W)​.

?-​reverse(​[​4​,​2​,​3​]​,​[]​,A)​,​write(A)​.

Problem (8): Write a program to concatenate two lists.


Objective:
a. To handle lists in Prolog.
b. To do list manipulation.
Prerequisite/Recommendation:
1. Knowledge of Lists in Prolog.
2. Knowledge of propositional and predicate logic.

Solution:
%LIST CONCATENATION
list(​[]​,L,L)​.
list(​[​X​|​Y​]​,M,​[​X​|​N​]​)​:-​ list(Y,M,N)​.

?-​ list(​[​1​,​2​,​3​]​,​[​4​,​5​,​6​]​,P)​,​write(P)​.

Problem (9): Write a program to delete an element from a list.


Objective:
a. To handle lists in Prolog.
b. To do list manipulation.
Prerequisite/Recommendation:
1. Knowledge of Lists in Prolog.

Suggested web site- ​http://boklm.eu/prolog/page_0.html


Prolog Program
2. Knowledge of propositional and predicate logic.

Solution:
% ​DELETE ELEMENT FORM LIST
list(X,​[​X​|​Y​]​,Y)​.
list(X,​[​M​|​P​]​,​[​M​|​Q​]​)​:-​ list(X,P,Q)​.

?-​list(​34​,​[​5​,​7​,​8​,​34​,​77​]​,W)​,​write(W)​.

Problem (10): Write a program to display Fibonacci list.


Objective:
a. To handle lists in Prolog.
b. To generate a list using a function.
Prerequisite/Recommendation:
a. Knowledge of Lists in Prolog.
b. Knowledge of propositional and predicate logic.

Solution:
% FIBONACCI LIST
fibLi(P,L)​:-​fibs(P,K)​,​reverse(K,​[]​,L)​.
fibs(​0​,​[]​)​.
fibs(X,​[​F​|​Y​]​)​:-​X1​ is​ X​-​1​,​fib(X,F)​,​fibs(X1,Y)​.
fib(​1​,​0​)​.
fib(​2​,​1​)​.
fib(N,F)​:-​N1​ is​ N​-​1​,​N2​ is​ N1​-​1​,​fib(N1,F1)​,​fib(N2,F2)​,​F​ is​ F1​+​F2​.
reverse(​[​X​|​Y​]​,Z,W)​:-​reverse(Y,​[​X​|​Z​]​,W)​.
reverse(​[]​,X,X)​.
?-​fibLi(​6​,F)​,​write(F)​.

Problem (11): Write a program to traverse a graph path.


Objective:
aTo handle lists in Prolog.
bTo find out path between two nodes of a graph.
c. Can be modified to find out the shortest path between two nodes of a graph.
Prerequisite/Recommendation:
1. Knowledge of Lists in Prolog.
2. Knowledge of propositional and predicate logic.

Solution:
%GRAPH PATH
edge(​1​,​2​)​.
edge(​1​,​4​)​.
edge(​1​,​3​)​.

Suggested web site- ​http://boklm.eu/prolog/page_0.html


Prolog Program

edge(​2​,​3​)​.

edge(​2​,​5​)​.
edge(​3​,​4​)​.
edge(​3​,​5​)​.
edge(​4​,​5​)​.
connected(X,Y)​:-​edge(X,Y)​;​edge(Y,X)​.
member(X,​[​X​|​R​]​)​.
member(X,​[​Y​|​R​]​)​:-​member(X,R)​.
reverse(​[​X​|​Y​]​,Z,R)​:-​reverse(Y,​[​X​|​Z​]​,R)​.
reverse(​[]​,X,X)​.
path(A,B,Path)​:-​ travel(A,B,​[​A​]​,Q)​,​reverse(Q,​[]​,Path)​.
travel(A,B,P,​[​B​|​P​]​)​:-​connected(A,B)​.
travel(A,B,Visited,Path)​:-​connected(A,C)​,​C​\==​B​,​not(member(C,Visi
ted))​,
travel(C,B,​[​C​|​Visited​]​,Path)​.
?-​path​(1,​5​,P)​,​write(​"P="​)​,​write(P)​,​nl​,​ln​.

Suggested web site- ​http://boklm.eu/prolog/page_0.html

You might also like