Professional Documents
Culture Documents
Huong Dan SWI-Prolog
Huong Dan SWI-Prolog
L p trnh Logic
H NG D N SWI-PROLOG
(Version 5.6.64)
1. Bi h ng d n 1: Ci t SWI-Prolog
B c 1. Vo trang Web c a SWI-Prolog: http://www.swi-prolog.org/. T i file ci t SWI-Prolog cho Windows (version 5.6.64): http://www.swi-
prolog.org/download/stable/bin/w32pl5664.exe, dung l ng kho ng 6.79 MB. Lu l t i ng b n ci t cho Windows v SWI-Prolog cn nhi u b n ci t cho cc platform khc n a. B c 2. Ch y file ci t w32pl5664.exe b t u ci t SWI-Prolog cho Windows.
B c 3. Nh n I Agree, sau nh n Next trong h p tho i k . Dung l ng a tr ng yu c u kho ng 23.3 MB. V Qu c Hong Tp. HCM, 2/2009 Page 1
H ng d n SWI-Prolog
L p trnh Logic
B c 5. Nh n Next. Trong h p tho i ny ta ch n ui cho file ngu n Prolog (l pl hay pro). Ta ch n pl n u nh khng c file type no ng k ui ny (file ngu n c a Perl cng dng ui pl), n u khng th ch n pro. y ch n pl.
V Qu c Hong
Page 2
L p trnh Logic
trnh, dll v cc file khc c a SWI-Prolog. Sau y l m t s file v th m c quan tr ng: {SWI-Prolog}\bin: ch a cc file th c thi, dll c a SWI-Prolog. Trong file {SWI-Prolog}\bin\plwin.exe l file chng trnh th c thi c a SWIProlog. File {SWI-Prolog}\bin\plcon.exe l file chng trnh ch y trong Console. {SWI-Prolog}\library: ch a cc file ngu n c a cc th vi n SWI-Prolog. {SWI-Prolog}\doc: ch a ti li u h ng d n d ng Web. Khi ch y SWIProlog, ta c th truy nh p Help Online manual nh n c gip v i n i dung tng t nhng trong c a s Help c a SWI-Prolog. Ta cng c th download d ng pdf c a ti li u h ng d n ny trn trang Web c a SWI-Prolog (http://www.swi-prolog.org/download/stable/doc/SWI-
Prolog-5.6.59.pdf). {SWI-Prolog}\demo: ch a cc file ngu n demo c a SWI-Prolog. Trong c file {SWI-Prolog}\demo\likes.pl l m t file ngu n demo. File ngu n SWI-Prolog c ui pl (nh ch n B c 5), ch a khai bo c a cc
s ki n cng nh cc lu t, cho Knowledge Base (trong Ph n h ng d n ti p chng ta vi t t t l KB). Cc file ny c g n v i plwin.exe. Khi m file ngu n Prolog th plwin.exe s ch y, SWI-Prolog s t th m c lm vi c l th m c ch a file ny v n p cc s ki n, cc lu t, trong file ny vo KB.
V Qu c Hong
Page 3
H ng d n SWI-Prolog
L p trnh Logic
2. Bi h ng d n 2: Truy v n
Ch y chng trnh SWI-Prolog (file th c thi plwin.exe) chng ta c giao di n chnh c a SWI-Prolog nh hnh sau
Sau l i cho m ng v gi i thi u l d u nh c i truy v n. Chng ta g cu truy v n vo sau d u nh c truy v n c a SWI-Prolog. D u nh c c a Prolog c d ng n ?- v i n l s th t c a cu truy v n hi n t i. Chng ta g cu truy v n, r i n d u ch m . v nh n Enter th c hi n truy v n. N u cu truy v n sai c php hay c l i th i gian ch y th SWI-Prolog s a ra thng bo l i. N u khng, SWI-Prolog s tr l i truy v n. N u m t truy v n c nhi u l i gi i th b n g ; xem cc l i gi i khc. N u khng th nh n Enter k t thc tr l i truy v n v sang cu truy v n khc. Chng ta c th chia cc truy v n SWI-Prolog ra lm hai lo i:
V Qu c Hong
Page 4
H ng d n SWI-Prolog
L p trnh Logic
Lo i truy v n m chng ta trng i vo k t qu h p nh t (hay tm ki m l i gi i c a) SWI-Prolog. Th ng th truy v n lo i ny c ch a cc bi n v c th c nhi u gi tr h p nh t cho bi n. Lo i truy v n m chng ta trng ch vo cc hi u ng l (side-effect) SWI-Prolog th c hi n m t cng vi c no . Th ng th truy v n lo i ny khng ch a bi n v ta c th g i n l l nh. B c 1. Nh p p file {SWI-Prolog}\demo\likes.pl ch y SWI-Prolog v n p cc s ki n, lu t trong file ngu n ny vo KB. B c 2. Truy v n listing xem cc s ki n v lu t trong KB. 1 ?- listing. italian(pizza). italian(spaghetti). likes(sam, A) :indian(A), mild(A). likes(sam, A) :chinese(A). likes(sam, A) :italian(A). likes(sam, chips). mild(dahl). mild(tandoori). mild(kurma). chinese(chow_mein). chinese(chop_suey). chinese(sweet_and_sour). indian(curry). indian(dahl). indian(tandoori). V Qu c Hong Tp. HCM, 2/2009 Page 5
H ng d n SWI-Prolog indian(kurma). true. B c 3. Truy v n mild(dahl). 2 ?- mild(dahl). true. B c 4. Truy v n mild(curry). 3 ?- mild(curry). false. B c 5. Truy v n indian(X). 4 ?- indian(X). X = curry B c 6. G ; xem l i gi i khc. 4 ?- indian(X). X = curry ; X = dahl B c 7. G Enter d ng truy v n hi n t i. 4 ?- indian(X). X = curry ; X = dahl .
L p trnh Logic
B c 8. Truy v n likes(sam, X). V dng ; xem t t c cc l i gi i. 5 X X X X X X ?- likes(sam, X). = dahl ; = tandoori ; = kurma ; = chow_mein ; = chop_suey ; = sweet_and_sour ; Tp. HCM, 2/2009 Page 6
V Qu c Hong
L p trnh Logic
B c 9. Truy v n !!. g i l i truy v n tr c . Sau nh n Enter d ng cc h p nh t khc. 6 ?- !!. likes(sam, X). X = dahl . B c 10. Truy v n h. hi n th danh sch cc truy v n g i. 7 ?- h. 1 2 3 4 5 6
V Qu c Hong
Page 7
H ng d n SWI-Prolog
L p trnh Logic
hello :-
H ng d n SWI-Prolog
L p trnh Logic
B c 6. Nh p l nh n File Edit s a m t file ngu n. Trong h p tho i Edit existing file ch n file hello.pl s a file ny. Trong Editor s a n i dung file ny thnh nh sau hello(X) :- write('Hello '), write(X). Sau lu l i v ng Editor. B c 7. Nh p l nh n File Reload modified files n p l i file ngu n v SWI-Prolog khng t n p l i. Truy v n listing th y nh ng thay i ny. 3 ?- listing. hello(A) :write('Hello '), write(A). true. B c 8. Truy v n hello(nam) th y cng vi c c a v t hello/1. V t ny in ra dng ch Hello r i n i s ta g i vo. 4 ?- hello(nam). Hello nam true. B c 9. Nh p l nh n File Navigator m c a s Prolog Navigator. Tm n nt c a file ngu n hello.pl (file ph i trong a ci t SWI-Prolog, c th
dng nt mi tn ln bn tri c a thanh toolbar duy t th m c). Ta th y trong nt ny ch a nt hello/1 cho lu t c a chng ta, chng ta cng th y r ng nt ny c nt con write/1 ch hello/1 ph thu c vo write/1.
V Qu c Hong
Page 9
H ng d n SWI-Prolog
L p trnh Logic
Lu : Khi n p file ngu n b ng l nh n File Consult th SWI-Prolog s thm cc lu t v s ki n c a file m i vo KB hi n t i ch khng xa n i dung c a KB v SWI-Prolog s thm file ny vo danh sch cc file m n n p. Do khi nh p l nh n File Reload modified files th ton b cc file ny s c n p l i vo KB. N u ang c c a s SWI-Prolog m m thm file ngu n m i b ng cch nh p p th SWI-Prolog s m file ny trong m t ti n trnh khc (c a s khc) v duy tr cc KB ring l trong t ng ti n trnh. C cc v t trong SWI-Prolog lm cc cng vi c tng ng v i cc l nh trong trnh n File. Cc b n xem trong ti li u tham kh o c a SWI-Prolog bi t c n k v y l cc v t r t hay dng v s c dng trong cc Bi h ng d n d i. + make/0 n p l i cc file n p. V Qu c Hong Tp. HCM, 2/2009 Page 10
L p trnh Logic
+ consult/1 hay d ng vi t g n [File] n p m t file ngu n. L nh n Edit Copy v Edit Paste dng copy hay dn n i dung (bi xanh) vo hay t Clipboard. Ch l phm t t Ctrl + V lm vi c t t nhng Ctrl + C khng c dng cho Copy (Ctrl + C l phm t t c a l nh n Run Interrupt dng ng t l nh ang ch y).
V Qu c Hong
Page 11
H ng d n SWI-Prolog
L p trnh Logic
4. Bi h ng d n 4: Run v Debug
B c 1. Ch y chng trnh SWI-Prolog t file th c thi plwin.exe ( khng c file ngu n no c n p vo KB). Nh p l nh n File New so n m t file ngu n m i. t tn file l descendant.pl v i n i dung sau child(martha,charlotte). child(charlotte,caroline). child(caroline,laura). child(laura,rose). descend(X,Y) :- child(X,Y). descend(X,Y) :- child(X,Z), descend(Z,Y). B c 2. Truy v n consult(descendant) n p file ny vo KB. 1 ?- consult(descendant). % descendant compiled 0.00 sec, 984 bytes true. B c 3. Truy v n trace theo v t qu trnh tm ki m l i gi i c a cu truy v n k . 2 ?- trace. Unknown message: query(yes) [trace] 2 ?B c 4. Truy v n descend(martha, X). 2 ?- trace. Unknown message: query(yes) [trace] 2 ?- descend(martha, X). Call: (7) descend(martha, _G476) ?
V Qu c Hong
Page 12
H ng d n SWI-Prolog B c 5. Nh n Enter
L p trnh Logic
v t, cho n khi m t l i gi i c a ra. 2 ?- trace. Unknown message: query(yes) [trace] 2 ?- descend(martha, X). Call: (7) descend(martha, _G476) ? creep Call: (8) child(martha, _G476) ? creep Exit: (8) child(martha, charlotte) ? creep Exit: (7) descend(martha, charlotte) ? creep X = charlotte B c 6. T i y chng ta nh n Enter k t thc truy v n ho c nh n ; SWIProlog ti p t c theo v t cc l i gi i khc. Nh n ; v sau l Enter cho n khi th y l i gi i th hai th nh n Enter k t thc truy v n. 2 ?- trace. Unknown message: query(yes) [trace] 2 ?- descend(martha, X). Call: (7) descend(martha, _G476) ? creep Call: (8) child(martha, _G476) ? creep Exit: (8) child(martha, charlotte) ? creep Exit: (7) descend(martha, charlotte) ? creep X = charlotte ; Redo: (7) descend(martha, _G476) ? creep Call: (8) child(martha, _L174) ? creep Exit: (8) child(martha, charlotte) ? creep Call: (8) descend(charlotte, _G476) ? creep Call: (9) child(charlotte, _G476) ? creep Exit: (9) child(charlotte, caroline) ? creep Exit: (8) descend(charlotte, caroline) ? creep Exit: (7) descend(martha, caroline) ? creep X = caroline . [debug] 3 ?B c 7. K hi u [debug] tr c d u nh c truy v n cho bi t SWI-Prolog ang trong ch debug. ch debug, SWI-Prolog s d ng cc spy-point, break-point
V Qu c Hong
Page 13
H ng d n SWI-Prolog
L p trnh Logic
hay trace-point v bm thng tin vo cc c ng, gip ch cho qu trnh debug. Chng ta t m t i m spy b ng cch dng v t spy/1. Truy v n spy(child) t i m spy v t child.
[debug] 3 ?- spy(child). % Spy point on child/2 true. B c 8. By gi truy v n descend(X, caroline) th y tc d ng c a v t spy/1. Nh n Enter lin ti p n khi xong truy v n ny. [debug] 4 ?- descend(X, caroline). Call: (8) child(_G487, caroline) ? creep Exit: (8) child(charlotte, caroline) ? creep Exit: (7) descend(charlotte, caroline) ? creep X = charlotte . B c 9. Nh v y ta th y SWI-Prolog d ng cc v t child. V i v t trace/0
SWI-Prolog theo v t t t c cc v t dng trong qu trnh h p nh t goal ti p sau trace v ch goal ny m thi. V i spy/1, chng ta t cc i m spy trn cc v t v SWI-Prolog s lun d ng cc v t ny khi i snh m i goal sau . ng
nhin SWI-Prolog ch d ng khi ang trong ch debug. ki m tra, ta thot kh i ch debug b ng v t nodebug/0. [debug] 5 ?- nodebug. true. 6 ?B c 10. Truy v n descend(X, Y) th y r ng SWI-Prolog khng d ng cc i m spy khi khng ch debug. Nh n ; xem t t c cc h p nh t.
H ng d n SWI-Prolog X = charlotte, Y = caroline ; X = caroline, Y = laura ; X = laura, Y = rose ; X = martha, Y = caroline ; X = martha, Y = laura ; X = martha, Y = rose ; X = charlotte, Y = laura ; X = charlotte, Y = rose ; X = caroline, Y = rose ; false.
L p trnh Logic
B c 11. Truy v n gtrace vo ch debug nhng dng giao di n h a thay v cc dng thng tin d ng text. Chng ta cng c th dng l nh n Debug Graphical debugger v i cng cng d ng. 7 ?- gtrace. % The graphical subsequent tracing true. [debug] 8 ?B c 12. By gi g truy v n descend(X, Y). SWI-Prolog s hi n cng c th c hi n debug trn giao di n h a.
front-end
will
be
used
for
V Qu c Hong
Page 15
H ng d n SWI-Prolog
L p trnh Logic
B c 13. Cc b n nn t nghin c u nhi u v debugger ny v n l m t cng c r t m nh v r t c ch. By gi chng ta c vi c nh n nt c hnh mi tn xu ng (Show unification) cho n khi th y SWI-Prolog a ra m t l i gi i. Nh p chu t vo c a s chnh v nh n ; SWI-Prolog tm l i gi i k ti p v do n l i tri u g i debugger ny v i thng tin i snh m i.
V Qu c Hong
Page 16
H ng d n SWI-Prolog
L p trnh Logic
B c 14. Ti p t c nh n nt c hnh mi tn xu ng (Show unification) cho n khi SWI-Prolog a ra l i gi i th hai. Nh p chu t vo c a s chnh v nh n Enter k t thc truy v n. [debug] 8 ?- descend(X, Y). X = martha, Y = charlotte ; X = charlotte, Y = caroline . [debug] 9 ?B c 15. Chng ta xa cc i m spy trn v t child b ng nospy(child). Hay n gi n dng nospyall/0 xa t t c cc i m spy. [debug] 9 ?- nospyall. V Qu c Hong Tp. HCM, 2/2009 Page 17
L p trnh Logic
B c 16. Chng ta th c hi n truy v n descend(X, Y) v th y r ng khng c thng tin debug no c in ra cng nh debugger h a khng c tri u g i n a. [debug] 10 ?- descend(X, Y). X = martha, Y = charlotte ; X = charlotte, Y = caroline . [debug] 11 ?By gi chng ta s cng tm hi u hai l nh c ch khc trong trnh n Run l Interrupt v New thread. B c 1. Ch y chng trnh SWI-Prolog t file th c thi plwin.exe ( khng c file ngu n no c n p vo KB). Truy v n edit(file(loop.pl)) t o m i file ngu n loop.pl. 1 ?- edit(file('loop.pl')). true. B c 2. Trong Editor, g n i dung c a file ngu n loop.pl nh sau: p(X) :- q(X). q(X) :- p(X). B c 3. Truy v n [loop] n p file ngu n loop.pl vo KB. 2 ?- [loop]. % loop compiled 0.00 sec, 684 bytes true. B c 4. Truy v n p(X). V Qu c Hong Tp. HCM, 2/2009 Page 18
H ng d n SWI-Prolog 3 ?- p(X).
L p trnh Logic
B c 5. V nh ngha vng c a v t p/1 nn SWI-Prolog s ri vo vng l p khng k t thc khi i tm l i gi i cho truy v n trn. ng t qu trnh tm l i gi i cho truy v n trn, chng ta ch n l nh n Run Interrupt. 3 ?- p(X). Action (h for help) ? B c 6. Chng ta c m t s ty ch n l nh khc nhau ng t chng trnh. Nh n h th y cc ty ch n l nh ny. 3 ?- p(X). Action (h for help) ? Options: a: abort b: c: continue e: g: goals t: h (?): help Action (h for help) ?
B c 7. Nh p l nh t (trace) theo v t qu trnh tm l i gi i cho truy v n c a SWI-Prolog. Action (h for help) ? trace continue (trace mode) Call: (3,265,194) q(_G548) Call: (3,265,195) p(_G548) Call: (3,265,196) q(_G548) Call: (3,265,197) p(_G548) Call: (3,265,198) q(_G548) Call: (3,265,199) p(_G548) Call: (3,265,200) q(_G548) Call: (3,265,201) p(_G548) Call: (3,265,202) q(_G548)
? ? ? ? ? ? ? ? ?
V Qu c Hong
Page 19
H ng d n SWI-Prolog
L p trnh Logic
B c 8. Ta th y v t q/1 v p/1 c thay phin nhau c g i. Ta c nh n Enter hoi th dy l i g i trn cng khng k t thc. Ta nh p l nh a (abort) ng t b truy v n. Action (h for help) ? trace continue (trace mode) Call: (3,265,194) q(_G548) Call: (3,265,195) p(_G548) Call: (3,265,196) q(_G548) Call: (3,265,197) p(_G548) Call: (3,265,198) q(_G548) Call: (3,265,199) p(_G548) Call: (3,265,200) q(_G548) Call: (3,265,201) p(_G548) Call: (3,265,202) q(_G548) % Execution Aborted 4 ?-
? ? ? ? ? ? ? ? ?
B c 9. Truy v n q(a). Chng ta bi t r ng SWI-Prolog ti p t c ri vo vng l p khng k t thc. 4 ?- q(a). B c 10. Nh p l nh n Run New thread, SWI-Prolog s hi n m t c a s m i (Thread 2) ch y cng v i c a s chnh (Thread main).
V Qu c Hong
Page 20
H ng d n SWI-Prolog
L p trnh Logic
B c 11. Trong c a s thread m i ny th c hi n truy v n listing. 1 ?- listing. % Foreign: tcp_debug/1 q(A). q(A) :p(A). true. B c 12. Ta th y r ng KB ny gi ng h t nh KB c a thread main. Th c ch t, trong tr ng h p ny ch c m t KB. Cc thread khc nhau s th c hi n cc truy v n c l p nhng chia s cng KB. Nh v y trong khi thread main v n ang cn b n tm l i gi i th chng ta c th dng thread 2 cho cc cng vi c khc. y l cch dng c ch c a thread. Lu r ng vi c dng nhi u thread khc v i vi c chng ta m nhi u chng trnh SWI-Prolog khc nhau (b ng file th c thi plwin.exe hay ch y t ng cc file ngu n SWI-Prolog) v khi ny cc KB l c l p cho t ng process. By gi truy v n halt trong thread 2.
p(A) :-
V Qu c Hong
Page 21
H ng d n SWI-Prolog
L p trnh Logic
2 ?- halt. ERROR: [Thread 2] halt/1: No permission to halt thread `2' (Only from thread `main') 3 ?B c 13. Chng ta th y r ng m t l i th i gian ch y c a ra cho truy v n halt/0. L i ny l do thread 2 khng quy n dng l nh halt/0, ch c thread main m i quy n. Chng ta nh p chu t vo c a s c a thread main v nh n Ctrl + C (phm t t c a l nh n File Interrupt) ng t chng trnh. Nh n ti p l nh e (exit) thot SWI-Prolog. SWI-Prolog s ng c c a s thread main l n thread 2.
V Qu c Hong
Page 22
H ng d n SWI-Prolog
L p trnh Logic
5. Bi h ng d n 5: Setting v Customise
B c 1. Ch y chng trnh SWI-Prolog t file th c thi plwin.exe. Nh p l nh n Settings Font ch n font hi n th cho c a s chnh c a SWI-Prolog. B c 2. Trong h p tho i ch n Font, chng ta ch n font Courier New, style Regular, size 12. Font Courier New l font ch c r ng c nh, r t thch h p cho hi n th n i dung trong c a s chnh c a SWI-Prolog. Sau khi ch n font, SWIProlog ngay l p t c hi n th c a s chnh theo font ch n.
B c 3. Nh p l nh n Settings User init file t o m t file c u hnh, customise cc ty ch n SWI-Prolog. N u b n cha c file ny (m c nh l cha c) th m t thng bo c a ra
V Qu c Hong
Page 23
H ng d n SWI-Prolog
L p trnh Logic
B c 6. Theo h ng d n c a ph n ny, b n kh ghi ch cho dng l nh % :- (current_prolog_flag(gui, true). B ng cch xa d u % true) -> guitracer ;
V Qu c Hong
Page 24
H ng d n SWI-Prolog
L p trnh Logic
B c 7. Lu file (Ctrl + S) v ng c a s editor ny l i. B c 8. Truy v n [descendant] Consult file ngu n descendant.pl tr c. 1 ?- [descendant]. % descendant compiled 0.00 sec, 1,328 bytes true. B c 9. Truy v n trace vo ch trace. 2 ?- trace. Unknown message: query(yes) [trace] 2 ?B c 10. Truy v n descend(X, Y). Chng ta th y r ng SWI-Prolog s dng c a s h a ch y ch trace thay v c a s chnh c a SWI-Prolog nh tr c. ph n
V Qu c Hong
Page 25
H ng d n SWI-Prolog
L p trnh Logic
B c 11. Truy v n halt ng SWI-Prolog. 3 ?- halt. B c 12. Kh i ng l i SWI-Prolog t file th c thi plwin.exe.
V Qu c Hong
Page 26
H ng d n SWI-Prolog
L p trnh Logic
B c 13. T nh ng dng u chng ta th y SWI-Prolog t ng n p file c u hnh c a chng ta (file pl.ini) cng nh dng c a s h a trace. Nh v y file c u hnh l m t file ngu n SWI-Prolog, c SWI-Prolog n p ngay sau khi ch y (nh tn v v tr lu tr c bi t c a n). Do cc khai bo, cc l nh, trong file ny s c tc d ng ngay sau khi SWI-Prolog ch y. Cc b n c ton quy n thm cc khai bo, cc l nh, m i (d nhin b n ph i bi t r v n) hay kh ghi ch m t s khai bo c s n trong file m u ny.
V Qu c Hong
Page 27
H ng d n SWI-Prolog
L p trnh Logic
6. Bi h ng d n 6: S
d ng m t s v t
c ch khc
B c 1. Ch y SWI-Prolog t file th c thi plwin.exe. Cc tham chi u file tng i (trong edit/1, consult/1, ) u l y th m c lm vi c c a SWI-Prolog lm g c. Chng ta dng truy v n pwd ki m tra th m c ny. 1 ?- pwd. c:/program files/swi-prolog/bin true. Nh v y n u ch y SWI-Prolog t file th c thi plwin.exe th th m c lm vi c l {SWI-Prolog}\bin nh trn cho th y. Lu l n u t o shortcut cho file plwin.exe v ch y t shortcut ny (ch ng h n shortcut trn Desktop) th th m c lm vi c s khc. B c 2. Truy v n ls xem danh sch file trong th m c lm vi c. L nh ny c ch cho consult/1, edit/1, 2 ?- ls. descendant.pl true.
hello.pl
loop.pl
B c 3. ng SWI-Prolog v nh p p file {SWI-Prolog}\demo\likes.pl ch y SWI-Prolog v n p file ngu n ny. B c 4. Truy v n pwd ki m tra th m c lm vi c. 1 ?- pwd. c:/program files/swi-prolog/demo true. Chng ta th y r ng th m c lm vi c c t thnh th m c ch a file ngu n kh i ng SWI-Prolog.
V Qu c Hong
Page 28
H ng d n SWI-Prolog
L p trnh Logic
B c 5. Truy v n help/0 hi n th h p tho i Help c a SWI-Prolog (gi ng nh dng l nh Help Online manual). Chng ta truy v n help(write) hi n th Help v v t write. 2 ?- help(write). true. SWI-Prolog s hi n th h i tho i Help ngay m c c a v t write, nh hnh d i.
B c 6. Truy v n write(Hello World) in chu i Hello World. 3 ?- write('Hello World'). Hello World true. B c 7. Khc v i v t write dng in ra d ng thn thi n c a i t ng, v t display dng in ra d ng bi u di n bn trong. Truy v n display([1, 2]) th y bi u di n bn trong c a list [1, 2].
V Qu c Hong
Page 29
L p trnh Logic
B c 8. Truy v n display(1 + 2) th y bi u di n bn trong c a 1 + 2. 5 ?- display(1 + 2). +(1, 2) true. B c 9. V t read c gi tr h p nh t vo m t bi n. Truy v n read(X), display(X). V g vo 1+1, d u . v nh n Enter. 6 ?- read(X), display(X). |: 1+1. +(1, 1) X = 1+1. 7 ?-
V Qu c Hong
Page 30