1Lecture 12 Introduction to Prolog Logic Programming Prolog.
Introduction to Prolog Brian Paden
description
Transcript of Introduction to Prolog Brian Paden
![Page 1: Introduction to Prolog Brian Paden](https://reader036.fdocuments.us/reader036/viewer/2022062309/5681518b550346895dbfc2c0/html5/thumbnails/1.jpg)
28-4-2008 P-Phunck - Prolog 1
Introduction to PrologBrian Paden
![Page 2: Introduction to Prolog Brian Paden](https://reader036.fdocuments.us/reader036/viewer/2022062309/5681518b550346895dbfc2c0/html5/thumbnails/2.jpg)
28-4-2008 P-Phunck - Prolog 2
History
Creators: Alain Colmerauer & Phillipe Roussel University of Aix-Marseille 1972
Robert Kowalski University of Edinburgh
Named by: Philippe Roussel programmation en logique
First compiler: David H. D. Warren
![Page 3: Introduction to Prolog Brian Paden](https://reader036.fdocuments.us/reader036/viewer/2022062309/5681518b550346895dbfc2c0/html5/thumbnails/3.jpg)
28-4-2008 P-Phunck - Prolog 3
More History
1984 – Began working on standard 1987 – ISO Standard Group Formed 1995 – ISO Standard published
Most current New version expected “by early 2000”
![Page 4: Introduction to Prolog Brian Paden](https://reader036.fdocuments.us/reader036/viewer/2022062309/5681518b550346895dbfc2c0/html5/thumbnails/4.jpg)
28-4-2008 P-Phunck - Prolog 4
Predicate Logic
First order predicate calculus Propositions
Atomic propositions & compound terms Resolution
Inference rule Horn clauses
Single atomic proposition on left side Empty left side
![Page 5: Introduction to Prolog Brian Paden](https://reader036.fdocuments.us/reader036/viewer/2022062309/5681518b550346895dbfc2c0/html5/thumbnails/5.jpg)
28-4-2008 P-Phunck - Prolog 5
Data Types
Atom Letters or numbers 'x', 'longConstant17',
'“Var”' Variable
Start with uppercase 'X', 'NotanAtom' Anonymous variable - '_'
Fact 'doesntKnow( “Prolog”, brian ).'
![Page 6: Introduction to Prolog Brian Paden](https://reader036.fdocuments.us/reader036/viewer/2022062309/5681518b550346895dbfc2c0/html5/thumbnails/6.jpg)
28-4-2008 P-Phunck - Prolog 6
Variables
Two states Instantiated
Variable has a set value Uninstantiated
Has not been assigned a value
Closed-world assumption Only true if it can be proven
![Page 7: Introduction to Prolog Brian Paden](https://reader036.fdocuments.us/reader036/viewer/2022062309/5681518b550346895dbfc2c0/html5/thumbnails/7.jpg)
28-4-2008 P-Phunck - Prolog 7
Data Structures
Compound term Functor and arguments 'weird( prolog, yes ).'
Queries '?- good( presentation, brian )' Only returns 'yes' or 'no'
Conjunction Multiply queries and facts
![Page 8: Introduction to Prolog Brian Paden](https://reader036.fdocuments.us/reader036/viewer/2022062309/5681518b550346895dbfc2c0/html5/thumbnails/8.jpg)
28-4-2008 P-Phunck - Prolog 8
Special Compound Terms List
Head First element in list
Tail List containing everything else in list except the head Last element is empty list - '[]'
'[]', '.' - '[a,[b,[c]]]' == 'a.b.c.[]' String
Special list – all elements are atoms '[“This”,is,a,string,in,”Prolog”]'
![Page 9: Introduction to Prolog Brian Paden](https://reader036.fdocuments.us/reader036/viewer/2022062309/5681518b550346895dbfc2c0/html5/thumbnails/9.jpg)
28-4-2008 P-Phunck - Prolog 9
More Lists
Special list operators '[]' - Empty list '[X|Y]' – X is head, Y is tail '””' - convert list to list containing ascii values
Recursive search for element of listmember(X,[X|_]).
member(X,[_|Y]) :- member(X,Y).
?- member(c,[a,b,c,d,e,f]).yes
![Page 10: Introduction to Prolog Brian Paden](https://reader036.fdocuments.us/reader036/viewer/2022062309/5681518b550346895dbfc2c0/html5/thumbnails/10.jpg)
28-4-2008 P-Phunck - Prolog 10
Built in Operators
Compound construction ',' - conjunction, ';' - disjunction
Comparison 'X = Y' – equality, 'X \= 2' – inequality 'X == Y' – strict equality, 'X \== 2' – strict inequality 'X < Y', 'X =< Y', - less than, less than equal to 'X > Y', 'X >= Y' – greater than, greater than equal to
Arithmetic 'X + Y', 'X - Y', 'X * Y', 'X / Y', 'X mod Y'
![Page 11: Introduction to Prolog Brian Paden](https://reader036.fdocuments.us/reader036/viewer/2022062309/5681518b550346895dbfc2c0/html5/thumbnails/11.jpg)
28-4-2008 P-Phunck - Prolog 11
Arithmetic
Operators that stand out '\' - not, '\=' - not equal '=<' - less equal, '>=' - greater equal
Perform arithmetic 'is'
' Y = Y/X' – tests equality 'Y is Y/X' – assigns numeric value to Y Right hand side of 'is' must be algebraic
![Page 12: Introduction to Prolog Brian Paden](https://reader036.fdocuments.us/reader036/viewer/2022062309/5681518b550346895dbfc2c0/html5/thumbnails/12.jpg)
28-4-2008 P-Phunck - Prolog 12
Looping
No iteration, only recursion
factorial(0,1). factorial(N,F) :-
N>0, N1 is N-1,
factorial(N1,F1), F is N * F1.
?- factorial(3,X).X=6
![Page 13: Introduction to Prolog Brian Paden](https://reader036.fdocuments.us/reader036/viewer/2022062309/5681518b550346895dbfc2c0/html5/thumbnails/13.jpg)
28-4-2008 P-Phunck - Prolog 13
I/O Special file
'user' Output
'tell(X).' - creates/opens file 'telling(X).' - gets open file name 'told' – closes file
Input see, seeing, seen
Misc 'tab(X)', 'nl'
![Page 14: Introduction to Prolog Brian Paden](https://reader036.fdocuments.us/reader036/viewer/2022062309/5681518b550346895dbfc2c0/html5/thumbnails/14.jpg)
28-4-2008 P-Phunck - Prolog 14
Backtracking
User query Searches database for fact declaring it true
Matching fact (head rule) found Mark place in database, move on to next goal
No matching fact found Attempt to re-satisfy goal
Undo last change and try again Cut
Shortcuts backtracking '!' symbol
![Page 15: Introduction to Prolog Brian Paden](https://reader036.fdocuments.us/reader036/viewer/2022062309/5681518b550346895dbfc2c0/html5/thumbnails/15.jpg)
28-4-2008 P-Phunck - Prolog 15
Backtracking in Action
father(mary,george).father(john,george).father(sue,harry).
father(george,edward).father(X) :- father(_,X).
Database
Query
?- father(Y).
Result
Y=george;Y=george;Y=harry;
Y=edward;no
![Page 16: Introduction to Prolog Brian Paden](https://reader036.fdocuments.us/reader036/viewer/2022062309/5681518b550346895dbfc2c0/html5/thumbnails/16.jpg)
28-4-2008 P-Phunck - Prolog 16
Lists and Backtracking
reverse([],[]).reverse([Head|Tail],List) :-
reverse(Tail,Result),append(Result,[Head],List).
trace.?- reverse([a,b,c],Q).
![Page 17: Introduction to Prolog Brian Paden](https://reader036.fdocuments.us/reader036/viewer/2022062309/5681518b550346895dbfc2c0/html5/thumbnails/17.jpg)
28-4-2008 P-Phunck - Prolog 17
Reverse Example(1) 1 Call: reverse([a,b,c],_6)?(2) 2 Call: reverse([b,c],_65636)?(3) 3 Call: reverse([c],_65646)?(4) 4 Call: reverse([],_65656)?(4) 4 Call: Exit: reverse([],[])(5) 4 Call: append([],[c],_65646)?(5) 4 Exit: append([],[c],[c])(3) 3 Exit: reverse([c],[c])
(6) 3 Call: append([c],[b],_65636)?(7) 4 Call: append([],[b],_25)?(7) 4 Exit: append([],[b],[b])
(6) 3 Exit: append([c],[b],[c,b])(2) 2 Exit: reverse([b,c],[c,b)(8) 2 Call: append([c,b],[a],_6)?(9) 3 Call: append([b],[a],_32)?(10) 4 Call: append([],[a],_39)?(10) 4 Exit: append([],[a],[a])(9) 3 Exit: append([b],[a],[b,a])
(8) 2 Exit: append([c,b],[a],[c,b,a])(1) Exit: reverse([a,b,c],[c,b,a])
![Page 18: Introduction to Prolog Brian Paden](https://reader036.fdocuments.us/reader036/viewer/2022062309/5681518b550346895dbfc2c0/html5/thumbnails/18.jpg)
28-4-2008 P-Phunck - Prolog 18
How to Cut
sum_to(1,1) :- !.
sum_to(N,Res) :-N1 is N – 1,
sum_to(N1,Res),Res is Res + N.
Database
Query
?- sum_to(5,X).
Result
X = 15;no
![Page 19: Introduction to Prolog Brian Paden](https://reader036.fdocuments.us/reader036/viewer/2022062309/5681518b550346895dbfc2c0/html5/thumbnails/19.jpg)
28-4-2008 P-Phunck - Prolog 19
Useful Built in Predicates
Conditional 'true', 'fail' – Always their namesakes 'atom(X)', 'integer(X)' – true if X is an atom or int 'atomic(X)' – X is not a variable 'asserta(X)' – adds clause X to start of database 'assertz(X)' – adds clause to end of database 'X =.. L' - Univ
X is variable L is list where head is functor and tail is arguments
![Page 20: Introduction to Prolog Brian Paden](https://reader036.fdocuments.us/reader036/viewer/2022062309/5681518b550346895dbfc2c0/html5/thumbnails/20.jpg)
28-4-2008 P-Phunck - Prolog 20
Example: Binary Tree
lookup(H,w(H,G,_,__,G) :- !.
lookup(H,w(H1,_,Before,_),G) :-
aless(H,H1),lookup(H,Before,G).
lookup(H,w(H1,_,_,After),G) :-
not(aless(H,H1)),lookup(H,After,G).
?- lookup(key,X,582),lookup(val,X,356).
Implementation Usage
![Page 21: Introduction to Prolog Brian Paden](https://reader036.fdocuments.us/reader036/viewer/2022062309/5681518b550346895dbfc2c0/html5/thumbnails/21.jpg)
28-4-2008 P-Phunck - Prolog 21
Example: Quicksortpartition([], _, [], []).
partition([X|Xs], Pivot, Smalls, Bigs) :- ( X @< Pivot ->
Smalls = [X|Rest], partition(Xs, Pivot, Rest, Bigs)
; Bigs = [X|Rest], partition(Xs, Pivot, Smalls, Rest)
).
quicksort([]) --> [].quicksort([X|Xs]) -->
{ partition(Xs, X, Smaller, Bigger) }, quicksort(Smaller), [X],
quicksort(Bigger).
![Page 22: Introduction to Prolog Brian Paden](https://reader036.fdocuments.us/reader036/viewer/2022062309/5681518b550346895dbfc2c0/html5/thumbnails/22.jpg)
28-4-2008 P-Phunck - Prolog 22
Example: Turing Machineturing(Tape0, Tape) :-
perform(q0, [], Ls, Tape0, Rs), reverse(Ls, Ls1),
append(Ls1, Rs, Tape).
perform(qf, Ls, Ls, Rs, Rs) :- !.perform(Q0, Ls0, Ls, Rs0, Rs) :- symbol(Rs0, Sym, RsRest),
once(rule(Q0, Sym, Q1, NewSym, Action)), action(Action, Ls0, Ls1, [NewSym|RsRest], Rs1),
perform(Q1, Ls1, Ls, Rs1, Rs).
symbol([], b, []).symbol([Sym|Rs], Sym, Rs).
action(left, Ls0, Ls, Rs0, Rs) :- left(Ls0, Ls, Rs0, Rs).action(stay, Ls, Ls, Rs, Rs).
action(right, Ls0, [Sym|Ls0], [Sym|Rs], Rs).
left([], [], Rs0, [b|Rs0]).left([L|Ls], Ls, Rs, [L|Rs]).
![Page 23: Introduction to Prolog Brian Paden](https://reader036.fdocuments.us/reader036/viewer/2022062309/5681518b550346895dbfc2c0/html5/thumbnails/23.jpg)
28-4-2008 P-Phunck - Prolog 23
Compilers
ISO Compliant GNU Prolog
http://www.gprolog.org/ SWI-Prolig
http://www.swi-prolog.org/ YAP
http://www.ncc.up.pt/yap/
Visual Prolog (Turbo Prolog) http://www.visual-prolog.com/
![Page 24: Introduction to Prolog Brian Paden](https://reader036.fdocuments.us/reader036/viewer/2022062309/5681518b550346895dbfc2c0/html5/thumbnails/24.jpg)
28-4-2008 P-Phunck - Prolog 24
Sources
Clocksin, W.F and Mellish, C.S. Programming in Prolog. Berlin. Springer-Verlag: 1984
Sebesta, Robert W. Concepts of Programming Languages: Eighth Edition. 2007
http://en.wikipedia.org/wiki/Prolog