Last active
April 1, 2018 10:00
-
-
Save Eyakub/8de6602fa9c2d153581d8634c4859f63 to your computer and use it in GitHub Desktop.
Prolog basic code from AI courses.
This file contains hidden or bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Practice work |
This file contains hidden or bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
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). |
This file contains hidden or bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
fact(0,1). | |
fact(X,Y):- | |
X1 is X-1, | |
fact(X1,Z), | |
Y is X*Z. |
This file contains hidden or bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
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). | |
This file contains hidden or bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
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). |
This file contains hidden or bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
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]). |
This file contains hidden or bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
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) | |
). |
This file contains hidden or bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
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). |
This file contains hidden or bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
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) | |
). |
This file contains hidden or bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
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