Professional Documents
Culture Documents
Nguyn B Dip B mn KHMT Khoa CNTT&TT i hc Cn Th Tp hp d liu c th t. C th khng c phn t hoc c nhiu phn t, cc phn t c khai bo bn trong ngoc vung v ngn cch bi du phy. [a] danh sch mt phn t [] danh sch rng
1 2 1 3 2
[34,tom,[2,3]] danh sch 3 phn t v phn t th 3 l mt danh sch c 2 phn t. Danh sch c th hp nht vi bin
|?- [Any, list, of elements] = X. X = [Any, list, of elements]? yes
nbdiep@cit.ctu.edu.vn 1 nbdiep@cit.ctu.edu.vn C2.1: Danh sch 2
Head phi hp nht c vi mt term. Tail hp nht vi mt danh sch c s phn t bt k, k c danh sch rng, [].
|?-[] = [H|T]. no
nbdiep@cit.ctu.edu.vn
nbdiep@cit.ctu.edu.vn
S dng quy
quy gip chng trnh r rng v d hiu hn.
Ti sao ta phi vit li on code m ta vit?
Cho php Prolog thc hin tm kim phc tp trong khng gian cc li gii nhng khng cn thit k gii thut ring.
nbdiep@cit.ctu.edu.vn
nbdiep@cit.ctu.edu.vn
C2.2: quy v x l kt qu
Hi t khi quy
chc chn v t s dng trng hp quy phi chuyn vn gn ti li gii hn. Khi x l danh sch ta c th b qua Head v quy phn Tail ca danh sch.
is_a_list([_|T]):is_a_list(T). Phn u c thay th bi bin v danh v khng cn s dng na
nh ngha cch gii quyt hoc chia nh vn c gi l trng hp quy recursive case:
is_a_list([_|T]):is_a_list(T).
N lp v tn v mnh quy khng hi t ( do n chia hng tm kim). Nu v t is_older/2 khng thy t tin, n s quy chnh n.
nbdiep@cit.ctu.edu.vn C2.2: quy v x l kt qu 9
thu nh khng gian li gii chng ta nn kim tra Young c ph huynh trc khi quy. Theo hng ny chng trnh s khng tm li gii khng hin hu.
nbdiep@cit.ctu.edu.vn C2.2: quy v x l kt qu 10
member(H,[ _|T]):member(H,T).
1) member(H,[H|_]). 2) member(H,[_|T]):member(H,T).
C2.2: quy v x l kt qu
nbdiep@cit.ctu.edu.vn
C2.2: quy v x l kt qu
11
nbdiep@cit.ctu.edu.vn
12
B lu vt trong Prolog
S dng v t trace trong c ch dng lnh Prolog hin th lu vt qu trnh thc thi ca Prolog. Prolog s hin th:
Li gii no c tm n v vi i s no, Tm li gii thnh cng khng (Exit), C phi thc hin li khng hay tht bi.
Lu vt Member/2
| ?- trace. | ?- member(ringo,[john,paul,ringo,george]). 1 1 Call: member(ringo,[john,paul,ringo,george]) ? 2 2 Call: member(ringo,[paul,ringo,george]) ? 3 3 Call: member(ringo,[ringo,george]) ? 3 3 Exit: member(ringo,[ringo,george]) ? 2 2 Exit: member(ringo,[paul,ringo,george]) ? 1 1 Exit: member(ringo,[john,paul,ringo,george]) ? yes | ?- member(stuart,[john,paul,ringo,george]). 1 1 Call: member(ringo,[john,paul,ringo,george]) ? 2 2 Call: member(ringo,[paul,ringo,george]) ? 3 3 Call: member(ringo,[ringo,george]) ? 4 4 Call: member(stuart,[george]) ? 5 Call: member(stuart,[]) ? [ ] khng so khp [H|T] 5 5 5 Fail: member(stuart,[]) ? 4 4 Fail: member(stuart,[george]) ? 3 3 Fail: member(ringo,[ringo,george]) ? 2 2 Fail: member(ringo,[paul,ringo,george]) ? 1 1 Fail: member(ringo,[john,paul,ringo,george]) ? no
tt b lu vt cn g notrace.
nbdiep@cit.ctu.edu.vn
C2.2: quy v x l kt qu
13
nbdiep@cit.ctu.edu.vn
C2.2: quy v x l kt qu
14
Thu nhp kt qu x l
C 3 cch ly li gii khi x l d liu trong Prolog:
1. X l kt qu trng hp dng v truyn kt qu quay lui. 2. Lu kt qu tch ly khi quy v xut kt qu ra trng hp dng. 3. quy trn bin cha gn v tch ly khi quay lui.
X l t di ln
nh ngha v t length/2,i s u tin l danh sch cn kim tra, i s th 2 nhn kt qu tr v s phn t ca danh sch . Ta c th s dng quy lp qua cc phn t ca danh sch. S dng v t is/2 m s phn t.
listlength([_|T],N1):listlength(T,N), N1 is N+1.
nbdiep@cit.ctu.edu.vn
C2.2: quy v x l kt qu
15
nbdiep@cit.ctu.edu.vn
C2.2: quy v x l kt qu
16
Lu vt x l t di ln
listlength([],0). listlength([_|T],N1):listlength(T,N), N1 is N+1. | ?- listlength([a,b,c],N). 1 1 Call: listlength([a,b,c],_489) ? 2 2 Call: listlength([b,c],_1079) ? 3 3 Call: listlength([c],_1668) ? 4 4 Call: listlength([],_2257) ? 4 4 Exit: listlength([],0) ? 5 4 Call: _1668 is 0+1 ? 5 4 Exit: 1 is 0+1 ? 3 3 Exit: listlength([c],1) ? 6 3 Call: _1079 is 1+1 ? 6 3 Exit: 2 is 1+1 ? 2 2 Exit: listlength([b,c],2) ? 7 2 Call: _489 is 2+1 ? 7 2 Exit: 3 is 2+1 ? 1 1 Exit: listlength([a,b,c],3) ? N = 3 ? yes
nbdiep@cit.ctu.edu.vn C2.2: quy v x l kt qu 17
_= A, T=[b,c], N1=N0
| ?- listlength([a,b,c],N0).
N0 is Na+1. N0 is 2+1.
X l t di ln
listlength([],0). listlength([_|T],N1):N1 is N+1, listlength(T,N). |?-listlength([a,b,c],X). Instantiation error in is/2 fail listlength([],_). listlength([_|T],N):N1 is N+1, listlength(T,N1). |?-listlength([a,b,c],0). 1 Call: listlength([a,b,c],0) ? 2 2 Call: _1055 is 0+1 ? 2 2 Exit: 1 is 0+1 ? 3 2 Call: listlength([b,c],1) ? 4 3 Call: _2759 is 1+1 ? 4 3 Exit: 2 is 1+1 ? 5 3 Call: listlength([c],2) ? 6 4 Call: _4463 is 2+1 ? 6 4 Exit: 3 is 2+1 ? 7 4 Call: listlength([],3) ? 7 4 Exit: listlength([],3) ? 5 3 Exit: listlength([c],2) ? 3 2 Exit: listlength([b,c],1) ? 1 1 Exit: listlength([a,b,c],0)? yes
C2.2: quy v x l kt qu 19
Tch ly gi tr
Tch ly kt qu trong khi quy, thu kt qu cui cng trng hp dng.
listlength([],Acc,Acc).
Kt qu cui cng.
nbdiep@cit.ctu.edu.vn
nbdiep@cit.ctu.edu.vn
C2.2: quy v x l kt qu
20
Tch ly gi tr (2)
listlength([a,b,c],0,N). 1 1 Call: listlength([a,b,c],0,_501) ? 2 2 Call: _1096 is 0+1 ? 2 2 Exit: 1 is 0+1 ? 3 2 Call: listlength([b,c],1,_501) ? 4 3 Call: _2817 is 1+1 ? listlength([],A,A). 4 3 Exit: 2 is 1+1 ? listlength([_|T],A,O):5 3 Call: listlength([c],2,_501)? A1 is A+1, listlength(T,A1,O). 6 4 Call: _4538 is 2+1 ? 6 7 7 5 3 1 N = 3 ? yes 4 4 4 3 2 1 Exit: Call: Exit: Exit: Exit: Exit: 3 is 2+1 ? listlength([],3,_501) ? listlength([],3,3) ? listlength([c],2,3) ? listlength([b,c],1,3) ? listlength([a,b,c],0,3) ?
S dng v t ph tr
Thm v t ph tr xut gi tr b m.
listlength(List,Length):listlength2(List,0,Length). listlength2([],A,A). listlength2([_|T],A,O):A1 is A+1, listlength2(T,A1,O). Khi ng b m
V t ph tr
nbdiep@cit.ctu.edu.vn
C2.2: quy v x l kt qu
21
nbdiep@cit.ctu.edu.vn
C2.2: quy v x l kt qu
22
Kt hp danh sch
Thng thng b tch ly c s dng nht xy dng danh sch. Nu ta mun to mt danh sch mi kt hp t 2 danh sch c ta khng th gn danh sch 1 cho phn u danh sch mi v danh sch 2 cho phn ui danh sch mi c:
| ?- L1=[a,b], L2=[c,d], Z=[L1|L2]. L1 = [a,b], L2 = [c,d], Z = [[a,b],c,d] ?
thm danh sch 1 vo 2 bng quy ta c th s dng du x dc phn tch tng phn t trong L1 v thm vo L2.
pred([H|T],L2,Out):pred(T,[H|L2],Out).
B tch ly
Ta cn ly tng phn t trong danh sch mt v thm vo danh sch hai. C 2 phng n thc hin: quy Quay lui tr kt qu.
nbdiep@cit.ctu.edu.vn C2.2: quy v x l kt qu 23
reverse/3
| ?- pred([a,b],[c,d],Out). 1 1 Call: pred([a,b],[c,d],_515) ? 2 2 Call: pred([b],[a,c,d],_515) ? 3 3 Call: pred([],[b,a,c,d],_515) ? 3 3 Exit: pred([],[b,a,c,d],[b,a,c,d]) ? 2 2 Exit: pred([b],[a,c,d],[b,a,c,d]) ? 1 1 Exit: pred([a,b],[c,d],[b,a,c,d]) ? Out = [b,a,c,d] ? yes Nu bn to danh sch theo reverse([],L2,L2). reverse([H|T],L2,Out):reverse(T,[H|L2],Out).
nbdiep@cit.ctu.edu.vn
| ?- pred([a,b],[c,d],Out). 1 1 Call: pred([a,b],[c,d],_515) ? 2 2 Call: pred([b],[a,c,d],_515) ? 3 3 Call: pred([],[b,a,c,d],_515) ? 3 3 Exit: pred([],[b,a,c,d],[b,a,c,d]) ? 2 2 Exit: pred([b],[a,c,d],[b,a,c,d]) ? 1 1 Exit: pred([a,b],[c,d],[b,a,c,d]) ? Out = [b,a,c,d] ? yes pred([],L2,L2). pred([H|T],L2,Out):pred(T,[H|L2],Out). Nu bn to danh sch theo qu trnh quy theo code bn th danh sch mi s c cc phn t mi th t ngc
nbdiep@cit.ctu.edu.vn
C2.2: quy v x l kt qu
25
C2.2: quy v x l kt qu
26
append/3
Thit k trng hp dng: truyn L2 ra bin danh sch Out. Danh sch ny s thm Cc phn t L1 vo trong qu trnh quay lui. pred([],L2,L2).
Trng hp dng: Khi L1 ht phn t th to danh sch mi tng ng v truyn ra danh sch Out.
| ?- pred2([a,b],[c,d],Out). 1 1 Call: pred2([a,b],[c,d],_515) ? 2 2 Call: pred2([b],[c,d],_1131) ? 3 3 Call: pred2([],[c,d],_1702) ? 3 3 Exit: pred2([],[c,d],[c,d]) ? 2 2 Exit: pred2([b],[c,d],[b,c,d]) ? 1 1 Exit: pred2([a,b],[c,d],[a,b,c,d]) ? Out = [a,b,c,d] ? yes append([],L2,L2). append([H|T],L2,[H|Rest]):append(T,L2,Rest). * append/3 l v t ngi dng thng nh ngha khi x
Bin thay i mi ln c gi
l danh sch.
nbdiep@cit.ctu.ed u.vn C2.2: quy v x l kt qu 27 nbdiep@cit.ctu.edu.vn C2.2: quy v x l kt qu 28
( [H=a,T=b],L2=[c,d],Out=[a|Rest0] )
append vs reverse
C 2 v t reverse/3 and append/3 c th s dng ngc to danh sch t hiu ca 2 danh sch. y cng l mt cch hay loi b phn t trong danh sch.
| ?- append(X,Y,[a,b,c,d]). X = [], Y = [a,b,c,d] ? ; append([],L2,L2). X = [a], Y = [b,c,d] ? ; append([H|T],L2,[H|Rest]):X = [a,b], Y = [c,d] ? ; append(T,L2,Rest). X = [a,b,c], Y = [d] ? ; X = [a,b,c,d], Y = [] ? ; no |?-append(X,[c,d],[a,b,c,d]). X = [a,b] ? ; no
(H=b,T=[],L2=[c,d],Rest0=[b|Rest1]
append([b],[c,d],Rest0). Rest0 =[b| [c,d] ] append([],[c,d],Rest1). Rest1 = [c,d] append([],[c,d],Rest1). Rest1 = [c,d]
12/12/2012
29
nbdiep@cit.ctu.edu.vn
C2.2: quy v x l kt qu
30
append vs reverse
. C 2 v t reverse/3 and append/3 c th s dng ngc
to danh sch t hiu ca 2 danh sch. y cng l mt cch hay loi b phn t trong danh sch
Built-in Predicates
var/1 nonvar/1 atom/1 atomic/1 number/1 integer/1 float/1 compound/1 ground/1 =../2 functor/3 arg/3 findall/3 setof/3 bagof/3
nbdiep@cit.ctu.edu.vn
| ?- reverse(X,Y,[a,b,c,d]). X = [], Y = [a,b,c,d] ? ; X = [a], Y = [b,c,d] ? ; X = [b,a], Y = [c,d] ? ; X = [c,b,a], Y = [d] ? ; X = [d,c,b,a], Y = [] ? ; *loop* |?-reverse([d,c,b,a],Y,[a,b,c,d]). Y = [] ? yes
reverse([],L2,L2). reverse([H|T],L2,Out):reverse(T,[H|L2],Out).
Thu tt c cc li gii
nbdiep@cit.ctu.edu.vn
C2.2: quy v x l kt qu
31
C2.3: V t dng sn
32
Identifying Terms
var(X) thnh cng nu X hin l bin cha hp nht vi gi tr bt k.
Thnh cng nu X khng phi bin hoc l bin hp nht True nu X l mt atom True nu X l kiu s ( s nguyn hoc s thc)
nonvar(X)
Ngc li, nonvar/1 thnh cng nu X khng phi bin hoc l bin hp nht. | ?-nonvar([X]). true ? yes
)
float(X) atomic(X) compound(X) ground(X)
11/10/04
True nu X l kiu s nguyn True nu X l kiu s thc True nu X l kiu s hoc l atom True nu X l kiu cu trc Thnh cng nu X khng cha bin cha hp nht no
AIPP Lecture 6: Built-in Predicates 33
atom(X) True nu X l mt atom: term khng phi bin vi 0 i s, v khng phi kiu s
| ?- atom(paul). | ?- X = paul,atom(X). | ?- atom([]). yes X = paul ? yes | ?-atom([a,b]). no
nbdiep@cit.ctu.edu.vn C2.3: V t dng sn 34
xc nh s l kiu g th s dng:
integer(X) True nu X l kiu s nguyn (thuc s nguyn dng hoc nguyn m, k c s 0). float(X) True nu X l kiu s thc.
| ?- integer(5). yes | ?- float(5). no | ?- integer(5.46). no | ?- float(5.46). yes
Nu atomic/1 fails th term kim tra c th l bin cha hp nht (kim tra vi v t var/1) hoc term phc hp :
|?-compound([]). |?-compound([a]). |?-compound(b(a)). no yes yes
ground(X) Thnh cng nu X khng cha bin cha hp nht no ( Kim tra c bn trong term phc hp).
|?-ground(X). no |?-ground(a). yes |?-ground(a(b,X)). no |?-ground([a,b,c]). yes
C2.3: V t dng sn 36
nbdiep@cit.ctu.edu.vn
C2.3: V t dng sn
35
nbdiep@cit.ctu.edu.vn
|?-functor(t(f(X),a,T),Func,N). |?-arg(2,t(t(X),[]),A). N = 3, Func = t ? A = [] ? yes yes | ?- functor(D,date,3), arg(1,D,11), arg(2,D,oct), arg(3,D,2004). D = date(11,oct,2004) ? yes
nbdiep@cit.ctu.edu.vn C2.3: V t dng sn 37 nbdiep@cit.ctu.edu.vn C2.3: V t dng sn 38
Thu ht cc li gii
Thu ht li gii bng cch g du ; ti du ngt trong terminal:
| ?- member(X, [1,2,3,4]). X = 1 ? ; X = 2 ? ; X = 3 ? ; X = 4 ? ; no
Siu v t (Meta-predicates)
findall/3, setof/3, v bagof/3 u l Siu v t (meta-predicates) Chng iu khin chin thut chng minh ca Prolog.
findall(X,P,L) setof(X,P,L) Tt c danh sch dn xut L ca tt c bin bagof(X,P,L) X m tha mn mc tiu P
Liu c cch sinh ra tt c li gii bn trong chng trnh khng? <= chuyn nghip hn! C 3 v t dng sn:
findall/3 setof/3 bagof/3
nbdiep@cit.ctu.edu.vn C2.3: V t dng sn 39
(v d: age(X,Age)). Chng s lin tc gi n mc tiu P, hp nht bin X vi P v thm n vo danh sch L. C 3 s thnh cng khi khng cn li gii. M phng chnh xc nh ta lin tc lp li du ; ti du ngc trong terminal tm tt c cc li gii.
nbdiep@cit.ctu.edu.vn C2.3: V t dng sn 40
findall/3
findall/3 c bnh chn l v t d s dng nht trong c 3:
| ?- findall(X, member(X, [1,2,3,4]), Results). Results = [1,2,3,4] yes
findall/3 (2)
C th s dng findall/3 theo nhiu cch. i s th 2 l mc tiu (c th l mc tiu phc hp):
| ?- findall(X, (member(X, [1,2,3,4]), X > 2), Results). Results = [3,4]? yes
C th c l: tm tt c X vi X l mt phn t ca danh sch [1,2,3,4]v t n vo danh sch kt qu Results'. Cc li gii s c lu trong danh sch kt qu theo th t m Prolog tm ra. Lu c li gii b trng, nu c v hn li gii v t findall/3 s khng dng li!
nbdiep@cit.ctu.edu.vn C2.3: V t dng sn 41
nbdiep@cit.ctu.edu.vn
C2.3: V t dng sn
42
setof/3
setof/3 hot ng rt ging findall/3, tr 2 iu:
N sinh ra tp cc kt qu, khng c kt qu trng v cc kt qu c sp xp. Bt c bin no s dng trong mc tiu s khng xut hin trong i s th nht, setof/3 tr v tng kt qu mi khi hp nht c vi bin :
|?-setof(Child, age(Child,Age),Results). Age = 5, Results = [ann,tom] ? ; Age = 7, Results = [peter] ? ; Age = 8, Results = [pat] ? ; no
setof/3 (2)
Chng ta c th lng li gi vo setof/3 thu tt c cc kt qu c lp:
| ?- setof(Age/Children, setof(Child,age(Child,Age), Children), AllResults). AllResults = [5/[ann,tom],7/[peter],8/[pat]] ? yes
age(peter, 7). age(ann, 5). age(pat, 8). age(tom, 5). age(ann, 5). C s tri thc
nbdiep@cit.ctu.edu.vn
C2.3: V t dng sn
43
nbdiep@cit.ctu.edu.vn
C2.3: V t dng sn
44
bagof/3
bagof/3 kh ging setof/3 ngoi tr: Danh sch kt qu tr v c th b trng, Kt qu khng c sp xp.
| ?- bagof(Child, age(Child,Age),Results). Age = 5, Results = [tom,ann,ann] ? ; Age = 7, Results = [peter] ? ; Age = 8, Results = [pat] ? ; no
Tng hp li
V t s dng trn danh sch:
S dng b tch ly dng li kt qu trong qu trnh quy: reverse/3 Xy dng kt qu trong qu trnh quay lui: append/3
bagof/3 khc findall/3 ch n sinh ra cc kt qu c lp cho tt c cc bin trong mc tiu m khng xut hin i s u tin.
| ?- findall(Child, age(Child,Age),Results). Results = [peter,pat,tom,ann,ann] ? ; no
nbdiep@cit.ctu.edu.vn C2.3: V t dng sn 45
Thu cc li gii
findall/3, setof/3, bagof/3
nbdiep@cit.ctu.edu.vn
C2.3: V t dng sn
46
nbdiep@cit.ctu.edu.vn
47
nbdiep@cit.ctu.edu.vn
48
Ch chp nhn term ca Prolog nn d liu chui phi c bao ng trong du nhy n.
?- write(Hello World). syntax error ?- write(Hello World). Hello World yes
nbdiep@cit.ctu.edu.vn
49
nbdiep@cit.ctu.edu.vn
50
Xut k t ASCII
Ngoi cch vit c php bng chui c th s dng m ASCII (xem http://www.asciitable.com/). M ASCII l mt s t 1 n 127 thay th cho k t nh my.
A-Z = 65-90 a-z = 97-122 put/1 nhn i s l m ASCII v vit ra k t tng ng ln lung xut.
| ?- put(65),put(44),put(66),put(46). A,B. yes
M ASCII
nbdiep@cit.ctu.edu.vn
51
nbdiep@cit.ctu.edu.vn
52
| ?- X='Bob', writelist2(['The',man,was,called,X]). The man was called Bob. X = 'Bob' ? ; no | ?- writefacts([[big,blue],[tickled,pink]]). big(blue). tickled(pink). yes
53
nbdiep@cit.ctu.edu.vn
54
tell(Filename). tell(path/from/current/dir/to/Filename). V t s ni vi Prolog gi tt c d liu xut ra file. Nu file cha tn ti th n s c to ra, nu file c th s b ghi . Xc nh lung xut ang s dng bng v t telling/1. Prolog s chuyn lung xut n file cho ti khi : S dng tell/1 m lung mi ng lung ang s dng (file) bng v t told/0 . Sau khi ng lung xut s tr v lung xut chun (ngi dng).
| ?- write('Write to terminal'). Write to terminal yes | ?- telling(X). X = user ? yes | ?- tell('demo/test'). yes file to hoc b ghi thnh cng | ?- telling(X). X = 'demo/test' ? yes | ?- write('Now where does it go?'). yes d liu s cha xut hin trong file cho ti khi | ?- told. yes file c ng li. | ?- write('Oh, here it is!'). Oh, here it is! yes
nbdiep@cit.ctu.edu.vn
55
nbdiep@cit.ctu.edu.vn
56
V t nhp: read/1
Lung nhp chun l lung nhp t terminal ngi dng. Ta c th nhp term t dng lnh bng v t read/1. Ti dng lnh s hin th du |: v i ngi dng nhp 1 term vo (km theo du chm full-stop).
| ?- write('What is your name?'), nl, read(X), write('Greetings '), write(X). What is your name? |: tim. Greetings tim X = tim ? yes
V t name/2
S dng v t name/2 cng c th c bin theo m ASCII. V t name/2 s chuyn bt k term ca Prolog ( ngoi tr bin) ra m ASCII.
|?- name(aAbB,L). L = [97,65,98,66] ? yes |?- X=Make me ASCII, name(X,L). L = [77,97,107,101,32,109,101,32,65,83,67,73,73], yes
Hu dng khi phn on cu hoc to d liu nhp cho b chuyn DCG (chng 4).
nbdiep@cit.ctu.edu.vn C2.4 Xut nhp trong Prolog 59 nbdiep@cit.ctu.edu.vn C2.4 Xut nhp trong Prolog 60
V t get
Ta c th c tng k t thay cho vic c ton b term get0/1 (= get-zero) c mt k t t lung nhp hin hnh v tr v m ASCII ca k t.
| ?- get0(X). |: A X = 65? yes | ?- get0(X). |: h X = 32? Khong trng M ASCII ca khong trng
V t see/1
get/1 v get0/1 thng c s dng khi x l file vn bn. read/1 ch c th c term v th khng th c file cha vn bn. get/1 v get0/1 c tng k t v tr v m ASCII bt lun. see/1 chuyn lung nhp t file thay v nhp t ngi dng see(Filename). see(path/from/current/dir/to/Filename). seeing/1 hin th lung nhp ang s dng. File s c xem l ngun nhp cho n khi: M mt ngun nhp khc (s dng see/1) ng ngun nhp hin hnh bng seen/0 v tr v lung nhp t ngi dng.
nbdiep@cit.ctu.edu.vn AIPP Lecture 12: I/O 62
V t read
Khi ch nhp t file vn cn kch hot ta c th s dng x l ni dung ca n. Nu file nhp c cha term th ta ch c th c tun t 1 term.
|?X = Y = Z = yes
File c x l theo th t v b din dch nh term mi nn mi li gi read/1 s c term tip theo. c tip tc cho n khi end_of_file hoc nhp seen/0.
nbdiep@cit.ctu.edu.vn
63
nbdiep@cit.ctu.edu.vn
64
(2146079208).
Vd: open(demo/test,append,Stream). Lung s c khi to khi file c m, sau file s tham chiu s dng con tr lung (th m Lung hp nht), khng phi l tn lung.
nbdiep@cit.ctu.edu.vn
65
nbdiep@cit.ctu.edu.vn
66
ng lung vi v t close/1
Khi s dng file lm lung xut, file ch thay i khi ng lung (s dng close/1).
| ?- open('demo/test1',write,Test), write(Test,'Hello'), close(Test). Test = '$stream'(2146079648) ? yes
S dng file lm lung xut nhp l phng thc truyn thng (nhng ph bin) xut-nhp d liu trong Prolog mc d phng thc ny c mt gii hn.
nbdiep@cit.ctu.edu.vn
67
nbdiep@cit.ctu.edu.vn
68
nbdiep@cit.ctu.edu.vn
69