% ========================================================================== % $Id: letter.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) based on notes by R. Laganiere % Email: jlang@eecs.uottawa.ca % ========================================================================== % $Log: letter.pl,v $ % Revision 1.1 2014/02/04 03:57:03 jlang % Added initial example for database manipulations. % % ========================================================================== :- dynamic letter/2. 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]). % add a rule for each letter queried letter(A, B):- alphabet(C), letter(A, C, B), asserta(letter(A,B)). % Add a new fact letter(A, [A|_], 1). % boundary case, letter matches letter(A, [B|C], D):- \+(A=B), % letter does not match, keep searching letter(A, C, E), D is E+1. % Count on the way out of the recursion % ?- letter(h,X).