210 likes | 317 Views
Martin Kay Stanford University. Introduction to. Prolog. Topics. Books Starting and stopping Prolog Consulting and reconsulting files Assertions and queries Constants and variables Nondeterminism Lists Facts and rules. Books.
E N D
Martin Kay Stanford University Introduction to Prolog
Topics Books Starting and stopping Prolog Consulting and reconsulting files Assertions and queries Constants and variables Nondeterminism Lists Facts and rules
Books • Bratko, I. (1986) Prolog Programming for Artificial Intelligence. International Computer Science Series, Addison Wesley. • Clocksin, W. F. and C. S. Mellish (1981) Programming in Prolog. Springer-Verlag, Berlin. • König, E. and R. Seiffert (1989) Grudkurs Prolog für Linguisten. UTB für Wissenschaft; Uni-Taschenbücher, A. Franke Verlag, Tübingen. • O'Keefe, R. (1990) The Craft of Prolog. MIT Press, Cambridge, Massachusetts. • Ross, P. (1989) Advanced Prolog. Addison Weseley. • Sterling, L. and E. Shapiro (1986) The Art of Prolog. MIT Press, Cambridge, Massachusetts.
Sicstus Prolog Swedish Institute of Computer Science (SICS) Setting the path environment variable (on Leland) elaine27:~> more .cshrc # @(#) Leland Systems .cshrc version 3.0.4 # elaine27:~> more .cshrc # @(#) Leland Systems .cshrc version 3.0.4 # .... set path=( /afs/ir/class/ling138/bin $path) ....
The Herald The Period! Sicstus Prolog Swedish Institute of Computer Science (SICS) 1 ~ sicstus SICStus 2.1 #9: Fri Oct 21 16:31:41 PDT 1994 | ?- halt. 2 ~
b a q p d r c
b a q p d c r
b a q p d c r
b a q p d c r
b a q p d c r Queries
b a q p d c r Queries Now we can make this a real link!
b a q p d c r
Consulting files | ?- consult(maize). {consulting /tmp_mnt/tilde/kay/pl/parsers/maize.pl...} {/tmp_mnt/tilde/kay/pl/parsers/maize.pl consulted, 160 msec 1056 bytes} yes | ?- consult(‘maize.pl’). [maize]. [‘maize.pl’].
Facts and Rules past(dive, dived). past_tense(dive, dove). pres_part(dive, diving). sing3(dive, dives). past_tense(write, wrote). past_part(write, written). pres_part(write, writing). sing3(write, writes). • • • • past_part(Verb, Word) :- past(Verb, Word). past_tense(Verb, Word) :- past(Verb, Word). Head Goal
The =/2 operator | ?- X=foo. X = foo ? yes | ?- X=Y. Y = X ? yes | ?- foo(A, b)=foo(a, B). A = a, B = b ? yes
Unification | ?- p(a, Q, b) = p(A, A, A). no | ?- p(a, Q, R) = p(A, A, A). A = a, Q = a, R = a yes | ?- p(q(a, a), r(X, X), s(Y, Y))=p(X, Y, Z). X = q(a,a), Y = r(q(a,a),q(a,a)), Z = s(r(q(a,a),q(a,a)),r(q(a,a),q(a,a))) ? yes
Ordered Pairs | ?- X=[a | [b | [c | []]]]. X=[a, b, c] yes | ?- X=[a | b]. X=[a | b] yes
member/2 | ?- member(b, [a,b,c]). yes | ?- member(X, [a, b, c]). X = a ? ; X = b ? ; X = c ? ; no | ?- member(a, [X, b, Y]). X = a ? ; Y = a ? ; no member(H, [H|_]). member(X, [_|T]) :- member(X, T).
append/3 | ?- append([a, b, c], [p, q, r], X). X = [a,b,c,p,q,r] ? yes | ?- append([a, b, c], X, [a, b, c, d, e, f]). X = [d,e,f] ? yes | ?- append(X, [d, e, f],[a, b, c, d, e, f]). X = [a,b,c] ? yes append([], A, A). append([C|D], A, [C|B]) :- append(D, A, B).
(Naive) reverse/2 | ?- reverse([a, b, c], X). X = [c,b,a] ? yes | ?- reverse(X, [a, b, c]). X = [c,b,a] ? yes | ?- X=[a, b, B, A], reverse(X, X). A = a, B = b, X = [a,b,b,a] ? yes reverse([], []). reverse([H|T], Rev) :- reverse(T, RT), append(RT, [H], Rev).
Interrupting Prolog foo(a, b). ^C Prolog interruption (h for help)? a {Execution aborted} | ?-