Title: Prolog Programming Volume 2
1Prolog Programming(Volume 2)
2Lists
- Lists are the same as other languages (such as
ML) in that a list of terms of any length is
composed of list cells that are consed
together. - The list of length 0 is called nil, written .
- The list of length n is .(head,tail), where tail
is a list of length n-1. - So a list cell is a functor . of arity 2. Its
first component is the head, and the second
component is the tail.
3Examples of lists
- nil
- .(a, nil)
- .(a, .(b, nil)
- .(a, .(b, .(c, .(d, .(e. nil)))))
- .(a,b) (note this is a pair, not a proper list)
- .(a, X) (this might be a list, or might not!)
- .(a, .(b, nil)), .(c, nil))
4They can be written as trees
a
a
nil
b
nil
a
b
a
X
a
b
c
a
a
nil
d
b
nil
e
nil
5Prolog Syntax for Lists
- Nil is written .
- The list consisting of n elements t1, t2, ,tn is
written t1, t2, ,tn. - .(X,Y) is written XY
- X is written X
- The term .(a, .(b, .(c,Y))) is written a,b,cY.
- If Y is instantiated to , then the term is a
list, and can be written a,b,c or simply
a,b,c.
6Exercises
- Identify the heads and tails of these lists (if
any) - a, b, c
- a
-
- the, cat, sat
- the, cardinal, pulled, off, each, plum,
coloured, shoe
7Exercises
- Identify the heads and tails of these lists (if
any) - a b, c
- a
-
- the, cat, sat
- the, cardinal, pulled, off, each, plum,
coloured, shoe
8Exercises
- Identify the heads and tails of these lists (if
any) - a, b, c
- a
-
- the, cat, sat
- the, cardinal, pulled, off, each, plum,
coloured, shoe
9Exercises
- Identify the heads and tails of these lists (if
any) - a, b, c
- a
- (not a list, so doesnt have head and tail.
nil is a constant) - the, cat, sat
- the, cardinal, pulled, off, each, plum,
coloured, shoe
10Exercises
- Identify the heads and tails of these lists (if
any) - a, b, c
- a
-
- the, cat sat
- the, cardinal, pulled, off, each, plum,
coloured, shoe
11Exercises
- Identify the heads and tails of these lists (if
any) - a, b, c
- a
-
- the, cat, sat
- the, cardinal pulled, off, each, plum,
coloured, shoe
12Exercises
- For each pair of terms, determine whether they
unify, and if so, to which terms are the
variables instantiated? - X, Y, Z john, likes, fish
- cat XY
- X,YZ mary, likes, wine (picture on next
slide) - the,YZ X,answer, is, here
- X, Y, X a, Z, Z
- X, Y, X a, X, X
13Remember
- A variable may be instantiated to any term.
X
Y
Z
mary
likes
wine
mary, likes, wine X,YZ
14Fun with Lists (Worksheet 5)
- / member(Term, List) /
- member(X, XT).
- member(X, HT) - member(X, T).
- Examples
- ?- member(john, paul, john).
- ?- member(X, paul, john).
- ?- member(joe, marx, darwin, freud).
- ?- member(foo, X).
15Exercises
- Here is a mystery predicate. What does it do?
- mystery(X, A, B) - member(X, A), member(X, B).
- ?- mystery(a, b, c, a, p, a, l).
- ?- mystery(b, b, l, u, e, y, e, l, l, o, w).
- ?- mystery(X, r, a, p, i, d, a, c, t, i, o,
n). - ?- mystery(X, w, a, l, n, u, t, c, h, e, r, r,
y).
16A Brief Diversion intoAnonymous Variables
- / member(Term, List) /
- member(X, XT).
- member(X, HT) - member(X, T).
- member(X, X_).
- member(X, _T) - member(X, T).
Notice T isnt used
Notice H isnt used
17A Brief Diversion into Arithmetic
- The built-in predicate is takes two arguments.
It interprets its second as an arithmetic
expression, and unifies it with the first. Also,
is is an infix operator. - ?- X is 2 2 2.
- X 6
- ?- 10 is (2 0) 2 ltlt 4.
- no
- ?- 32 is (2 0) 2 ltlt 4.
- yes
18is
- But is cannot solve equations, so the
expression must be ground (contain no free
variables. - ?- Y is 2 X.
- no
- ?- X is 15, Y is 2 X.
- X 15, Y 30.
19Worksheet 6 Length of a List
- / length(List, Length) /
- Naïve method
- length(, 0).
- length(HT, N) - length(T, NT), N is NT 1.
20Worksheet 6
- / length(List, Length) /
- Tail-recursive method
- length(L, N) - acc(L, 0, N).
- / acc(List, Before, After) /
- acc(, A, A).
- acc(HT, A, N) - A1 is A 1, acc(T, A1, N).
21Exercises
- ?- length(apple, pear, N).
- ?- length(alpha, 2).
- ?- length(L, 3).
- Modify length to give a procedure sum such that
sum(L,N) succeeds if L is a list of integers and
N is their sum.
22Worksheet 7 Inner Product
- A list of n integers can be used to represent an
n-vector (a point in n-dimensional space). Given
two vectors a and b, the inner product (dot
product) of a and b is defined - As you might expect, there are naïve and
tail-recursive ways to compute this.
23Worksheet 7
- The naïve method
- inner(, , 0).
- inner(AAs,BBs,N) -
- inner(As, Bs, Ns), N is Ns (A B).
24Worksheet 7
- Tail-recursive method
- inner(A, B, N) - dotaux(A, B, 0, N).
- dotaux(, , V, V).
- dotaux(AAs,BBs,N,Z) -
- N1 is N (A B),
- dotaux(As, Bs, N1, Z).
25Worksheet 8 Maximum of a List
- Tail-recursive method has a base case and two
recursive cases - / max(List, Accumulator, Result) /
- max(, A, A).
- max(HT, A, M) - H gt A, max(T, H, M).
- max(HT, A, M) - H lt A, max(T, A, M).
- How to initialise the accumulator?
26Worksheet 8
- maximum(L, M) - max(L, -10000, M).
- Magic numbers are a bad idea.
- maximum(L, M) - max(L, minint, M)
- Need to change definitions of arithmetic.
- maximum(HT, M) - max(T, H, M).
- And know that ?- maximum(,X) fails.
27Worksheet 9
arc
Here we have added a new arc from d to a. If you
use the program from WS 4, some goals will cause
an infinite loop.
- a(g, h).
- a(d, a).
- a(g, d).
- a(e, d).
- a(h, f).
- a(e, f).
- a(a, e).
- a(a, b).
- a(b, f).
- a(b, c).
- a(f, c).
a
b
c
e
d
f
g
h
Keep a trail of nodes visited so far. Visit
only legal nodes, not already on the trail.
Represent the trail as an accumulator, an extra
argument of path.
28Worksheet 9
- path(X, X, T).
- path(X, Y, T) -
- a(X, Z), legal(Z, T), path(Z, Y, ZT).
- legal(Z, ).
- legal(Z, HT) - Z \ H, legal(Z, T).
- Notice that legal is like the negation of member.