Download presentation
Presentation is loading. Please wait.
Published byLoraine Ryan Modified over 9 years ago
1
CS 152: Programming Language Paradigms March 5 Class Meeting Department of Computer Science San Jose State University Spring 2014 Instructor: Ron Mak www.cs.sjsu.edu/~mak
2
SJSU Dept. of Computer Science Spring 2014: March 5 CS 152: Programming Language Paradigms © R. Mak 2 Backtracking and the Cut in Prolog Cut is a mechanism you can use in Prolog programs. Tell Prolog not to reconsider certain previous choices it made. Your program will run faster. It won’t waste time attempting to satisfy goals that you know beforehand will never contribute to a solution. Your program will use less memory. Fewer intermediate results. Cut can be the difference between a program that runs and one that does not. _
3
SJSU Dept. of Computer Science Spring 2014: March 5 CS 152: Programming Language Paradigms © R. Mak 3 Cut Example: Library Application What library services can a client use? First version: service(Person, Service) :- book_overdue(Person, Book), basic_service(Service). service(Person, Service) :- general_service(Service). basic_service(reference). basic_service(inquiries). special_service(borrowing). special_service(interlibrary_loan). general_service(X) :- basic_service(X). general_service(X) :- special_service(X). book_overdue(jones, war_and_peace). book_overdue(jones, oliver_twist). ?- service(smith, S). ?- service(jones, S). library1.pl
4
SJSU Dept. of Computer Science Spring 2014: March 5 CS 152: Programming Language Paradigms © R. Mak 4 Cut Example: Library Application, cont’d Second version: service(Person, Service) :- book_overdue(Person, Book), !, basic_service(Service). service(Person, Service) :- general_service(Service). basic_service(reference). basic_service(inquiries). special_service(borrowing). special_service(interlibrary_loan). general_service(X) :- basic_service(X). general_service(X) :- special_service(X). book_overdue(jones, war_and_peace). book_overdue(jones, oliver_twist). cut ?- service(smith, S). ?- service(jones, S). library2.pl
5
SJSU Dept. of Computer Science Spring 2014: March 5 CS 152: Programming Language Paradigms © R. Mak 5 Cut Example: Library Application, cont’d Match the first service rule. Subgoal: Any overdue books? Match book_overdue(jones, war_and_peace). The next goal is the cut “ ! ”. Cut always succeeds. Cut commits Prolog to all its decisions since it matched the service rule. service(Person, Service) :- book_overdue(Person, Book), !, basic_service(Service). service(Person, Service) :- general_service(Service). basic_service(reference). basic_service(inquiries). special_service(borrowing). special_service(interlibrary_loan). general_service(X) :- basic_service(X). general_service(X) :- special_service(X). book_overdue(jones, war_and_peace). book_overdue(jones, oliver_twist). ?- service(jones, S).
6
SJSU Dept. of Computer Science Spring 2014: March 5 CS 152: Programming Language Paradigms © R. Mak 6 Cut Example: Library Application, cont’d The cut prevents any backtracking from going past (before) it. Therefore, after satisfying the subgoal basic_service (Service) the query is done. Don’t look for more overdue books. The choice of the rule that the cut appears in is also blocked from backtracking. Therefore, don’t consider any other service rules. service(Person, Service) :- book_overdue(Person, Book), !, basic_service(Service). service(Person, Service) :- general_service(Service). basic_service(reference). basic_service(inquiries). special_service(borrowing). special_service(interlibrary_loan). general_service(X) :- basic_service(X). general_service(X) :- special_service(X). book_overdue(jones, war_and_peace). book_overdue(jones, oliver_twist). ?- service(jones, S).
7
SJSU Dept. of Computer Science Spring 2014: March 5 CS 152: Programming Language Paradigms © R. Mak 7 Cut-Failure Example: Tax Calculator A foreigner is not an average tax payer. If your spouse makes over $100,000, then you’re not an average taxpayer. If you get less than $10,000 from a pension, then you’re considered not to have any gross income. average_taxpayer(X) :- foreigner(X), !, fail. average_taxpayer(X) :- spouse(X, Y), gross_income(Y, Inc), Inc > 100000, !, fail. average_taxpayer(X) :- gross_income(Y, Inc), Inc > 20000, Inc < 80000. gross_income(X, Y) :- receives_pension(X, P), P < 10000, !, fail. gross_income(X, Y) :- gross_salary(X, Z), investment_income(X, W), Y is Z+W. gross_salary :-...
8
SJSU Dept. of Computer Science Spring 2014: March 5 CS 152: Programming Language Paradigms © R. Mak 8 Prolog Lists A list in Prolog is similar to a list in Lisp or Scheme, but with a different syntax. Use square brackets and commas: [a, b, c, d, e] Use the notation [H|T ] (where H and T are any variables) to specify the head and tail of a list. ?- [H|T] = [a, b, c, d, e]. H = a, T = [b, c, d, e]. ?- [W, X, Y|Z] = [a, b, c, d, e]. W = a, X = b, Y = c, Z = [d, e].
9
SJSU Dept. of Computer Science Spring 2014: March 5 CS 152: Programming Language Paradigms © R. Mak 9 Prolog Lists: cons What does this predicate do? cons(H, T, L) :- L = [H|T]. ?- cons(x, [1, 2, 3], L). L = [x, 1, 2, 3].
10
SJSU Dept. of Computer Science Spring 2014: March 5 CS 152: Programming Language Paradigms © R. Mak 10 Prolog Lists: append Rewrite the Scheme append procedure in Prolog: Appending the empty list to any list L2 returns the list L2. Appending a list whose head is H and tail is T to a list L2 returns a list whose head is also H and whose tail T2 is T appended to L2. (define append (lambda (lst1 lst2) (if (null? lst1) lst2 (cons (car lst1) (append (cdr lst1) lst2)) ))) append([], L2, L2). append([H|T], L2, [H|T2]) :- append(T, L2, T2). ?- append([a, b, c], [1, 2, 3], L). L = [a, b, c, 1, 2, 3].
11
SJSU Dept. of Computer Science Spring 2014: March 5 CS 152: Programming Language Paradigms © R. Mak 11 Prolog Lists: append, cont’d Run append backwards to find all the ways that two lists can be appended to get a specified list. ?- append(L1, L2, [a, b, c]). L1 = [], L2 = [a, b, c] ; L1 = [a], L2 = [b, c] ; L1 = [a, b], L2 = [c] ; L1 = [a, b, c], L2 = [] ; false.
12
SJSU Dept. of Computer Science Spring 2014: March 5 CS 152: Programming Language Paradigms © R. Mak 12 Prolog Lists: reverse Rewrite the Scheme reverse procedure in Prolog: Reversing the empty list returns the empty list. Reversing a list whose head is H and whose tail is T returns a list L which is the reverse of T (variable RT ) appended to H. (define reverse (lambda (lst) (if (null? lst) '() (append (reverse (cdr lst)) (list (car lst))) ))) reverse([], []). reverse([H|T], L) :- reverse(T, RT), append(RT, [H], L). ?- reverse([1, 2, 3, 4, 5], L). L = [5, 4, 3, 2, 1].
13
SJSU Dept. of Computer Science Spring 2014: March 5 CS 152: Programming Language Paradigms © R. Mak 13 Prolog’s Search Strategy Prolog does a depth-first search of the solution tree. Consider the database: Who is Bob’s ancestor? ancestor(X, Y) :- parent(X, Z), ancestor(Z, Y). ancestor(X, X). parent(amy, bob). 1 2 3 ?- ancestor(X, bob).
14
SJSU Dept. of Computer Science Spring 2014: March 5 CS 152: Programming Language Paradigms © R. Mak 14 Prolog’s Search Strategy, cont’d Can we understand this trace? ancestor(X, Y) :- parent(X, Z), ancestor(Z, Y). ancestor(X, X). parent(amy, bob). 1 2 3 ?- ancestor(X, bob). 1 ?- trace. true. [trace] 1 ?- ancestor(X, bob). Call: (6) ancestor(_G2037, bob) ? creep Call: (7) parent(_G2037, _G2111) ? creep Exit: (7) parent(amy, bob) ? creep Call: (7) ancestor(bob, bob) ? creep Call: (8) parent(bob, _G2111) ? creep Fail: (8) parent(bob, _G2111) ? creep Redo: (7) ancestor(bob, bob) ? creep Exit: (7) ancestor(bob, bob) ? creep Exit: (6) ancestor(amy, bob) ? creep X = amy ; Redo: (6) ancestor(_G2037, bob) ? creep Exit: (6) ancestor(bob, bob) ? creep X = bob.
15
SJSU Dept. of Computer Science Spring 2014: March 5 CS 152: Programming Language Paradigms © R. Mak 15 Prolog’s Search Strategy, cont’d ancestor(X, Y) :- parent(X, Z), ancestor(Z, Y). ancestor(X, X). parent(amy, bob). 1 2 3 ?- ancestor(X, bob). ancestor(X, bob) Y = bob 1 [trace] 1 ?- ancestor(X, bob). Call: (6) ancestor(_G2037, bob) ? creep Call: (7) parent(_G2037, _G2111) ? creep Exit: (7) parent(amy, bob) ? creep parent(amy, bob) X = amy Z = bob 3 Success
16
SJSU Dept. of Computer Science Spring 2014: March 5 CS 152: Programming Language Paradigms © R. Mak 16 Prolog’s Search Strategy, cont’d ancestor(X, Y) :- parent(X, Z), ancestor(Z, Y). ancestor(X, X). parent(amy, bob). 1 2 3 ?- ancestor(X, bob). ancestor(X, bob) Y = bob 1 parent(amy, bob) X = amy Z = bob [trace] 1 ?- ancestor(X, bob). Call: (6) ancestor(_G2037, bob) ? creep Call: (7) parent(_G2037, _G2111) ? creep Exit: (7) parent(amy, bob) ? creep Call: (7) ancestor(bob, bob) ? creep 3 ancestor(bob, bob) Success ancestor(bob, bob) X = bob Y = bob 1
17
SJSU Dept. of Computer Science Spring 2014: March 5 CS 152: Programming Language Paradigms © R. Mak 17 Prolog’s Search Strategy, cont’d ancestor(X, Y) :- parent(X, Z), ancestor(Z, Y). ancestor(X, X). parent(amy, bob). 1 2 3 ?- ancestor(X, bob). ancestor(X, bob) Y = bob 1 parent(amy, bob) X = amy Z = bob [trace] 1 ?- ancestor(X, bob). Call: (6) ancestor(_G2037, bob) ? creep Call: (7) parent(_G2037, _G2111) ? creep Exit: (7) parent(amy, bob) ? creep Call: (7) ancestor(bob, bob) ? creep Call: (8) parent(bob, _G2111) ? creep Fail: (8) parent(bob, _G2111) ? creep Redo: (7) ancestor(bob, bob) ? creep 3 ancestor(bob, bob) X = bob Y = bob 1 parent(bob, Z) 3 Failure Success REDO
18
SJSU Dept. of Computer Science Spring 2014: March 5 CS 152: Programming Language Paradigms © R. Mak 18 Prolog’s Search Strategy, cont’d ancestor(X, Y) :- parent(X, Z), ancestor(Z, Y). ancestor(X, X). parent(amy, bob). 1 3 ?- ancestor(X, bob). ancestor(X, bob) Y = bob 1 parent(amy, bob) X = amy Z = bob 3 ancestor(bob, bob) [trace] 1 ?- ancestor(X, bob). Call: (6) ancestor(_G2037, bob) ? creep Call: (7) parent(_G2037, _G2111) ? creep Exit: (7) parent(amy, bob) ? creep Call: (7) ancestor(bob, bob) ? creep Call: (8) parent(bob, _G2111) ? creep Fail: (8) parent(bob, _G2111) ? creep Redo: (7) ancestor(bob, bob) ? creep Exit: (7) ancestor(bob, bob) ? creep Exit: (6) ancestor(amy, bob) ? creep X = amy ; 2 ancestor(bob, bob) X = bob Success X = amy 2 REDO
19
SJSU Dept. of Computer Science Spring 2014: March 5 CS 152: Programming Language Paradigms © R. Mak 19 Prolog’s Search Strategy, cont’d ancestor(X, Y) :- parent(X, Z), ancestor(Z, Y). ancestor(X, X). parent(amy, bob). 1 3 ?- ancestor(X, bob). [trace] 1 ?- ancestor(X, bob). Call: (6) ancestor(_G2037, bob) ? creep Call: (7) parent(_G2037, _G2111) ? creep Exit: (7) parent(amy, bob) ? creep Call: (7) ancestor(bob, bob) ? creep Call: (8) parent(bob, _G2111) ? creep Fail: (8) parent(bob, _G2111) ? creep Redo: (7) ancestor(bob, bob) ? creep Exit: (7) ancestor(bob, bob) ? creep Exit: (6) ancestor(amy, bob) ? creep X = amy ; Redo: (6) ancestor(_G2037, bob) ? creep Exit: (6) ancestor(bob, bob) ? creep X = bob. 2 ancestor(bob, bob) X = bob 2 Success X = bob REDO
20
SJSU Dept. of Computer Science Spring 2014: March 5 CS 152: Programming Language Paradigms © R. Mak 20 Assignment #4: Prolog Murder Mystery Use Prolog to create and solve a murder mystery. Construct a Prolog database that presents a good murder mystery that can be solved deductively. Your database must have at least 20 facts and 20 rules. You must make at least 15 queries. At least half of your rules and half of your queries must have subgoals separated by commas. Example facts: Example rule: person(jenkins, butler). killed(alice, blunt_object). owns(john, baseball_bat). having_affair(Person1, Person2) :- married(Person1, Person3), seen_together(Person1, Person2), Person2 \= Person3.
21
SJSU Dept. of Computer Science Spring 2014: March 5 CS 152: Programming Language Paradigms © R. Mak 21 Assignment #4, cont’d Example query: If you were Sherlock Holmes at the scene of the crime, what questions would you ask? Email a zip file to ron.mak@sjsu.edu that contains:ron.mak@sjsu.edu A text file of your database of facts and rules that can be loaded into Prolog, for example: SuperCoders.pl A cut-and-paste text file or screen shots that show your queries and the responses. Name the file after your team: SuperCoders.zip Subject line: CS 152 Assignment #4, team name Don’t forget to CC all your team members. Due: Friday, March 14. ?- having_affair(bill, X), killed(X, blunt_object), owns(Y, hockey_stick).
22
SJSU Dept. of Computer Science Spring 2014: March 5 CS 152: Programming Language Paradigms © R. Mak 22 Uses of Prolog Expert systems Natural language processing NASA’s Clarissa voice interface for the space station Modelling weather prediction air pollution control See: http://www.drdobbs.com/parallel/the-practical- application-of-prolog/184405220http://www.drdobbs.com/parallel/the-practical- application-of-prolog/184405220
Similar presentations
© 2025 SlidePlayer.com. Inc.
All rights reserved.