Programming Paradigms CSI2120: Jochen Lang EECS, University of Ottawa Canada
Programming Paradigms CSI2120: Jochen Lang EECS, University of Ottawa Canada
Paradigms CSI2120
Jochen Lang
EECS, University of Ottawa
Canada
Logic Programming in Prolog
• Databases
• Managing the Prolog database of rules
– Dynamic rules
– Adding rules
– Removing rules
– Inspecting rules
loan(33333,
callNum(qa76, '73P76C57', 2003),
date(mar, 25, 2019)).
loan(765432,
callNum(q336, 'B74', 2001),
date(apr, 20, 2019)).
?- returns( 33333, X ).
X = callNum(qa76, '73P76C57', 2003).
?- listing(loan).
:- dynamic loan/3.
loan(765432, callNum(q336, 'B74', 2001), date(apr, 20, 2019)).
loan(12345, callNum(qa76, '73P76S74', 1994), date(jun, 15, 2019)).
true.
• Multiplication table
– add a product fact for the multiplication table to 9 if
maketable was used.
maketable :- L=[0,1,2,3,4,5,6,7,8,9],
member(X,L),
member(Y,L),
Z is X*Y,
assertz(product(X,Y,Z)),
fail.
alphabet([a,b,c,d,e,f,g,h,i,j,k,l,m,n,o,p,q,r,s,t,u,v,w,x,y,z]).
?- letter(h,X).
?- clause(a(X,Y),B).
X = 1,
Y = 2,
B = true ;
X = 3,
Y = 4,
B = true ;
B = (b(X), b(Y)).
?- retract((a(A,B):-b(A),b(B))).
true.
?- listing(a).
:- dynamic a/2.
a(1, 2).
a(3, 4).
true.
?- retractall(a(X,Y)).
true.
?- listing(a).
:- dynamic a/2.
true.
find_all(X,Goal,Bag) :- post_it(X,Goal),
gather([],Bag).
post_it(X,Goal) :- call(Goal), % try Goal
asserta(data999(X)), % assert above others
fail. % force backtracking
post_it(_,_). % Done, no more solutions
gather(B,Bag) :-
data999(X), % next recorded solution
retract(data999(X)), % erase posting
gather([X|B],Bag), % continue
!. % cut off tail end
gather(S,S). % Done
• Databases
• Managing the Prolog database of rules
– Dynamic rules
– Adding, removing, inspecting and saving rules
• Detailed examples
– Library
– Adventure
– An implementation of findall