Skip to content

Instantly share code, notes, and snippets.

@Eyakub
Last active April 1, 2018 10:00
Show Gist options
  • Save Eyakub/8de6602fa9c2d153581d8634c4859f63 to your computer and use it in GitHub Desktop.
Save Eyakub/8de6602fa9c2d153581d8634c4859f63 to your computer and use it in GitHub Desktop.
Prolog basic code from AI courses.
ancestor(X,Y):- parent(X,Y).
ancestor(X,Y):-
parent(Z,Y),ancestor(X,Z).
parent(a,d).
parent(a,w).
parent(a,v).
parent(z,d).
parent(z,w).
parent(z,v).
parent(b,e).
parent(b,f).
parent(b,u).
parent(y,e).
parent(y,f).
parent(y,u).
parent(c,g).
parent(c,t).
parent(c,s).
parent(x,g).
parent(x,t).
parent(x,s).
parent(w,z1).
parent(v,a1).
parent(v,b1).
parent(e,a1).
parent(e,b1).
parent(f,y1).
parent(f,x1).
parent(u,c1).
parent(g,c1).
parent(t,y1).
parent(t,x1).
parent(s,z1).
parent(a1,w1).
parent(a1,v1).
parent(z1,w1).
parent(z1,v1).
parent(b1,e1).
parent(b1,f1).
parent(b1,u1).
parent(y1,e1).
parent(y1,f1).
parent(y1,u1).
parent(c1,g1).
parent(c1,t1).
parent(c1,s1).
parent(x1,g1).
parent(x1,t1).
parent(x1,s1).
parent(w1,a2).
parent(v1,z2).
parent(v1,b2).
parent(e1,z2).
parent(e1,b2).
parent(f1,a2).
parent(f1,y2).
parent(f1,x2).
parent(u1,c2).
parent(g1,c2).
parent(t1,y2).
parent(t1,x2).
parent(a2,d2).
parent(a2,w2).
parent(a2,v2).
parent(z2,d2).
parent(z2,w2).
parent(z2,v2).
parent(b2,e2).
parent(b2,f2).
parent(b2,u2).
parent(y2,e2).
parent(y2,f2).
parent(y2,u2).
parent(c2,g2).
parent(c2,t2).
parent(c2,s2).
parent(x2,g2).
parent(x2,t2).
parent(x2,s2).
male(a).
male(b).
male(c).
male(d).
male(w).
male(e).
male(f).
male(g).
male(a1).
male(b1).
male(c1).
male(e1).
male(f1).
male(g1).
male(s1).
male(a2).
male(b2).
male(c2).
male(d2).
male(e2).
male(f2).
male(g2).
female(z).
female(y).
female(x).
female(v).
female(u).
female(t).
female(s).
female(z1).
female(y1).
female(x1).
female(w1).
female(v1).
female(u1).
female(t1).
female(z2).
female(y2).
female(x2).
female(w2).
female(v2).
female(u2).
female(t2).
female(s2).
fact(0,1).
fact(X,Y):-
X1 is X-1,
fact(X1,Z),
Y is X*Z.
2. write prolog codes to find GCD and LCM of two numbers.
ans:
=====GCD========
gcd(X, Y, Z) :-
X < 0, !,
gcd(-X, Y, Z).
gcd(X, Y, Z) :-
Y < 0, !,
gcd(X, -Y, Z).
gcd(X, 0, X) :- X > 0.
gcd(0, Y, Y) :- Y > 0.
gcd(X, Y, Z) :-
X > Y, Y > 0,
X1 is X - Y,
gcd(Y, X1, Z).
gcd(X, Y, Z) :-
X =< Y, X > 0,
Y1 is Y - X,
gcd(X, Y1, Z).
#another process
gcd( X, X, X).
gcd( X, Y, D) :-
X<Y,
Yl is Y-X,
gcd( X, Yl, D).
gcd( X, Y, D) :-
Y<X,
gcd( Y, X, D).
#compile
>>gcd(25, 10, X).
#query ?- gcd(10, 5, X).
=====LCM========
/*extend GCD*/
lcm(X,Y,LCM):-gcd(X,Y,GCD), LCM is X*Y//GCD.
#query ?- lcm(10, 5, X).
5.write codes to find the K'th element of a list.
#query ?- nth1(3,[5,4,3,2,1],Element).
6.Find the number of elements of a list.
#query ?- length([1,2,3,4], X). or proper_length([1,2,3,4], X).
7.write a prolog codes to reverse a list.
#query ?- reverse([a,b,c],X).
8.Find out whether a list is a palindrome.
ans:
palindrome(L):-
reverse(L, L).
#query ?- palindrome([1,2,3,2,1]).
9.Duplicate the elements of a list.
ans:
dups([],[]).
dups([H|T],[H,H|Y]) :- dups(T,Y).
#query ?- dups([1,2,3],X).
10.Remove the K'th element from a list.
ans:
del_N_elm(1,[_|T],T).
del_N_elm(P,[X|Y],[X|R]):-
P1 is P-1,
del_N_elm(P1,Y,R).
#query ?- del_N_elm(2,[1,2,2,2,3,4],X).
grandson(X,Y) :-
parent(Y,Someone), parent(Someone,X), male(X).
granddaughter(X,Y) :-
parent(Y,Someone), parent(Someone,X), female(X).
spouse(X,Y) :-
parent(Y,Son), parent(X,Son), X\=Y.
sibling(X,Y) :-
male(Father), parent(Father,X), parent(Father,Y), X\=Y.
cousin(X,Y) :-
male(Someone), parent(Someone,Par), parent(Someone,Unc), Par\=Unc,
parent(Par,X), parent(Unc,Y).
brother_in_law(X,Y) :-
male(X), parent(X,A), parent(Y,B), X\=Y,
parent(A,C), parent(B,C), A\=B.
sister_in_law(X,Y) :-
spouse(X,B), sibling(B,Y), female(Y).
parent(a,d).
parent(a,w).
parent(a,v).
parent(z,d).
parent(z,w).
parent(z,v).
parent(d,h).
parent(d,r).
parent(w,j).
parent(v,i).
parent(b,e).
parent(b,f).
parent(b,u).
parent(y,e).
parent(y,f).
parent(y,u).
parent(e,i).
parent(f,q).
parent(f,p).
parent(u,h).
parent(u,r).
parent(c,g).
parent(c,t).
parent(c,s).
parent(x,g).
parent(x,t).
parent(x,s).
parent(g,j).
parent(t,q).
parent(t,p).
male(a).
male(b).
male(c).
male(d).
male(e).
male(f).
male(g).
male(h).
male(i).
male(j).
female(p).
female(q).
female(r).
female(s).
female(t).
female(u).
female(v).
female(w).
female(x).
female(y).
female(z).
divisible(X,Y):-
N is Y*Y,
N =< X,
X mod Y =:= 0.
divisible(X,Y):-
Y < X,
Y1 is Y+1,
divisible(X,Y1).
isprime(X):-
Y is 2, X > 1, \+divisible(X,Y),
format('~w is prime',[X]).
isprime(X):-
Y is 2, X > 1, divisible(X,Y),
format('~w is not prime',[X]).
print_from_1_to_10(1).
print_from_X_to_10(X) :-
(
X > 10 -> fail;
writeln(X),
NewX is X + 1,
print_from_X_to_10(NewX)
).
print_from_0_to_10(0,0).
print_from_N_to_10(N,Sum):-
(
N>10 ->
writeln(Sum);
M is 2^N,
NewN is N+1,
writeln(N^2 = M),
NewS is Sum+M,
print_from_N_to_10(NewN,NewS)
).
//print_from_N_to_10(1, 10).
print_from_1_to_10(1).
print_from_X_to_10(X) :-
(
X > 10 -> fail;
Hi is X*X,
writeln(Hi),
NewX is X + 1,
print_from_X_to_10(NewX)
).
recursion(0,S):-
Z is 2**0,
Sum is S + Z,
format('2^0 = ~w',[Sum]).
recursion(X,S):-
Z is 2**X,
format('2^~w+',[X]),
Sum is S + Z,
Y is X - 1,
recursion(Y,Sum).
recursion(X):-
Sum is 0,
Y is X,
recursion(Y,Sum).
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment