© patrick blackburn, johan bos & kristina striegnitz lecture 3: recursion theory –introduce...
TRANSCRIPT
![Page 1: © Patrick Blackburn, Johan Bos & Kristina Striegnitz Lecture 3: Recursion Theory –Introduce recursive definitions in Prolog –Four examples –Show that there](https://reader030.vdocument.in/reader030/viewer/2022032703/56649d025503460f949d5a0a/html5/thumbnails/1.jpg)
© P
atr
ick B
lackb
urn
, Jo
han
Bos &
Kri
sti
na S
trie
gn
itz
Lecture 3: Recursion
• Theory– Introduce recursive definitions in Prolog– Four examples– Show that there can be mismatches between the
declarative and procedural meaning of a Prolog program
• Exercises– Corrections exercises LPN chapter 2– Exercises of LPN chapter 3
![Page 2: © Patrick Blackburn, Johan Bos & Kristina Striegnitz Lecture 3: Recursion Theory –Introduce recursive definitions in Prolog –Four examples –Show that there](https://reader030.vdocument.in/reader030/viewer/2022032703/56649d025503460f949d5a0a/html5/thumbnails/2.jpg)
© P
atr
ick B
lackb
urn
, Jo
han
Bos &
Kri
sti
na S
trie
gn
itz
Recursive Definitions
• Prolog predicates can be defined recursively
• A predicate is recursively defined if one or more rules in its definition refers to itself
![Page 3: © Patrick Blackburn, Johan Bos & Kristina Striegnitz Lecture 3: Recursion Theory –Introduce recursive definitions in Prolog –Four examples –Show that there](https://reader030.vdocument.in/reader030/viewer/2022032703/56649d025503460f949d5a0a/html5/thumbnails/3.jpg)
© P
atr
ick B
lackb
urn
, Jo
han
Bos &
Kri
sti
na S
trie
gn
itz
Example 1: Eating
isDigesting(X,Y):- justAte(X,Y).
isDigesting(X,Y):- justAte(X,Z), isDigesting(Z,Y).
justAte(mosquito,blood(john)).
justAte(frog,mosquito).
justAte(stork,frog).
?-
![Page 4: © Patrick Blackburn, Johan Bos & Kristina Striegnitz Lecture 3: Recursion Theory –Introduce recursive definitions in Prolog –Four examples –Show that there](https://reader030.vdocument.in/reader030/viewer/2022032703/56649d025503460f949d5a0a/html5/thumbnails/4.jpg)
© P
atr
ick B
lackb
urn
, Jo
han
Bos &
Kri
sti
na S
trie
gn
itz
Picture of the situation
X Y
justAte
isDigesting
![Page 5: © Patrick Blackburn, Johan Bos & Kristina Striegnitz Lecture 3: Recursion Theory –Introduce recursive definitions in Prolog –Four examples –Show that there](https://reader030.vdocument.in/reader030/viewer/2022032703/56649d025503460f949d5a0a/html5/thumbnails/5.jpg)
© P
atr
ick B
lackb
urn
, Jo
han
Bos &
Kri
sti
na S
trie
gn
itz
Picture of the situation
X Y
justAte
isDigesting
X Z
justAte
isDigesting
Y
isDigesting
![Page 6: © Patrick Blackburn, Johan Bos & Kristina Striegnitz Lecture 3: Recursion Theory –Introduce recursive definitions in Prolog –Four examples –Show that there](https://reader030.vdocument.in/reader030/viewer/2022032703/56649d025503460f949d5a0a/html5/thumbnails/6.jpg)
© P
atr
ick B
lackb
urn
, Jo
han
Bos &
Kri
sti
na S
trie
gn
itz
Example 1: Eating
isDigesting(X,Y):- justAte(X,Y).
isDigesting(X,Y):- justAte(X,Z), isDigesting(Z,Y).
justAte(mosquito,blood(john)).
justAte(frog,mosquito).
justAte(stork,frog).
?- isDigesting(stork,mosquito).
![Page 7: © Patrick Blackburn, Johan Bos & Kristina Striegnitz Lecture 3: Recursion Theory –Introduce recursive definitions in Prolog –Four examples –Show that there](https://reader030.vdocument.in/reader030/viewer/2022032703/56649d025503460f949d5a0a/html5/thumbnails/7.jpg)
© P
atr
ick B
lackb
urn
, Jo
han
Bos &
Kri
sti
na S
trie
gn
itz
Another recursive definition
p:- p.
?-
![Page 8: © Patrick Blackburn, Johan Bos & Kristina Striegnitz Lecture 3: Recursion Theory –Introduce recursive definitions in Prolog –Four examples –Show that there](https://reader030.vdocument.in/reader030/viewer/2022032703/56649d025503460f949d5a0a/html5/thumbnails/8.jpg)
© P
atr
ick B
lackb
urn
, Jo
han
Bos &
Kri
sti
na S
trie
gn
itz
Another recursive definition
p:- p.
?- p.
![Page 9: © Patrick Blackburn, Johan Bos & Kristina Striegnitz Lecture 3: Recursion Theory –Introduce recursive definitions in Prolog –Four examples –Show that there](https://reader030.vdocument.in/reader030/viewer/2022032703/56649d025503460f949d5a0a/html5/thumbnails/9.jpg)
© P
atr
ick B
lackb
urn
, Jo
han
Bos &
Kri
sti
na S
trie
gn
itz
Another recursive definition
p:- p.
?- p.
ERROR: out of memory
![Page 10: © Patrick Blackburn, Johan Bos & Kristina Striegnitz Lecture 3: Recursion Theory –Introduce recursive definitions in Prolog –Four examples –Show that there](https://reader030.vdocument.in/reader030/viewer/2022032703/56649d025503460f949d5a0a/html5/thumbnails/10.jpg)
© P
atr
ick B
lackb
urn
, Jo
han
Bos &
Kri
sti
na S
trie
gn
itz
Example 2: Decendant
child(bridget,caroline).
child(caroline,donna).
descend(X,Y):- child(X,Y).
descend(X,Y):- child(X,Z), child(Z,Y).
![Page 11: © Patrick Blackburn, Johan Bos & Kristina Striegnitz Lecture 3: Recursion Theory –Introduce recursive definitions in Prolog –Four examples –Show that there](https://reader030.vdocument.in/reader030/viewer/2022032703/56649d025503460f949d5a0a/html5/thumbnails/11.jpg)
© P
atr
ick B
lackb
urn
, Jo
han
Bos &
Kri
sti
na S
trie
gn
itz
Example 2: Decendant
child(anna,bridget).
child(bridget,caroline).
child(caroline,donna).
child(donna,emily).
descend(X,Y):- child(X,Y).
descend(X,Y):- child(X,Z), child(Z,Y).
![Page 12: © Patrick Blackburn, Johan Bos & Kristina Striegnitz Lecture 3: Recursion Theory –Introduce recursive definitions in Prolog –Four examples –Show that there](https://reader030.vdocument.in/reader030/viewer/2022032703/56649d025503460f949d5a0a/html5/thumbnails/12.jpg)
© P
atr
ick B
lackb
urn
, Jo
han
Bos &
Kri
sti
na S
trie
gn
itz
Example 2: Decendant
child(anna,bridget).
child(bridget,caroline).
child(caroline,donna).
child(donna,emily).
descend(X,Y):- child(X,Y).
descend(X,Y):- child(X,Z), child(Z,Y).
?- descend(anna,donna).
no
?-
![Page 13: © Patrick Blackburn, Johan Bos & Kristina Striegnitz Lecture 3: Recursion Theory –Introduce recursive definitions in Prolog –Four examples –Show that there](https://reader030.vdocument.in/reader030/viewer/2022032703/56649d025503460f949d5a0a/html5/thumbnails/13.jpg)
© P
atr
ick B
lackb
urn
, Jo
han
Bos &
Kri
sti
na S
trie
gn
itz
Example 2: Decendant
child(anna,bridget).child(bridget,caroline).child(caroline,donna).child(donna,emily).
descend(X,Y):- child(X,Y).descend(X,Y):- child(X,Z), child(Z,Y).descend(X,Y):- child(X,Z), child(Z,U), child(U,Y).
?-
![Page 14: © Patrick Blackburn, Johan Bos & Kristina Striegnitz Lecture 3: Recursion Theory –Introduce recursive definitions in Prolog –Four examples –Show that there](https://reader030.vdocument.in/reader030/viewer/2022032703/56649d025503460f949d5a0a/html5/thumbnails/14.jpg)
© P
atr
ick B
lackb
urn
, Jo
han
Bos &
Kri
sti
na S
trie
gn
itz
Example 2: Decendant
child(anna,bridget).
child(bridget,caroline).
child(caroline,donna).
child(donna,emily).
descend(X,Y):- child(X,Y).
descend(X,Y):- child(X,Z), descend(Z,Y).
?-
![Page 15: © Patrick Blackburn, Johan Bos & Kristina Striegnitz Lecture 3: Recursion Theory –Introduce recursive definitions in Prolog –Four examples –Show that there](https://reader030.vdocument.in/reader030/viewer/2022032703/56649d025503460f949d5a0a/html5/thumbnails/15.jpg)
© P
atr
ick B
lackb
urn
, Jo
han
Bos &
Kri
sti
na S
trie
gn
itz
Example 2: Decendant
child(anna,bridget).
child(bridget,caroline).
child(caroline,donna).
child(donna,emily).
descend(X,Y):- child(X,Y).
descend(X,Y):- child(X,Z), descend(Z,Y).
?- descend(anna,donna).
![Page 16: © Patrick Blackburn, Johan Bos & Kristina Striegnitz Lecture 3: Recursion Theory –Introduce recursive definitions in Prolog –Four examples –Show that there](https://reader030.vdocument.in/reader030/viewer/2022032703/56649d025503460f949d5a0a/html5/thumbnails/16.jpg)
© P
atr
ick B
lackb
urn
, Jo
han
Bos &
Kri
sti
na S
trie
gn
itz
Example 2: Search tree fordescend(anna,donna)
descend(anna,donna).
child(anna,donna).
†
child(anna,_1), descend(_1,donna).
descend(bridget,donna).
_1 = bridget
child(bridget,_2), descend(_2,donna).
descend(caroline,donna).
child(bridget,donna).
†_2 = caroline
child(caroline,donna).
child(anna,bridget).
child(bridget,caroline).
child(caroline,donna).
child(donna,emily).
descend(X,Y):- child(X,Y).
descend(X,Y):- child(X,Z), descend(Z,Y).
![Page 17: © Patrick Blackburn, Johan Bos & Kristina Striegnitz Lecture 3: Recursion Theory –Introduce recursive definitions in Prolog –Four examples –Show that there](https://reader030.vdocument.in/reader030/viewer/2022032703/56649d025503460f949d5a0a/html5/thumbnails/17.jpg)
© P
atr
ick B
lackb
urn
, Jo
han
Bos &
Kri
sti
na S
trie
gn
itz
Example 3: Successor
• Suppose we use the following way to write numerals:
1. 0 is a numeral.
2. If X is a numeral, then so is succ(X).
![Page 18: © Patrick Blackburn, Johan Bos & Kristina Striegnitz Lecture 3: Recursion Theory –Introduce recursive definitions in Prolog –Four examples –Show that there](https://reader030.vdocument.in/reader030/viewer/2022032703/56649d025503460f949d5a0a/html5/thumbnails/18.jpg)
© P
atr
ick B
lackb
urn
, Jo
han
Bos &
Kri
sti
na S
trie
gn
itz
Example 3: Successor
numeral(0).
numeral(succ(X)):- numeral(X).
![Page 19: © Patrick Blackburn, Johan Bos & Kristina Striegnitz Lecture 3: Recursion Theory –Introduce recursive definitions in Prolog –Four examples –Show that there](https://reader030.vdocument.in/reader030/viewer/2022032703/56649d025503460f949d5a0a/html5/thumbnails/19.jpg)
© P
atr
ick B
lackb
urn
, Jo
han
Bos &
Kri
sti
na S
trie
gn
itz
Example 3: Successor
numeral(0).
numeral(succ(X)):- numeral(X).
?- numeral(succ(succ(succ(0)))).
yes
?-
![Page 20: © Patrick Blackburn, Johan Bos & Kristina Striegnitz Lecture 3: Recursion Theory –Introduce recursive definitions in Prolog –Four examples –Show that there](https://reader030.vdocument.in/reader030/viewer/2022032703/56649d025503460f949d5a0a/html5/thumbnails/20.jpg)
© P
atr
ick B
lackb
urn
, Jo
han
Bos &
Kri
sti
na S
trie
gn
itz
Example 3: Successor
numeral(0).
numeral(succ(X)):- numeral(X).
?- numeral(X).
![Page 21: © Patrick Blackburn, Johan Bos & Kristina Striegnitz Lecture 3: Recursion Theory –Introduce recursive definitions in Prolog –Four examples –Show that there](https://reader030.vdocument.in/reader030/viewer/2022032703/56649d025503460f949d5a0a/html5/thumbnails/21.jpg)
© P
atr
ick B
lackb
urn
, Jo
han
Bos &
Kri
sti
na S
trie
gn
itz
Example 3: Successor
numeral(0).
numeral(succ(X)):- numeral(X).
?- numeral(X).
X=0;
X=succ(0);
X=succ(succ(0));
X=succ(succ(succ(0)));
X=succ(succ(succ(succ(0))))
![Page 22: © Patrick Blackburn, Johan Bos & Kristina Striegnitz Lecture 3: Recursion Theory –Introduce recursive definitions in Prolog –Four examples –Show that there](https://reader030.vdocument.in/reader030/viewer/2022032703/56649d025503460f949d5a0a/html5/thumbnails/22.jpg)
© P
atr
ick B
lackb
urn
, Jo
han
Bos &
Kri
sti
na S
trie
gn
itz
Example 4: Addition
?- add(succ(succ(0)),succ(succ(succ(0))), Result).
Result=succ(succ(succ(succ(succ(0)))))
yes
![Page 23: © Patrick Blackburn, Johan Bos & Kristina Striegnitz Lecture 3: Recursion Theory –Introduce recursive definitions in Prolog –Four examples –Show that there](https://reader030.vdocument.in/reader030/viewer/2022032703/56649d025503460f949d5a0a/html5/thumbnails/23.jpg)
© P
atr
ick B
lackb
urn
, Jo
han
Bos &
Kri
sti
na S
trie
gn
itz
Example 4: Addition
add(0,X,X). %%% base clause
?- add(succ(succ(0)),succ(succ(succ(0))), Result).
Result=succ(succ(succ(succ(succ(0)))))
yes
![Page 24: © Patrick Blackburn, Johan Bos & Kristina Striegnitz Lecture 3: Recursion Theory –Introduce recursive definitions in Prolog –Four examples –Show that there](https://reader030.vdocument.in/reader030/viewer/2022032703/56649d025503460f949d5a0a/html5/thumbnails/24.jpg)
© P
atr
ick B
lackb
urn
, Jo
han
Bos &
Kri
sti
na S
trie
gn
itz
Example 4: Addition
add(0,X,X). %%% base clause
add(succ(X),Y,succ(Z)):- %%% recursive clause
add(X,Y,Z).
?- add(succ(succ(0)),succ(succ(succ(0))), Result).
Result=succ(succ(succ(succ(succ(0)))))
yes
![Page 25: © Patrick Blackburn, Johan Bos & Kristina Striegnitz Lecture 3: Recursion Theory –Introduce recursive definitions in Prolog –Four examples –Show that there](https://reader030.vdocument.in/reader030/viewer/2022032703/56649d025503460f949d5a0a/html5/thumbnails/25.jpg)
© P
atr
ick B
lackb
urn
, Jo
han
Bos &
Kri
sti
na S
trie
gn
itz
Example 4: Search tree
add(succ(succ(0)), succ(succ(succ(0))), R).
add(succ(0), succ(succ(succ(0))), _1).
R = succ(_1)
add(0, succ(succ(succ(0))), _2).
_1 = succ(_2)
add(0,succ(succ(succ(0))),succ(succ(succ(0)))).
_2 = succ(succ(succ(0)))
add(0,X,X). %%% base clause
add(succ(X),Y,succ(Z)):- %%% recursive clause
add(X,Y,Z).
R = succ(_1)
R = succ(succ(_2))
R = succ(succ(succ(succ(succ(0)))))
![Page 26: © Patrick Blackburn, Johan Bos & Kristina Striegnitz Lecture 3: Recursion Theory –Introduce recursive definitions in Prolog –Four examples –Show that there](https://reader030.vdocument.in/reader030/viewer/2022032703/56649d025503460f949d5a0a/html5/thumbnails/26.jpg)
© P
atr
ick B
lackb
urn
, Jo
han
Bos &
Kri
sti
na S
trie
gn
itz
Prolog and Logic
• Prolog was the first reasonable attempt to create a logic programming language– Programmer gives a declarative
specification of the problem, using the language of logic
– The programmer should not have to tell the computer what to do
– To get information, the programmer simply asks a query
![Page 27: © Patrick Blackburn, Johan Bos & Kristina Striegnitz Lecture 3: Recursion Theory –Introduce recursive definitions in Prolog –Four examples –Show that there](https://reader030.vdocument.in/reader030/viewer/2022032703/56649d025503460f949d5a0a/html5/thumbnails/27.jpg)
© P
atr
ick B
lackb
urn
, Jo
han
Bos &
Kri
sti
na S
trie
gn
itz
Prolog and Logic
• Prolog does some important steps in this direction, but nevertheless, Prolog is not a full logic programming language!
• Prolog has a specific way of answering queries:– Search knowledge base from top to
bottom– Processes clauses from left to right– Backtracking to recover from bad choices
![Page 28: © Patrick Blackburn, Johan Bos & Kristina Striegnitz Lecture 3: Recursion Theory –Introduce recursive definitions in Prolog –Four examples –Show that there](https://reader030.vdocument.in/reader030/viewer/2022032703/56649d025503460f949d5a0a/html5/thumbnails/28.jpg)
© P
atr
ick B
lackb
urn
, Jo
han
Bos &
Kri
sti
na S
trie
gn
itz
descend1.pl
child(anna,bridget).
child(bridget,caroline).
child(caroline,donna).
child(donna,emily).
descend(X,Y):- child(X,Y).
descend(X,Y):- child(X,Z), descend(Z,Y).
?- descend(A,B).
A=anna
B=bridget
![Page 29: © Patrick Blackburn, Johan Bos & Kristina Striegnitz Lecture 3: Recursion Theory –Introduce recursive definitions in Prolog –Four examples –Show that there](https://reader030.vdocument.in/reader030/viewer/2022032703/56649d025503460f949d5a0a/html5/thumbnails/29.jpg)
© P
atr
ick B
lackb
urn
, Jo
han
Bos &
Kri
sti
na S
trie
gn
itz
descend2.pl
child(anna,bridget).
child(bridget,caroline).
child(caroline,donna).
child(donna,emily).
descend(X,Y):- child(X,Z), descend(Z,Y).
descend(X,Y):- child(X,Y).
?- descend(A,B).
A=anna
B=emily
![Page 30: © Patrick Blackburn, Johan Bos & Kristina Striegnitz Lecture 3: Recursion Theory –Introduce recursive definitions in Prolog –Four examples –Show that there](https://reader030.vdocument.in/reader030/viewer/2022032703/56649d025503460f949d5a0a/html5/thumbnails/30.jpg)
© P
atr
ick B
lackb
urn
, Jo
han
Bos &
Kri
sti
na S
trie
gn
itz
descend3.pl
child(anna,bridget).
child(bridget,caroline).
child(caroline,donna).
child(donna,emily).
descend(X,Y):- descend(Z,Y), child(X,Z).
descend(X,Y):- child(X,Y).
?- descend(A,B).
ERROR: OUT OF LOCAL STACK
![Page 31: © Patrick Blackburn, Johan Bos & Kristina Striegnitz Lecture 3: Recursion Theory –Introduce recursive definitions in Prolog –Four examples –Show that there](https://reader030.vdocument.in/reader030/viewer/2022032703/56649d025503460f949d5a0a/html5/thumbnails/31.jpg)
© P
atr
ick B
lackb
urn
, Jo
han
Bos &
Kri
sti
na S
trie
gn
itz
descend4.pl
child(anna,bridget).
child(bridget,caroline).
child(caroline,donna).
child(donna,emily).
descend(X,Y):- child(X,Y).
descend(X,Y):- descend(Z,Y), child(X,Z).
?- descend(A,B).
![Page 32: © Patrick Blackburn, Johan Bos & Kristina Striegnitz Lecture 3: Recursion Theory –Introduce recursive definitions in Prolog –Four examples –Show that there](https://reader030.vdocument.in/reader030/viewer/2022032703/56649d025503460f949d5a0a/html5/thumbnails/32.jpg)
© P
atr
ick B
lackb
urn
, Jo
han
Bos &
Kri
sti
na S
trie
gn
itz
Summary of this lecture
• In this lecture we introduced recursive predicates
• We also looked at the differences between the declarative and the procedural meaning of Prolog programs
• We have identified some of the shortcomings of Prolog seen as a logical programming language
![Page 33: © Patrick Blackburn, Johan Bos & Kristina Striegnitz Lecture 3: Recursion Theory –Introduce recursive definitions in Prolog –Four examples –Show that there](https://reader030.vdocument.in/reader030/viewer/2022032703/56649d025503460f949d5a0a/html5/thumbnails/33.jpg)
© P
atr
ick B
lackb
urn
, Jo
han
Bos &
Kri
sti
na S
trie
gn
itz
Correction Exercise 2.1Recall Unification Definition
1. If T1 and T2 are constants, then T1 and T2 unify if they are the same atom, or the same number.
2. If T1 is a variable and T2 is any type of term, then T1 and T2 unify, and T1 is instantiated to T2. (and vice versa)
3. If T1 and T2 are complex terms then they unify if:
1. They have the same functor and arity, and2. all their corresponding arguments unify, and3. the variable instantiations are compatible.
![Page 34: © Patrick Blackburn, Johan Bos & Kristina Striegnitz Lecture 3: Recursion Theory –Introduce recursive definitions in Prolog –Four examples –Show that there](https://reader030.vdocument.in/reader030/viewer/2022032703/56649d025503460f949d5a0a/html5/thumbnails/34.jpg)
© P
atr
ick B
lackb
urn
, Jo
han
Bos &
Kri
sti
na S
trie
gn
itz
Correction Exercise 2.1
1. bread = bread ✔2. 'Bread' = bread ✗3. 'bread' = bread ✔4. Bread = bread ✔5. bread = sausage ✗6. food(bread) = bread ✗7. food(bread) = X ✔8. food(X) = food(bread) ✔9. food(bread,X) = food(Y,sausage) ✔10. food(bread,X,beer) = food(Y,sausage,X) ✗11. food(bread,X,beer) = food(Y,kahuna_burger) ✗12. food(X) = X ✔13. meal(food(bread),drink(beer)) = meal(X,Y) ✔14. meal(food(bread),X) = meal(X,drink(beer)) ✗
![Page 35: © Patrick Blackburn, Johan Bos & Kristina Striegnitz Lecture 3: Recursion Theory –Introduce recursive definitions in Prolog –Four examples –Show that there](https://reader030.vdocument.in/reader030/viewer/2022032703/56649d025503460f949d5a0a/html5/thumbnails/35.jpg)
© P
atr
ick B
lackb
urn
, Jo
han
Bos &
Kri
sti
na S
trie
gn
itz
Correction Exercise 2.2
house_elf(dobby).witch(hermione).witch('McGonagall').witch(rita_skeeter).magic(X) :- house_elf(X).magic(X) :- wizard(X).magic(X) :- witch(X).
?- magic(house_elf).
false.
%%% actually raises exception: wizard/1 not defined
![Page 36: © Patrick Blackburn, Johan Bos & Kristina Striegnitz Lecture 3: Recursion Theory –Introduce recursive definitions in Prolog –Four examples –Show that there](https://reader030.vdocument.in/reader030/viewer/2022032703/56649d025503460f949d5a0a/html5/thumbnails/36.jpg)
© P
atr
ick B
lackb
urn
, Jo
han
Bos &
Kri
sti
na S
trie
gn
itz
Correction Exercise 2.2
house_elf(dobby).witch(hermione).witch('McGonagall').witch(rita_skeeter).magic(X) :- house_elf(X).magic(X) :- wizard(X).magic(X) :- witch(X).
?- wizard(harry).
false.
%%% actually raises exception: wizard/1 not defined
![Page 37: © Patrick Blackburn, Johan Bos & Kristina Striegnitz Lecture 3: Recursion Theory –Introduce recursive definitions in Prolog –Four examples –Show that there](https://reader030.vdocument.in/reader030/viewer/2022032703/56649d025503460f949d5a0a/html5/thumbnails/37.jpg)
© P
atr
ick B
lackb
urn
, Jo
han
Bos &
Kri
sti
na S
trie
gn
itz
Correction Exercise 2.2
house_elf(dobby).witch(hermione).witch('McGonagall').witch(rita_skeeter).magic(X) :- house_elf(X).magic(X) :- wizard(X).magic(X) :- witch(X).
?- magic(wizard).
false.
%%% actually raises exception: wizard/1 not defined
![Page 38: © Patrick Blackburn, Johan Bos & Kristina Striegnitz Lecture 3: Recursion Theory –Introduce recursive definitions in Prolog –Four examples –Show that there](https://reader030.vdocument.in/reader030/viewer/2022032703/56649d025503460f949d5a0a/html5/thumbnails/38.jpg)
© P
atr
ick B
lackb
urn
, Jo
han
Bos &
Kri
sti
na S
trie
gn
itz
Correction Exercise 2.2
house_elf(dobby).witch(hermione).witch('McGonagall').witch(rita_skeeter).magic(X) :- house_elf(X).magic(X) :- wizard(X).magic(X) :- witch(X).
?- magic('McGonagall').
true.
%%% actually raises exception: wizard/1 not defined
![Page 39: © Patrick Blackburn, Johan Bos & Kristina Striegnitz Lecture 3: Recursion Theory –Introduce recursive definitions in Prolog –Four examples –Show that there](https://reader030.vdocument.in/reader030/viewer/2022032703/56649d025503460f949d5a0a/html5/thumbnails/39.jpg)
© P
atr
ick B
lackb
urn
, Jo
han
Bos &
Kri
sti
na S
trie
gn
itz
Correction Exercise 2.2
house_elf(dobby).witch(hermione).witch('McGonagall').witch(rita_skeeter).magic(X) :- house_elf(X).magic(X) :- wizard(X).magic(X) :- witch(X).
?- magic(Hermione).
Hermione = dobby;
%%% actually raises exception: wizard/1 not defined
Hermione = hermione;
Hermione = ‘McGonagall’;
Hermione = rita_skeeter;
![Page 40: © Patrick Blackburn, Johan Bos & Kristina Striegnitz Lecture 3: Recursion Theory –Introduce recursive definitions in Prolog –Four examples –Show that there](https://reader030.vdocument.in/reader030/viewer/2022032703/56649d025503460f949d5a0a/html5/thumbnails/40.jpg)
© P
atr
ick B
lackb
urn
, Jo
han
Bos &
Kri
sti
na S
trie
gn
itz
Correction Exercise 2.2
house_elf(dobby).witch(hermione).witch('McGonagall').witch(rita_skeeter).
magic(H).H = _1
house_elf(_1).
_1 = dobby
magic(X) :- house_elf(X).magic(X) :- wizard(X).magic(X) :- witch(X).
H = _2
wizard(_2).
EXCEPTION: wizard/1
does not exist!
H = _3
witch(_3).
_3 = hermione _3 = ‘McGonagall’ _3 = rita_skeeter
![Page 41: © Patrick Blackburn, Johan Bos & Kristina Striegnitz Lecture 3: Recursion Theory –Introduce recursive definitions in Prolog –Four examples –Show that there](https://reader030.vdocument.in/reader030/viewer/2022032703/56649d025503460f949d5a0a/html5/thumbnails/41.jpg)
© P
atr
ick B
lackb
urn
, Jo
han
Bos &
Kri
sti
na S
trie
gn
itz
Correction Exercise 2.4
word(abalone,a,b,a,l,o,n,e).word(abandon,a,b,a,n,d,o,n).word(enhance,e,n,h,a,n,c,e).word(anagram,a,n,a,g,r,a,m).word(connect,c,o,n,n,e,c,t).word(elegant,e,l,e,g,a,n,t).
crosswd(V1,V2,V3,H1,H2,H3) :-word(V1,_,V1H1,_,V1H2,_,V1H3,_),word(V2,_,V2H1,_,V2H2,_,V2H3,_),word(V3,_,V3H1,_,V3H2,_,V3H3,_),word(H1,_,V1H1,_,V1H2,_,V1H3,_),word(H2,_,V2H1,_,V2H2,_,V2H3,_),word(H3,_,V3H1,_,V3H2,_,V3H3,_).
Beware: this allows to use a word more than once!!
![Page 42: © Patrick Blackburn, Johan Bos & Kristina Striegnitz Lecture 3: Recursion Theory –Introduce recursive definitions in Prolog –Four examples –Show that there](https://reader030.vdocument.in/reader030/viewer/2022032703/56649d025503460f949d5a0a/html5/thumbnails/42.jpg)
© P
atr
ick B
lackb
urn
, Jo
han
Bos &
Kri
sti
na S
trie
gn
itz
Exercises Chapter 3
• 3.2, 3.3, 3.4
![Page 43: © Patrick Blackburn, Johan Bos & Kristina Striegnitz Lecture 3: Recursion Theory –Introduce recursive definitions in Prolog –Four examples –Show that there](https://reader030.vdocument.in/reader030/viewer/2022032703/56649d025503460f949d5a0a/html5/thumbnails/43.jpg)
© P
atr
ick B
lackb
urn
, Jo
han
Bos &
Kri
sti
na S
trie
gn
itz
Next lecture
• Introduce lists in Prolog– Important recursive data structure in
Prolog programming– Define the member/2 predicate, a
fundamental Prolog tool for working with lists
– Discuss the idea of recursing down lists