Download as pdf or txt
Download as pdf or txt
You are on page 1of 30

H ng d n 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 4. Trong h p tho i ch n th m c ci t ta ch n C:\Program Files\SWIProlog (thay v m c nh l C:\Program Files\pl), n gi n v m t tn y th t t hn.

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

Tp. HCM, 2/2009

Page 2

H ng d n SWI-Prolog B c 6. Nh n Install v i SWI-Prolog ci t xong.

L p trnh Logic

thu n ti n, chng ta g i {SWI-Prolog} l th m c ci t SWI-Prolog (l th m c ch n B c 4). Sau khi ci t th th m c ny ch a ton b chng

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

Tp. HCM, 2/2009

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

Tp. HCM, 2/2009

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

H ng d n SWI-Prolog X = pizza ; X = spaghetti ; X = chips. 6 ?-

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

listing. mild(dahl). mild(curry). indian(X). likes(sam, X). likes(sam, X).

B c 11. Truy v n !2. g i l i truy v n th 2. 7 ?- !2. mild(dahl). true.

V Qu c Hong

Tp. HCM, 2/2009

Page 7

H ng d n SWI-Prolog

L p trnh Logic

3. Bi h ng d n 3: Thao tc file ngu n SWI-Prolog


B c 1. Ch y chng trnh SWI-Prolog t file 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. Trong h p tho i Create new Prolog source t tn file l hello.pl, SWI-Prolog s tri u g i Editor c a mnh (g i l PceEmacs) b n so n file ngu n hello.pl. B c 2. G vo lu t duy nh t sau y trong file hello.pl hello :- write('Hello World'). Sau lu file v ng Editor. B c 3. Nh p l nh n File Consult n p m t file ngu n. Trong h p tho i Load file into Prolog ch n n p file hello.pl. SWI-Prolog s n p cc s ki n v lu t trong file ny vo KB. B c 4. Truy v n listing th y r ng lu t trong file hello.pl c thm vo KB. 1 ?- listing. % Foreign: tcp_debug/1 write('Hello World'). true. B c 5. Truy v n hello th y cng vi c c a v t hello/0. V t ny in ra dng ch Hello World. 2 ?- hello. Hello World true. V Qu c Hong Tp. HCM, 2/2009 Page 8

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

Tp. HCM, 2/2009

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

H ng d n SWI-Prolog + edit/0, edit/1 s a file ngu n. + edit(file(File)) t o m i file ngu n.

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

Tp. HCM, 2/2009

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

Tp. HCM, 2/2009

Page 12

H ng d n SWI-Prolog B c 5. Nh n Enter

L p trnh Logic

cc d u nh c ti p theo SWI-Prolog ti p t c qu trnh theo

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

Tp. HCM, 2/2009

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.

6 ?- descend(X, Y). X = martha, Y = charlotte ; V Qu c Hong Tp. HCM, 2/2009 Page 14

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

Tp. HCM, 2/2009

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

Tp. HCM, 2/2009

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

H ng d n SWI-Prolog % Spy point removed from child/2 true.

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) ?

break exit trace

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)

? ? ? ? ? ? ? ? ?

creep creep creep creep creep creep creep creep

V Qu c Hong

Tp. HCM, 2/2009

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 ?-

? ? ? ? ? ? ? ? ?

creep creep creep creep creep creep creep creep abort

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

Tp. HCM, 2/2009

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

Tp. HCM, 2/2009

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

Tp. HCM, 2/2009

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

Tp. HCM, 2/2009

Page 23

H ng d n SWI-Prolog

L p trnh Logic

B c 4. Nh n OK t o m t file ci t nh th . B c 5. Trong c a s editor b n duy t n ph n ni v DEBUGGING.

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 ;

u (% l d u b t u ghi ch trn m t dng c a Prolog).

Editor s t ng t mu l i b n bi t y l m t dng l nh ch khng ph i l m t ghi ch n a.

V Qu c Hong

Tp. HCM, 2/2009

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

Tp. HCM, 2/2009

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

Tp. HCM, 2/2009

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

Tp. HCM, 2/2009

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

Tp. HCM, 2/2009

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

Tp. HCM, 2/2009

Page 29

H ng d n SWI-Prolog 4 ?- display([1, 2]). .(1, .(2, [])) true.

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

Tp. HCM, 2/2009

Page 30

You might also like