writing and running simple prolog programspjh/modules/current/25433/lectures/lecture2/... ·...
TRANSCRIPT
![Page 1: Writing and running simple Prolog programspjh/modules/current/25433/lectures/lecture2/... · 06-25433 – Logic Programming Writing and running simple Prolog programs This lecture](https://reader030.vdocuments.site/reader030/viewer/2022020413/5b3a2e307f8b9a310e8f543d/html5/thumbnails/1.jpg)
06-25433 – Logic Programming
Writing and running
simple Prolog programs
This lecture will cover writing and querying facts without and with unbound variables, and show how rules are a way of querying more than one fact at a time.
![Page 2: Writing and running simple Prolog programspjh/modules/current/25433/lectures/lecture2/... · 06-25433 – Logic Programming Writing and running simple Prolog programs This lecture](https://reader030.vdocuments.site/reader030/viewer/2022020413/5b3a2e307f8b9a310e8f543d/html5/thumbnails/2.jpg)
06-25433 – Logic Programming
2 - Writing and running simple Prolog programs 1
A question from last week
Why can’t Prolog have the ++ operator, for instance:
A_Variable++
Answer:
A_Variable ++
is the equivalent of: A_Variable is A_Variable + 1
Prolog doesn’t allow variables to be reassigned.
![Page 3: Writing and running simple Prolog programspjh/modules/current/25433/lectures/lecture2/... · 06-25433 – Logic Programming Writing and running simple Prolog programs This lecture](https://reader030.vdocuments.site/reader030/viewer/2022020413/5b3a2e307f8b9a310e8f543d/html5/thumbnails/3.jpg)
06-25433 – Logic Programming
2 - Writing and running simple Prolog programs 2
Last time ...
Prolog’s built-in predicates and user-defined predicates look the same and behave the same.
Every predicate in Prolog returns true (yes) or fail (no).
Variables can’t be reassigned - it’s not logical.
Var is Var +1
is as logical as saying:
1 is 1 + 1.
![Page 4: Writing and running simple Prolog programspjh/modules/current/25433/lectures/lecture2/... · 06-25433 – Logic Programming Writing and running simple Prolog programs This lecture](https://reader030.vdocuments.site/reader030/viewer/2022020413/5b3a2e307f8b9a310e8f543d/html5/thumbnails/4.jpg)
06-25433 – Logic Programming
2 - Writing and running simple Prolog programs 3
Last time ...
For your rules to communicate with other rules, you have to:
– send information in through the parameter list;
– send information back out through the parameter list.
![Page 5: Writing and running simple Prolog programspjh/modules/current/25433/lectures/lecture2/... · 06-25433 – Logic Programming Writing and running simple Prolog programs This lecture](https://reader030.vdocuments.site/reader030/viewer/2022020413/5b3a2e307f8b9a310e8f543d/html5/thumbnails/5.jpg)
06-25433 – Logic Programming
2 - Writing and running simple Prolog programs 4
Last time ...
When there is a choice of rules,
– Prolog tries the first and, if it works, returns “true” and carries on
If the rule fails,
– it tries the next, and the next and the next, etc, until:
– either it finds a true rule or it fails (catastrophically)
![Page 6: Writing and running simple Prolog programspjh/modules/current/25433/lectures/lecture2/... · 06-25433 – Logic Programming Writing and running simple Prolog programs This lecture](https://reader030.vdocuments.site/reader030/viewer/2022020413/5b3a2e307f8b9a310e8f543d/html5/thumbnails/6.jpg)
06-25433 – Logic Programming
2 - Writing and running simple Prolog programs 5
Today
This lecture will cover:
– revise unification
– introduce facts
– show that Prolog uses unification when searching for clauses
– writing rules that use facts
– how Prolog works – its “hidden” data structure
![Page 7: Writing and running simple Prolog programspjh/modules/current/25433/lectures/lecture2/... · 06-25433 – Logic Programming Writing and running simple Prolog programs This lecture](https://reader030.vdocuments.site/reader030/viewer/2022020413/5b3a2e307f8b9a310e8f543d/html5/thumbnails/7.jpg)
06-25433 – Logic Programming
2 - Writing and running simple Prolog programs 6
Unification revisited - 1
Tutorial Sheet 1 had a number of matching and unification questions.
Prolog has several predicates that match or compare two terms:
==/2 e.g. 1 == 1
\==/2 e.g. 1 \== 2
=:=/2 e.g. 5 =:= 2 + 3
=\=/2 e.g. 7 =\= 16 / 2
>=/2 e.g. 5 >= 3
etc
![Page 8: Writing and running simple Prolog programspjh/modules/current/25433/lectures/lecture2/... · 06-25433 – Logic Programming Writing and running simple Prolog programs This lecture](https://reader030.vdocuments.site/reader030/viewer/2022020413/5b3a2e307f8b9a310e8f543d/html5/thumbnails/8.jpg)
06-25433 – Logic Programming
2 - Writing and running simple Prolog programs 7
Unification revisited - 2
None of these predicates assigns values to a variable:
==/2, \==/2,=:=/2, =\=/2, >=/2, etc
Only two predicates assign values:
Arithmetic only:
is/2 e.g. Var1 is 3 * 4
Unification:
=/2 e.g. Var2 = an_atom
![Page 9: Writing and running simple Prolog programspjh/modules/current/25433/lectures/lecture2/... · 06-25433 – Logic Programming Writing and running simple Prolog programs This lecture](https://reader030.vdocuments.site/reader030/viewer/2022020413/5b3a2e307f8b9a310e8f543d/html5/thumbnails/9.jpg)
06-25433 – Logic Programming
2 - Writing and running simple Prolog programs 8
Unification revisited - 3
When is unification true?
Unifying a variable with a literal: Var1 = an_atom.
Var2 = 300.045.
Var3 = an_object(an_atom, 300.045).
![Page 10: Writing and running simple Prolog programspjh/modules/current/25433/lectures/lecture2/... · 06-25433 – Logic Programming Writing and running simple Prolog programs This lecture](https://reader030.vdocuments.site/reader030/viewer/2022020413/5b3a2e307f8b9a310e8f543d/html5/thumbnails/10.jpg)
06-25433 – Logic Programming
2 - Writing and running simple Prolog programs 9
Unification revisited - 3
When is unification true?
Unifying a variable with a literal: an_atom = Var1.
300.045 = Var2.
an_object(an_atom, 300.045) = Var3.
The “empty” variable does not
have to be on the left-hand
side.
![Page 11: Writing and running simple Prolog programspjh/modules/current/25433/lectures/lecture2/... · 06-25433 – Logic Programming Writing and running simple Prolog programs This lecture](https://reader030.vdocuments.site/reader030/viewer/2022020413/5b3a2e307f8b9a310e8f543d/html5/thumbnails/11.jpg)
06-25433 – Logic Programming
2 - Writing and running simple Prolog programs 10
Unification revisited - 4
When is unification true?
Unifying a variable with another variable: | ?- Var1 = Var2.
Var2 = Var1 ? ;
no
T Prolog show the variable binding
– the “contents” of the variable
The “semi-colon” in
Prolog means “or”.
We’re saying “Or is there
another solution...?” All unification really does
is to make variables share
memory locations.
![Page 12: Writing and running simple Prolog programspjh/modules/current/25433/lectures/lecture2/... · 06-25433 – Logic Programming Writing and running simple Prolog programs This lecture](https://reader030.vdocuments.site/reader030/viewer/2022020413/5b3a2e307f8b9a310e8f543d/html5/thumbnails/12.jpg)
06-25433 – Logic Programming
2 - Writing and running simple Prolog programs 11
Unification revisited - 4
We can run a conjunction of unifications:
![Page 13: Writing and running simple Prolog programspjh/modules/current/25433/lectures/lecture2/... · 06-25433 – Logic Programming Writing and running simple Prolog programs This lecture](https://reader030.vdocuments.site/reader030/viewer/2022020413/5b3a2e307f8b9a310e8f543d/html5/thumbnails/13.jpg)
06-25433 – Logic Programming
2 - Writing and running simple Prolog programs 12
Writing facts - 1
In the last lecture, we saw rules such as:
display_balance(bank_account(No, Name,
Balance)) :-
write(Name),
write(' account no: '),
write(No),
nl,
write('Your balance is: '),
write(Balance),
nl.
![Page 14: Writing and running simple Prolog programspjh/modules/current/25433/lectures/lecture2/... · 06-25433 – Logic Programming Writing and running simple Prolog programs This lecture](https://reader030.vdocuments.site/reader030/viewer/2022020413/5b3a2e307f8b9a310e8f543d/html5/thumbnails/14.jpg)
06-25433 – Logic Programming
2 - Writing and running simple Prolog programs 13
Writing facts - 2
Facts are rules without a body:
likes(max, julia).
likes(max, amabel).
They are always true, so we could also write them as: likes(max, julia) :-
true.
likes(max, amabel) :-
true.
![Page 15: Writing and running simple Prolog programspjh/modules/current/25433/lectures/lecture2/... · 06-25433 – Logic Programming Writing and running simple Prolog programs This lecture](https://reader030.vdocuments.site/reader030/viewer/2022020413/5b3a2e307f8b9a310e8f543d/html5/thumbnails/15.jpg)
06-25433 – Logic Programming
2 - Writing and running simple Prolog programs 14
Queries with these facts
![Page 16: Writing and running simple Prolog programspjh/modules/current/25433/lectures/lecture2/... · 06-25433 – Logic Programming Writing and running simple Prolog programs This lecture](https://reader030.vdocuments.site/reader030/viewer/2022020413/5b3a2e307f8b9a310e8f543d/html5/thumbnails/16.jpg)
06-25433 – Logic Programming
2 - Writing and running simple Prolog programs 15
What facts represent
Facts with arguments are used to describe relationships between arguments.
e.g. lives_in(max, london).
likes(max, amabel).
child(charles, amy, brian).
price(template, 3, 4.75).
assembly(arm, joint(ball,3)).
![Page 17: Writing and running simple Prolog programspjh/modules/current/25433/lectures/lecture2/... · 06-25433 – Logic Programming Writing and running simple Prolog programs This lecture](https://reader030.vdocuments.site/reader030/viewer/2022020413/5b3a2e307f8b9a310e8f543d/html5/thumbnails/17.jpg)
06-25433 – Logic Programming
2 - Writing and running simple Prolog programs 16
An insight
Prolog matches our query with facts using unification.
Prolog uses unification wherever it has to match anything with anything.
![Page 18: Writing and running simple Prolog programspjh/modules/current/25433/lectures/lecture2/... · 06-25433 – Logic Programming Writing and running simple Prolog programs This lecture](https://reader030.vdocuments.site/reader030/viewer/2022020413/5b3a2e307f8b9a310e8f543d/html5/thumbnails/18.jpg)
06-25433 – Logic Programming
2 - Writing and running simple Prolog programs 17
Consolidation moment
Facts are rules that are always true.
Prolog will attempt to return every solution – in the order that they occur in the program.
Prolog uses unification to match queries with rule heads and facts.
![Page 19: Writing and running simple Prolog programspjh/modules/current/25433/lectures/lecture2/... · 06-25433 – Logic Programming Writing and running simple Prolog programs This lecture](https://reader030.vdocuments.site/reader030/viewer/2022020413/5b3a2e307f8b9a310e8f543d/html5/thumbnails/19.jpg)
06-25433 – Logic Programming
2 - Writing and running simple Prolog programs 18
Jealousy: the jealous/2 rule
This is a simple program:
jealous(Jealous, Victim) :-
likes(Person, Jealous),
likes(Person, Victim).
likes(max, julia).
likes(max, amabel).
![Page 20: Writing and running simple Prolog programspjh/modules/current/25433/lectures/lecture2/... · 06-25433 – Logic Programming Writing and running simple Prolog programs This lecture](https://reader030.vdocuments.site/reader030/viewer/2022020413/5b3a2e307f8b9a310e8f543d/html5/thumbnails/20.jpg)
06-25433 – Logic Programming
2 - Writing and running simple Prolog programs 19
Jealousy: the jealous/2 rule
![Page 21: Writing and running simple Prolog programspjh/modules/current/25433/lectures/lecture2/... · 06-25433 – Logic Programming Writing and running simple Prolog programs This lecture](https://reader030.vdocuments.site/reader030/viewer/2022020413/5b3a2e307f8b9a310e8f543d/html5/thumbnails/21.jpg)
06-25433 – Logic Programming
2 - Writing and running simple Prolog programs 20
States of the stack - 1
Step 1 - add to stack
jealous(julia, Victim) :-
likes(Person, julia),
likes(Person, Victim).
Step 2 - match first subgoal
jealous(julia, Victim) :-
likes(max, julia),
likes(max, Victim).
![Page 22: Writing and running simple Prolog programspjh/modules/current/25433/lectures/lecture2/... · 06-25433 – Logic Programming Writing and running simple Prolog programs This lecture](https://reader030.vdocuments.site/reader030/viewer/2022020413/5b3a2e307f8b9a310e8f543d/html5/thumbnails/22.jpg)
06-25433 – Logic Programming
2 - Writing and running simple Prolog programs 21
States of the stack - 2
Step 3 - match second subgoal
jealous(julia, julia) :-
likes(max, julia),
likes(max, julia).
jealous(julia, amabel) :-
likes(max, julia),
likes(max, amabel).
![Page 23: Writing and running simple Prolog programspjh/modules/current/25433/lectures/lecture2/... · 06-25433 – Logic Programming Writing and running simple Prolog programs This lecture](https://reader030.vdocuments.site/reader030/viewer/2022020413/5b3a2e307f8b9a310e8f543d/html5/thumbnails/23.jpg)
06-25433 – Logic Programming
2 - Writing and running simple Prolog programs 22
States of the stack - 3
Step 4 - report success to the user
| ?- jealous(julia, Who).
Who = julia ;
jealous(julia, amabel) :-
likes(max, julia),
likes(max, amabel).
![Page 24: Writing and running simple Prolog programspjh/modules/current/25433/lectures/lecture2/... · 06-25433 – Logic Programming Writing and running simple Prolog programs This lecture](https://reader030.vdocuments.site/reader030/viewer/2022020413/5b3a2e307f8b9a310e8f543d/html5/thumbnails/24.jpg)
06-25433 – Logic Programming
2 - Writing and running simple Prolog programs 23
States of the stack - 4
Step 5 - report success to the user
| ?- jealous(julia, Who).
Who = julia ;
Who = amabel ;
![Page 25: Writing and running simple Prolog programspjh/modules/current/25433/lectures/lecture2/... · 06-25433 – Logic Programming Writing and running simple Prolog programs This lecture](https://reader030.vdocuments.site/reader030/viewer/2022020413/5b3a2e307f8b9a310e8f543d/html5/thumbnails/25.jpg)
06-25433 – Logic Programming
2 - Writing and running simple Prolog programs 24
States of the stack - 5
Step 6 - report no more solutions
| ?- jealous(julia, Who).
Who = julia ;
Who = amabel ;
no
![Page 26: Writing and running simple Prolog programspjh/modules/current/25433/lectures/lecture2/... · 06-25433 – Logic Programming Writing and running simple Prolog programs This lecture](https://reader030.vdocuments.site/reader030/viewer/2022020413/5b3a2e307f8b9a310e8f543d/html5/thumbnails/26.jpg)
06-25433 – Logic Programming
2 - Writing and running simple Prolog programs 25
Consolidation moment
Prolog will attempt to find all solutions – if you ask.
Finding multiple solutions is based on an internal stack – which you’ll never see but you’ll see the effects.
![Page 27: Writing and running simple Prolog programspjh/modules/current/25433/lectures/lecture2/... · 06-25433 – Logic Programming Writing and running simple Prolog programs This lecture](https://reader030.vdocuments.site/reader030/viewer/2022020413/5b3a2e307f8b9a310e8f543d/html5/thumbnails/27.jpg)
06-25433 – Logic Programming
2 - Writing and running simple Prolog programs 26
Some terminology
jealous(Jealous, Victim) :-
likes(Person, Jealous),
likes(Person, Victim).
likes(max, julia).
likes(max, amabel).
1 procedure
1 procedure
![Page 28: Writing and running simple Prolog programspjh/modules/current/25433/lectures/lecture2/... · 06-25433 – Logic Programming Writing and running simple Prolog programs This lecture](https://reader030.vdocuments.site/reader030/viewer/2022020413/5b3a2e307f8b9a310e8f543d/html5/thumbnails/28.jpg)
06-25433 – Logic Programming
2 - Writing and running simple Prolog programs 27
Some terminology
jealous(Jealous, Victim) :-
likes(Person, Jealous),
likes(Person, Victim).
likes(max, julia).
likes(max, amabel).
1 clause
2 clauses
![Page 29: Writing and running simple Prolog programspjh/modules/current/25433/lectures/lecture2/... · 06-25433 – Logic Programming Writing and running simple Prolog programs This lecture](https://reader030.vdocuments.site/reader030/viewer/2022020413/5b3a2e307f8b9a310e8f543d/html5/thumbnails/29.jpg)
06-25433 – Logic Programming
2 - Writing and running simple Prolog programs 28
Some terminology
jealous(Jealous, Victim) :-
likes(Person, Jealous),
likes(Person, Victim).
likes(max, julia).
likes(max, amabel).
1 rule
2 facts
![Page 30: Writing and running simple Prolog programspjh/modules/current/25433/lectures/lecture2/... · 06-25433 – Logic Programming Writing and running simple Prolog programs This lecture](https://reader030.vdocuments.site/reader030/viewer/2022020413/5b3a2e307f8b9a310e8f543d/html5/thumbnails/30.jpg)
06-25433 – Logic Programming
2 - Writing and running simple Prolog programs 29
Friendship - 1
Suppose we define our friend as being either:
an immediate friend of ourselves
or
a friend of a friend
![Page 31: Writing and running simple Prolog programspjh/modules/current/25433/lectures/lecture2/... · 06-25433 – Logic Programming Writing and running simple Prolog programs This lecture](https://reader030.vdocuments.site/reader030/viewer/2022020413/5b3a2e307f8b9a310e8f543d/html5/thumbnails/31.jpg)
06-25433 – Logic Programming
2 - Writing and running simple Prolog programs 30
Friendship - 2
We could code this as: friend_of(max, julia).
friend_of(max, amabel).
friend_of(amabel, richard). % etc
% 1
friend(Pers, Friend) :-
friend_of(Pers, Friend).
% 2
friend(Pers, Friend) :-
friend_of(Pers, Inter),
friend_of(Inter, Friend).
![Page 32: Writing and running simple Prolog programspjh/modules/current/25433/lectures/lecture2/... · 06-25433 – Logic Programming Writing and running simple Prolog programs This lecture](https://reader030.vdocuments.site/reader030/viewer/2022020413/5b3a2e307f8b9a310e8f543d/html5/thumbnails/32.jpg)
06-25433 – Logic Programming
2 - Writing and running simple Prolog programs 31
A question
How many subgoals would the longest friend/2 rule have to have?
or, to put it another way:
What is the maximum number of friends you could have?