% ========================================================================== % $Id: books.pl,v 1.1 2014/02/04 03:57:03 jlang Exp $ % CSI2120 example Code for lecture 8 % ========================================================================== % (C)opyright: % % Jochen Lang % EECS, University of Ottawa % 800 King Edward Ave. % Ottawa, On., K1N 6N5 % Canada. % http://www.eecs.uottawa.ca/~jlang % % Creator: jlang (Jochen Lang) % Email: jlang@eecs.uottawa.ca % ========================================================================== % $Log: books.pl,v $ % Revision 1.1 2014/02/04 03:57:03 jlang % Added initial example for database manipulations. % % ========================================================================== :- dynamic book/4, reader/4, loan/3. book(callNum(qa76, '73P76C57', 2003), location( mrt, general ), ['Programming' , in, 'Prolog' ], [name( clocksin, [william, f] ), name( mellish, [christopher, s] )]). book(callNum(qa76, '73P76S74', 1994), location( mrt, general ), [ 'The', art, of, 'Prolog', ':', advanced, programming, techniques], [name( sterling, [leon] ), name( shapiro, [ehud, y])]). book(callNum(q336, 'B74', 2001), location( mrt, general ), [ 'Prolog', programming, for, artificial, intelligence ], [name( bratko, [ivan])] ). reader(name(blake, [ann]), 33333, address([100, main], ottawa, k1a2b2),1). reader(name(brady,[jim,b]), 12345, address([2, second], ottawa, k1n3m3),0). reader(name(carp,[tony,a]), 765432, address([3, third], ottawa, k1k4p4),1). loan(33333, callNum(qa76, '73P76C57', 2003), date(nov, 25, 2013)). loan(765432, callNum(q336, 'B74', 2001), date(oct, 20, 2013)). wrote(Auth, CallN, Title) :- book(CallN, _, Title, Authors), member(name(Auth,_), Authors). borrowed(Name, Title) :- reader(Name, Id, _Addr, _), loan(Id, CallN, _DateDue), book(CallN, _, Title, _Auths). newLoan(Cn, Id, Due) :- assert(loan(Id, Cn, Due)), retract(reader(Nm, Id, A, N)), N1 is N + 1, assert(reader(Nm, Id, A, N1)). returns(Id, Cn) :- retract(loan(Id, Cn, _Due)), retract(reader(Nm, Id, A, N)), N1 is N - 1, % loan was retracted, i.e., N1 >= 0 assert(reader(Nm, Id, A, N1)). % ?- book(callNum(X, Y, 1994), Location, Title, Authors), \+ loan(_,callNum(X, Y, 1994), _). % borrowed(name(brady,_),Title). % ?- newLoan(callNum(qa76, '73P76S74', 1994), 12345, date(nov, 15, 2013)). % ?- listing(loan), listing( reader ) % ?- returns( 33333, X ). % ?- listing(loan), listing( reader )