Download - Prolog -Cpt114 - Week3
![Page 1: Prolog -Cpt114 - Week3](https://reader033.vdocument.in/reader033/viewer/2022061302/54907a7cb47959a4028b4a36/html5/thumbnails/1.jpg)
PROLOGWeek 3
![Page 2: Prolog -Cpt114 - Week3](https://reader033.vdocument.in/reader033/viewer/2022061302/54907a7cb47959a4028b4a36/html5/thumbnails/2.jpg)
OBJECTIVES FOR THIS SESSION
The Lists in Prolog
Tracing
![Page 3: Prolog -Cpt114 - Week3](https://reader033.vdocument.in/reader033/viewer/2022061302/54907a7cb47959a4028b4a36/html5/thumbnails/3.jpg)
SIMPLE LISTS IN PROLOG
![Page 4: Prolog -Cpt114 - Week3](https://reader033.vdocument.in/reader033/viewer/2022061302/54907a7cb47959a4028b4a36/html5/thumbnails/4.jpg)
HOW TO MAKE A LIST IN PROLOG
pam tom
bob liz
pat
jim
ann
![Page 5: Prolog -Cpt114 - Week3](https://reader033.vdocument.in/reader033/viewer/2022061302/54907a7cb47959a4028b4a36/html5/thumbnails/5.jpg)
HOW TO MAKE A LIST IN PROLOG
pam tom
bob liz
pat
jim
ann
parent(pam, bob).parent(tom, bob).parent(tom, liz).parent(bob, pat).parent(pat, jim).female(pam).female(liz).female(pat).male(tom).male(bob).male(jim).
![Page 6: Prolog -Cpt114 - Week3](https://reader033.vdocument.in/reader033/viewer/2022061302/54907a7cb47959a4028b4a36/html5/thumbnails/6.jpg)
HOW TO MAKE A LIST IN PROLOGpam tom
bob liz
pat
jim
ann
![Page 7: Prolog -Cpt114 - Week3](https://reader033.vdocument.in/reader033/viewer/2022061302/54907a7cb47959a4028b4a36/html5/thumbnails/7.jpg)
HOW FINDALL WORKS
findall(X,predecessor(pam,X),Preds).
Output listThe query variable
![Page 8: Prolog -Cpt114 - Week3](https://reader033.vdocument.in/reader033/viewer/2022061302/54907a7cb47959a4028b4a36/html5/thumbnails/8.jpg)
8
EXAMPLE1
The following conversation with Prolog:
?- Hobbies1 = [tennis, music],
Hobbies2 = [skiing, food],
L = [ann, Hobbies1, tom, Hobbies2].
Hobbies1 = [tennis, music]
Hobbies2 = [skiing, food]
L = [ann, [tennis, music], tom, [skiing, food] ]
![Page 9: Prolog -Cpt114 - Week3](https://reader033.vdocument.in/reader033/viewer/2022061302/54907a7cb47959a4028b4a36/html5/thumbnails/9.jpg)
EXAMPLE2
Treat the whole tail as a single object:L = [a, b, c]
Tail = [b, c]
L = .(a, Tail)
L = [a | Tail]
[a, b, c] = [a | [b, c] ] = [a, b | [c] ] = [a, b, c | [ ] ]
![Page 10: Prolog -Cpt114 - Week3](https://reader033.vdocument.in/reader033/viewer/2022061302/54907a7cb47959a4028b4a36/html5/thumbnails/10.jpg)
EXAMPLE2
Treat the whole tail as a single object:L = [a, b, c]
Tail = [b, c]
L = .(a, Tail)
L = [a | Tail]
[a, b, c] = [a | [b, c] ] = [a, b | [c] ] = [a, b, c | [ ] ]
![Page 11: Prolog -Cpt114 - Week3](https://reader033.vdocument.in/reader033/viewer/2022061302/54907a7cb47959a4028b4a36/html5/thumbnails/11.jpg)
MEMBERSHIP
X is a member of L either:1) X is the head of L, or2) X is a member of the tail of L.member(X, L)
Can be written in two clauses:member(X, [X | Tail] ). %simple fact
member(X, [Head | Tail] ) :-
member(X, Tail). %rule Example:
member(b, [a,b,c] ). %true
member(b, [a,[b,c]] ). %false, the tail is [b,c]
member([b,c],[a,[b,c]] ). %true
![Page 12: Prolog -Cpt114 - Week3](https://reader033.vdocument.in/reader033/viewer/2022061302/54907a7cb47959a4028b4a36/html5/thumbnails/12.jpg)
MEMBERSHIP
Simple other tests:
findall(X,parent(X,_),Parents).
Parents = [pam, tom, tom, bob, pat].
Is pam a member of Parents????member(pam, [pam, tom,bob, pat]).
![Page 13: Prolog -Cpt114 - Week3](https://reader033.vdocument.in/reader033/viewer/2022061302/54907a7cb47959a4028b4a36/html5/thumbnails/13.jpg)
MEMBERSHIP
Parents = [pam, tom, tom, bob, pat].
Is pam a member of HEAD of Parents????
member(pam,[pam,Parents]).
![Page 14: Prolog -Cpt114 - Week3](https://reader033.vdocument.in/reader033/viewer/2022061302/54907a7cb47959a4028b4a36/html5/thumbnails/14.jpg)
HEAD AND TAIL
A non-empty list can be thought of as consisting of two parts The head The tail
The head is the first item in the list The tail is everything else
The tail is the list that remains when we take the first element away
The tail of a list is always a list
![Page 15: Prolog -Cpt114 - Week3](https://reader033.vdocument.in/reader033/viewer/2022061302/54907a7cb47959a4028b4a36/html5/thumbnails/15.jpg)
HEAD AND TAIL EXAMPLE 1
[mia, vincent, jules, yolanda]
Head: Tail:
![Page 16: Prolog -Cpt114 - Week3](https://reader033.vdocument.in/reader033/viewer/2022061302/54907a7cb47959a4028b4a36/html5/thumbnails/16.jpg)
HEAD AND TAIL EXAMPLE 1
[mia, vincent, jules, yolanda]
Head: miaTail:
![Page 17: Prolog -Cpt114 - Week3](https://reader033.vdocument.in/reader033/viewer/2022061302/54907a7cb47959a4028b4a36/html5/thumbnails/17.jpg)
HEAD AND TAIL EXAMPLE 1
[mia, vincent, jules, yolanda]
Head: miaTail: [vincent, jules, yolanda]
![Page 18: Prolog -Cpt114 - Week3](https://reader033.vdocument.in/reader033/viewer/2022061302/54907a7cb47959a4028b4a36/html5/thumbnails/18.jpg)
HEAD AND TAIL EXAMPLE 2
[[ ], dead(z), [2, [b,c]], [ ], Z, [2, [b,c]]]
Head: Tail:
![Page 19: Prolog -Cpt114 - Week3](https://reader033.vdocument.in/reader033/viewer/2022061302/54907a7cb47959a4028b4a36/html5/thumbnails/19.jpg)
HEAD AND TAIL EXAMPLE 2
[[ ], dead(z), [2, [b,c]], [ ], Z, [2, [b,c]]]
Head: [ ]Tail:
![Page 20: Prolog -Cpt114 - Week3](https://reader033.vdocument.in/reader033/viewer/2022061302/54907a7cb47959a4028b4a36/html5/thumbnails/20.jpg)
HEAD AND TAIL EXAMPLE 2
[[ ], dead(z), [2, [b,c]], [ ], Z, [2, [b,c]]]
Head: [ ]Tail: [dead(z), [2, [b,c]], [ ], Z, [2, [b,c]]]
![Page 21: Prolog -Cpt114 - Week3](https://reader033.vdocument.in/reader033/viewer/2022061302/54907a7cb47959a4028b4a36/html5/thumbnails/21.jpg)
HEAD AND TAIL EXAMPLE 3
[dead(z)]
Head: Tail:
![Page 22: Prolog -Cpt114 - Week3](https://reader033.vdocument.in/reader033/viewer/2022061302/54907a7cb47959a4028b4a36/html5/thumbnails/22.jpg)
HEAD AND TAIL EXAMPLE 3
[dead(z)]
Head: dead(z) Tail:
![Page 23: Prolog -Cpt114 - Week3](https://reader033.vdocument.in/reader033/viewer/2022061302/54907a7cb47959a4028b4a36/html5/thumbnails/23.jpg)
HEAD AND TAIL EXAMPLE 3
[dead(z)]
Head: dead(z) Tail: [ ]
![Page 24: Prolog -Cpt114 - Week3](https://reader033.vdocument.in/reader033/viewer/2022061302/54907a7cb47959a4028b4a36/html5/thumbnails/24.jpg)
THE BUILT-IN OPERATOR |
?- [Head|Tail] = [mia, vincent, jules, yolanda].
Head = miaTail = [vincent,jules,yolanda]yes
?-
![Page 25: Prolog -Cpt114 - Week3](https://reader033.vdocument.in/reader033/viewer/2022061302/54907a7cb47959a4028b4a36/html5/thumbnails/25.jpg)
THE BUILT-IN OPERATOR |
?- [X|Y] = [mia, vincent, jules, yolanda].
X = miaY = [vincent,jules,yolanda]yes
?-
![Page 26: Prolog -Cpt114 - Week3](https://reader033.vdocument.in/reader033/viewer/2022061302/54907a7cb47959a4028b4a36/html5/thumbnails/26.jpg)
THE BUILT-IN OPERATOR |
?- [X|Y] = [ ].
no
?-
![Page 27: Prolog -Cpt114 - Week3](https://reader033.vdocument.in/reader033/viewer/2022061302/54907a7cb47959a4028b4a36/html5/thumbnails/27.jpg)
THE BUILT-IN OPERATOR |?- [X,Y|Tail] = [[ ], dead(z), [2, [b,c]], [], Z, [2, [b,c]]] .
X = [ ]Y = dead(z)Z = _4543 Tail = [[2, [b,c]], [ ], Z, [2, [b,c]]] yes
?-
![Page 28: Prolog -Cpt114 - Week3](https://reader033.vdocument.in/reader033/viewer/2022061302/54907a7cb47959a4028b4a36/html5/thumbnails/28.jpg)
ANONYMOUS VARIABLE
Suppose we are interested in the second and fourth element of a list
?- [X1,X2,X3,X4|Tail] = [mia, vincent, marsellus, jody, yolanda].X1 = miaX2 = vincentX3 = marsellusX4 = jodyTail = [yolanda]yes
?-
![Page 29: Prolog -Cpt114 - Week3](https://reader033.vdocument.in/reader033/viewer/2022061302/54907a7cb47959a4028b4a36/html5/thumbnails/29.jpg)
ANONYMOUS VARIABLES
There is a simpler way of obtaining only the information we want:
?- [ _,X2, _,X4|_ ] = [mia, vincent, marsellus, jody, yolanda].X2 = vincentX4 = jodyyes
?-
The underscore is the anonymous variable
![Page 30: Prolog -Cpt114 - Week3](https://reader033.vdocument.in/reader033/viewer/2022061302/54907a7cb47959a4028b4a36/html5/thumbnails/30.jpg)
THE ANONYMOUS VARIABLE
Is used when you need to use a variable, but you are not interested in what Prolog instantiates it to
Each occurrence of the anonymous variable is independent, i.e. can be bound to something different
![Page 31: Prolog -Cpt114 - Week3](https://reader033.vdocument.in/reader033/viewer/2022061302/54907a7cb47959a4028b4a36/html5/thumbnails/31.jpg)
MEMBER
One of the most basic things we would like to know is whether something is an element of a list or not
So let`s write a predicate that when given a term X and a list L, tells us whether or not X belongs to L
This predicate is usually called member/2
![Page 32: Prolog -Cpt114 - Week3](https://reader033.vdocument.in/reader033/viewer/2022061302/54907a7cb47959a4028b4a36/html5/thumbnails/32.jpg)
MEMBER/2
member(X,[X|T]).member(X,[H|T]):- member(X,T).
?-
![Page 33: Prolog -Cpt114 - Week3](https://reader033.vdocument.in/reader033/viewer/2022061302/54907a7cb47959a4028b4a36/html5/thumbnails/33.jpg)
MEMBER/2
member(X,[X|T]).member(X,[H|T]):- member(X,T).
?- member(yolanda,[yolanda,trudy,vincent,jules]).
![Page 34: Prolog -Cpt114 - Week3](https://reader033.vdocument.in/reader033/viewer/2022061302/54907a7cb47959a4028b4a36/html5/thumbnails/34.jpg)
MEMBER/2
member(X,[X|T]).member(X,[H|T]):- member(X,T).
?- member(yolanda,[yolanda,trudy,vincent,jules]).yes?-
![Page 35: Prolog -Cpt114 - Week3](https://reader033.vdocument.in/reader033/viewer/2022061302/54907a7cb47959a4028b4a36/html5/thumbnails/35.jpg)
MEMBER/2
member(X,[X|T]).member(X,[H|T]):- member(X,T).
?- member(vincent,[yolanda,trudy,vincent,jules]).
![Page 36: Prolog -Cpt114 - Week3](https://reader033.vdocument.in/reader033/viewer/2022061302/54907a7cb47959a4028b4a36/html5/thumbnails/36.jpg)
MEMBER/2
member(X,[X|T]).member(X,[H|T]):- member(X,T).
?- member(vincent,[yolanda,trudy,vincent,jules]).yes?-
![Page 37: Prolog -Cpt114 - Week3](https://reader033.vdocument.in/reader033/viewer/2022061302/54907a7cb47959a4028b4a36/html5/thumbnails/37.jpg)
MEMBER/2
member(X,[X|T]).member(X,[H|T]):- member(X,T).
?- member(zed,[yolanda,trudy,vincent,jules]).
![Page 38: Prolog -Cpt114 - Week3](https://reader033.vdocument.in/reader033/viewer/2022061302/54907a7cb47959a4028b4a36/html5/thumbnails/38.jpg)
MEMBER/2
member(X,[X|T]).member(X,[H|T]):- member(X,T).
?- member(zed,[yolanda,trudy,vincent,jules]).no?-
![Page 39: Prolog -Cpt114 - Week3](https://reader033.vdocument.in/reader033/viewer/2022061302/54907a7cb47959a4028b4a36/html5/thumbnails/39.jpg)
MEMBER/2
member(X,[X|T]).member(X,[H|T]):- member(X,T).
?- member(X,[yolanda,trudy,vincent,jules]).
![Page 40: Prolog -Cpt114 - Week3](https://reader033.vdocument.in/reader033/viewer/2022061302/54907a7cb47959a4028b4a36/html5/thumbnails/40.jpg)
MEMBER/2
member(X,[X|T]).member(X,[H|T]):- member(X,T).
?- member(X,[yolanda,trudy,vincent,jules]).X = yolanda;X = trudy;X = vincent;X = jules;no
![Page 41: Prolog -Cpt114 - Week3](https://reader033.vdocument.in/reader033/viewer/2022061302/54907a7cb47959a4028b4a36/html5/thumbnails/41.jpg)
CONCATENATION OF LISTS
For concatenation we first define our rule.
Step 1: if the first list is emptyconc([],L,L).Step2: if first list is not emptyconc(L1,L2,L3)=> conc([X|L1],L2,[X|
L3]):-
conc(L1,L2,L3).
![Page 42: Prolog -Cpt114 - Week3](https://reader033.vdocument.in/reader033/viewer/2022061302/54907a7cb47959a4028b4a36/html5/thumbnails/42.jpg)
L1X L2
[X|L1]
L3
L3X
L3
![Page 43: Prolog -Cpt114 - Week3](https://reader033.vdocument.in/reader033/viewer/2022061302/54907a7cb47959a4028b4a36/html5/thumbnails/43.jpg)
SAMPLE OF CONCATENATION
conc([a],[c,d],L).L = [a, c, d].
![Page 44: Prolog -Cpt114 - Week3](https://reader033.vdocument.in/reader033/viewer/2022061302/54907a7cb47959a4028b4a36/html5/thumbnails/44.jpg)
LENGTH OF A LIST IN PROLOG
len([],0). %% not a Prolog native predicate!len([_|L],N):- len(L,X), N is X + 1.
?- len([a,b,c,d,e,[a,x],t],X).X=7yes?-
![Page 45: Prolog -Cpt114 - Week3](https://reader033.vdocument.in/reader033/viewer/2022061302/54907a7cb47959a4028b4a36/html5/thumbnails/45.jpg)
SIMPLE TRACE
![Page 46: Prolog -Cpt114 - Week3](https://reader033.vdocument.in/reader033/viewer/2022061302/54907a7cb47959a4028b4a36/html5/thumbnails/46.jpg)
SIMPLE TRACE
![Page 47: Prolog -Cpt114 - Week3](https://reader033.vdocument.in/reader033/viewer/2022061302/54907a7cb47959a4028b4a36/html5/thumbnails/47.jpg)
SIMPLE TRACE
![Page 48: Prolog -Cpt114 - Week3](https://reader033.vdocument.in/reader033/viewer/2022061302/54907a7cb47959a4028b4a36/html5/thumbnails/48.jpg)
COME OUT OF TRACE
![Page 49: Prolog -Cpt114 - Week3](https://reader033.vdocument.in/reader033/viewer/2022061302/54907a7cb47959a4028b4a36/html5/thumbnails/49.jpg)
GUI TRACER
![Page 50: Prolog -Cpt114 - Week3](https://reader033.vdocument.in/reader033/viewer/2022061302/54907a7cb47959a4028b4a36/html5/thumbnails/50.jpg)
GUI TRACER