Tài liệu Lập trình Lôgích trong prolog pptx

99 1.1K 21
Tài liệu Lập trình Lôgích trong prolog pptx

Đang tải... (xem toàn văn)

Tài liệu hạn chế xem trước, để xem đầy đủ mời bạn chọn Tải xuống

Thông tin tài liệu

PGS.TS PHAN HUY KHÁNH L p t rình Lơ g ích Prolog NHÀ XU T B N I H C QU C GIA HÀ N I 2004 PGS.TS PHAN HUY KHÁNH L p tr ìn h L ơg í ch t r ong Pr ol og Prolog ngôn ng l p trình lơgich (Prolog = PROgramming in LOGic) GS A Colmerauer ưa l n u tiên năm 1972 t i trư ng i h c Marseille, nư c Pháp n năm 1980, Prolog nhanh chóng c áp d ng r ng rãi, c ngư i Nh t ch n làm ngôn ng phát tri n máy tính th h Prolog ã c cài t h u h t dòng máy tính Unix/Linux, Macintosh, Windows Prolog cịn c g i ngơn ng l p trình ký hi u (symbolic programming) tương t l p trình hàm (functional programming), hay l p trình phi s (non-numerical programming) Nguyên lý l p trình lơgich d a phép suy di n lơgích, liên quan n nh ng khái ni m tốn h c phép h p nh t Herbrand, h p gi i Robinson, lôgich Horn, lôgich v t b c m t (first order predicate logic), v.v Prolog r t thích h p gi i quy t nh ng toán liên quan n i tư ng m i quan h gi a chúng Prolog c ng d ng ch y u lĩnh v c trí tu nhân t o (Artificial Intelligence) cơng ngh x lý tri th c, h chuyên gia, máy h c, x lý ngơn ng , trị chơi, v.v N i dung cu n sách t p trung trình bày s lý thuy t nh ng k thu t l p trình b n Prolog, r t thích h p cho sinh viên ngành tin h c nh ng b n c mu n tìm hi u v k thu t l p trình ng d ng lĩnh v c trí tu nhân t o V TÁC GI : T t nghi p ngành Tốn Máy tính năm 1979 t i trư ng i h c Bách khoa Hà N i T 1979 n gi ng d y t i khoa Công ngh Thông tin, trư ng i h c Bách khoa, i h c N ng B o v ti n sĩ năm 1991 t i Pháp Gi ch c ch nhi m khoa Công ngh Thông tin 1995-2000 Hư ng nghiên c u : x lý ngôn ng , x lý a ng , lý thuy t tính tốn E-mail: khanhph@vnn.vn L I NĨI U Cu n sách nh m cung c p s lý thuy t nh ng phương pháp l p trình b n nh t c a mơn h c «L p trình lơgich» (Programming in Logic) Ngư i c s c làm quen v i m t s k thu t l p trình lơgich c ng d ng tương i ph bi n ch y u lĩnh v c trí tu nhân t o (Artificial Intelligence) công ngh x lý tri th c, máy h c, h chuyên gia, x lý ngơn ng t nhiên, trị chơi, v.v Cu n sách g m năm chương, m i chương, tác gi u c g ng ưa vào nhi u ví d minh h a N i dung chương sau : − Chương gi i thi u ngôn ng l p trình Prolog d a lơgich Horn (Horn logic) Ngư i c c làm quen v i ki u d li u c a Prolog, khái ni m lu t, s ki n vi t c chương trình Prolog ơn gi n − Chương trình bày m c nghĩa khác c a m t chương trình Prolog : nghĩa lôgich, nghĩa khai báo nghĩa th t c, cách Prolog tr l i câu h i, cách Prolog làm tho mãn ích − Chương trình bày phép toán s h c, phép so sánh i tư ng nh nghĩa hàm s d ng phép quy Prolog − Chương trình bày c u trúc danh sách phép x lý b n danh sách c a Prolog − Chương trình bày k thu t l p trình nâng cao v i Prolog − Ph n ph l c gi i thi u ngơn ng l p trình SWI-Prolog, hư ng d n cách cài t s d ng ph n m m m t s chương trình ví d tiêu bi u vi t SWI Prolog ã ch y có k t qu Cu n sách dùng làm giáo trình cho sinh viên ngành Tin h c nh ng b n c mu n tìm hi u thêm v k thu t l p trình cho lĩnh v c trí tu nhân t o Trong trình biên so n, tác gi ã nh n c t b n ng nghi p nhi u óng góp b ích v m t chun mơn, nh ng ng viên khích l v m t tinh th n, s giúp v biên t p cu n sách c i Tác gi xin c bày t lòng bi t ơn sâu s c Tác gi chân thành c m ơn m i ý ki n phê bình óng góp c a b n c g n xa v n i dung c a cu n sách N ng, ngày 27/05/2004 Tác gi M CL C CHƯƠNG M U V NGÔN NG PROLOG I GI I THI U NGÔN NG PROLOG I.1 Prolog ngôn ng l p trình lơgich I.2 Cú pháp Prolog I.2.1 Các thu t ng I.2.2 Các ki u d li u Prolog I.2.3 Chú thích II CÁC KI U D LI U SƠ C P C A PROLOG II.1 Các ki u h ng (tr c ki n) II.1.1 Ki u h ng s II.1.2 Ki u h ng lôgich II.1.3 Ki u h ng chu i ký t II.1.4 Ki u h ng nguyên t II.2 Bi n III S KI N VÀ LU T TRONG PROLOG III.1 Xây d ng s ki n III.2 Xây d ng lu t 10 III.2.1 nh nghĩa lu t 10 III.2.2 nh nghĩa lu t quy 16 III.2.3 S d ng bi n Prolog 18 IV KI U D LI U C U TRÚC C A PROLOG 20 IV.1 nh nghĩa ki u c u trúc c a Prolog 20 IV.2 So sánh h p nh t h ng 23 CHƯƠNG I II II.1 II.2 II.3 II.4 II.5 NG NGHĨA C A CHƯƠNG TRÌNH PROLOG 31 QUAN H GI A PROLOG VÀ LƠGICH TỐN H C 31 CÁC M C NGHĨA C A CHƯƠNG TRÌNH PROLOG 32 Nghĩa khai báo c a chương trình Prolog 33 Khái ni m v gói m nh 34 Nghĩa lôgich c a m nh 35 Nghĩa th t c c a Prolog 37 T h p y u t khai báo th t c 47 i III III.1 III.2 III.3 III.3.1 III.3.2 VÍ D : CON KH VÀ QU CHU I 48 Phát bi u toán 48 Gi i toán v i Prolog 49 S p t th t m nh ích 54 Nguy g p vòng l p vô h n 54 Thay i th t m nh ích chương trình 56 CHƯƠNG I I.1 I.2 I.3 II II.1 II.2 II.3 II.4 III III.1 III.2 III.3 III.3.1 III.3.2 III.3.3 CÁC PHÉP TOÁN VÀ S H C 65 S H C 65 Các phép toán s h c 65 Bi u th c s h c 65 nh nghĩa phép toán Prolog 68 CÁC PHÉP SO SÁNH C A PROLOG 73 Các phép so sánh s h c 73 Các phép so sánh h ng 75 V t xác nh ki u 77 M t s v t x lý h ng 77 NH NGHĨA HÀM 79 nh nghĩa hàm s d ng quy 79 T i ưu phép quy 87 M t s ví d khác v quy 88 Tìm ng i m t th có nh hư ng 88 Tính dài ng i m t th 89 Tính g n úng chu i 90 CHƯƠNG I II III III.1 III.1.1 III.1.2 III.1.3 III.1.4 III.1.5 III.1.6 III.2 C U TRÚC DANH SÁCH 95 BI U DI N C U TRÚC DANH SÁCH 95 M T S V T X LÝ DANH SÁCH C A PROLOG 98 CÁC THAO TÁC CƠ B N TRÊN DANH SÁCH 99 Xây d ng l i m t s v t có s n 99 Ki m tra m t ph n t có m t danh sách 99 Ghép hai danh sách 100 B sung m t ph n t vào danh sách 104 Lo i b m t ph n t kh i danh sách 104 Ngh ch o danh sách 105 Danh sách 106 Hoán v 107 III.3 III.3.1 III.3.2 III.3.3 M t s ví d v danh sách 109 S p x p ph n t c a danh sách 109 Tính dài c a m t danh sách 109 T o sinh s t nhiên 111 CHƯƠNG I I.1 I.2 I.2.1 I.2.2 I.2.3 I.3 I.3.1 I.3.2 II II.1 II.2 II.3 II.3.1 II.3.2 II.4 II.5 II.5.1 II.5.2 II.5.3 II.5.4 II.5.5 III III.1 III.2 III.2.1 III.2.2 III.2.3 III.3 III.3.1 III.3.2 III.3.3 III.3.4 III.3.5 K THU T L P TRÌNH PROLOG 117 NHÁT C T 117 Khái ni m nhát c t 117 K thu t s d ng nhát c t 118 T o ích gi b ng nhát c t 118 Dùng nhát c t lo i b hồn tồn quay lui 119 Ví d s d ng k thu t nhát c t 122 Phép ph nh 126 Ph nh b i th t b i 126 S d ng k thu t nhát c t ph nh 128 S D NG CÁC C U TRÚC 131 Truy c p thông tin c u trúc t m t s d li u 132 Tr u tư ng hoá d li u 136 Mô ph ng ôtômat h u h n 138 Mô ph ng ôtômat h u h n không ơn nh 138 Mô ph ng ôtômat h u h n ơn nh 143 Ví d : l p k ho ch i du l ch b ng máy bay 144 Bài toán tám quân h u 150 S d ng danh sách to theo hàng c t 151 S d ng danh sách to theo c t 155 S d ng to theo hàng, c t ng CHÉO 158 K t lu n 161 B di n d ch Prolog 162 QUÁ TRÌNH VÀO-RA VÀ LÀM VI C V I T P 163 Khái ni m 163 Làm vi c v i t p 164 c ghi lên t p 164 M t s ví d c ghi lên t p 167 N p chương trình Prolog vào b nh 171 ng d ng ch làm vi c v i t p 172 nh d ng h ng 172 S d ng t p x lý h ng 173 Thao tác ký t 175 Thao tác nguyên t 177 M t s v t x lý s d li u 180 iii PH L C A M T S PH L C B I II II.1 II.2 II.3 II.4 II.5 III CHƯƠNG TRÌNH PROLOG 187 HƯ NG D N S D NG SWI-PROLOG 200 GI I THIÊUU SWI-PROLOG 194 LAIM VIÊUC V I SWI-PROLOG 195 t câu h i 195 Ch y trình demo 196 Ch y trình demo XPCE 197 Các l nh ơn (Menu commands) 198 So n th o chương trình 200 M T S L NH SWI-PROLOG THÔNG D NG 201 TÀI LI U THAM KH O 203 CHƯƠNG M uv ngơn ng Prolog « A program is a theory (in some logic) and computation is deduction from the theory » J A Robinson « Program = data structure + algorithm » N Wirth « Algorithm = logic + control » R Kowalski I Gi i thi u ngôn ng Prolog I.1 Prolog ngơn ng l p trình lôgich rolog ngôn ng c s d ng ph bi n nh t dịng ngơn ng l p trình lơgich (Prolog có nghĩa PROgramming in LOGic) Ngôn ng Prolog giáo sư ngư i Pháp Alain Colmerauer nhóm nghiên c u c a ơng xu t l n u tiên t i trư ng i h c Marseille u nh ng năm 1970 n năm 1980, Prolog nhanh chóng c áp d ng r ng rãi châu Âu, c ngư i Nh t ch n làm ngơn ng phát tri n dịng máy tính th h Prolog ã c cài t máy vi tính Apple II, IBM-PC, Macintosh Prolog cịn c g i ngơn ng l p trình ký hi u (symbolic programming) tương t ngơn ng l p trình hàm (functional programming), hay l p trình phi s (nonnumerical programming) Prolog r t thích h p gi i quy t toán liên quan n i tư ng (object) m i quan h (relation) gi a chúng Prolog c s d ng ph bi n lĩnh v c trí tu nhân t o Ngun lý l p trình lơgich d a m nh Horn (Horn logíc) M t m nh Horn bi u di n m t s ki n hay m t s vi c ó úng ho c không úng, x y ho c khơng x y (có ho c khơng có, v.v ) Ví d I.1 : Sau ây m t s m nh Horn : N u m t ngư i già mà (và) khơn ngoan ngư i ó h nh phúc Jim ngư i h nh phúc N u X cha m c a Y Y cha m c a Z X ơng c a Z Tom ông c a Sue P L p trình lơgic Prolog T t c m i ngư i u ch t (ho c N u ngư i ó ph i ch t) Socrat ngư i Trong m nh Horn trên, m nh 1, 3, c g i lu t (rule), m nh l i c g i s ki n (fact) M t chương trình lơgich có th c xem m t s d li u g m m nh Horn, ho c d ng lu t, ho c d ng s ki n, ch ng h n t t c s ki n lu t t n Ngư i s d ng (NSD) g i ch y m t chương trình lơgich b ng cách t câu h i (query/ question) truy v n s d li u này, ch ng h n câu h i : Socrat có ch t khơng ? (tương ương kh ng nh Socrat ch t úng hay sai ?) M t h th ng lôgich s th c hi n chương trình theo cách «suy lu n»-tìm ki m d a v n «hi u bi t» ã có chương trình - s d li u, minh ch ng câu h i m t kh ng nh, úng (Yes) ho c sai (No) V i câu h i trên, h th ng tìm ki m s d li u kh ng nh Socrat ch t «tìm th y» lu t tho mãn (v thì) V n d ng lu t 5, h th ng nh n c Socrat ngư i (v n u) s ki n T ó, câu tr l i s : Yes có nghĩa s ki n Socrat ch t úng I.2 Cú pháp Prolog I.2.1 Các thu t ng M t chương trình Prolog m t s d li u g m m nh (clause) M i m nh c xây d ng t v t (predicat) M t v t m t phát bi u ó v i tư ng có giá tr chân úng (true) ho c sai (fail) M t v t có th có i nguyên lôgich (logic atom) M i nguyên t (nói g n) bi u di n m t quan h gi a h ng (term) Như v y, h ng quan h gi a h ng t o thành m nh H ng c xem nh ng i tư ng “d li u” m t trình Prolog H ng có th h ng sơ c p (elementary term) g m h ng (constant), bi n (variable) h ng ph c h p (compound term) Các h ng ph c h p bi u di n i tư ng ph c t p c a toán c n gi i quy t thu c lĩnh v c ang xét H ng ph c h p m t hàm t (functor) có ch a i (argument), có d ng Tên_hàm_t ( i_1, , i_n) Tên hàm t m t chu i ch và/ho c chũ s c b t u b i m t ch thư ng Các i có th bi n, h ng sơ c p, ho c h ng ph c h p Trong Prolog, Các phép toán s h c 77 a(X) :- b(X) b(X) :- X1 is X - 2, write(X), write(' '), a(X1) Chương trình khơng g i « quy » even_succ_nat K t qu sau l i g i a(20) dãy s gi m d n 20 18 16 14 12 10 Ví d III.2 : Xây d ng s t nhiên (Peano) phép c ng s t nhiên /* nh nghĩa s t nhiên */ nat(0) % m t s t nhiên nat(s(N)) :% s(X) m t s t nhiên nat(N) % n u N m t s t nhiên Ch ng h n s c vi t : s(s(s(s(s(zero))))) /* nh nghĩa phép c ng */ addi(0, X, X) % lu t : + X = X /* addi(X, 0, X) có th s d ng them lu t : X + = X addi(s(X), Y, s(Z)) :- % lu t : n u X + Y = Z (X+1) + Y = (Z+1) addi(X, Y, Z) Ho c nh nghĩa theo nat(X) sau : addi(0, X, X) :- nat(X) ?- addi(X, Y, s(s(s(s(0))))) X = Y = s(s(s(s(0)))) Yes ?- addi(X, s(s(0)), s(s(s(s(s(0)))))) X = s(s(s(0))) Yes ?- THREE = s(s(s(0))), FIVE = s(s(s(s(s(0))))), addi(THREE, FIVE, EIGHT) THREE = s(s(s(0))) FIVE = s(s(s(s(s(0))))) EIGHT = s(s(s(s(s(s(s(s(0)))))))) Yes Ví d III.3 : Tìm c s chung l n nh t (GCD: Greatest Common Divisor) Cho trư c hai s nguyên X Y, ta c n tính c s D USCLN d a ba quy t c sau : N u X = Y, D b ng X N u X < Y, D b ng USCLN c a X c a Y - X N u X > Y, th c hi n tương t bư c 2, b ng cách hoán v vai trị X Y 78 L p trình lơgic Prolog Có th d dàng tìm c ví d minh ho s ho t ng c a ba quy t c trư c ây V i X =20 Y =25, ta nh n c D =5 sau m t dãy phép tr Chương trình Prolog c xây d ng sau : gcd( X, X, X gcd( X, Y, D X < Y, Y1 is Y gcd( X, ) ) :– X, Y1, D ) gcd( X, Y, D ) :X > Y, gcd( Y, X, D ) ích cu i m nh th ba ây có th c thay th b i : X1 is X – Y, gcd( X1, Y, D ) K t qu ch y Prolog sau : ?- gcd( 20, 55, D ) D = Ví d III.4 : Tính giai th a fac(0, 1) fac(N, F) :N > 0, M is N - 1, fac(M, Fm), F is N * Fm M nh th hai có nghĩa r ng n u l n lư t : N > 0, M = N - 1, Fm is (N-1)!, F = N * Fm, F N! Phép tốn is gi ng phép gán ngôn ng l p trình m nh l nh Prolog, is không gán giá tr m i cho bi n V m t lôgich, th t m nh v ph i c a m t lu t khơng có vai trị gì, l i có ý nghĩa th c hi n chương trình M khơng ph i bi n l i g i th t c quy s gây m t vịng l p vô h n Các nh nghĩa hàm Prolog thư ng r c r i hàm quan h mà không ph i bi u th c Các quan h c nh nghĩa s d ng nhi u lu t th t lu t xác nh k t qu tr v c a hàm Ví d III.5 : Tính s Fibonacci /* Fibonacci function */ Các phép toán s h c 79 fib(0, 0) % fib0 = fib(1, 1) % fib1 = fib(N, F) :% fibn+2 = fibn+1 + fibn N > 1, N1 is N - 1, fib(N1, F1), N2 is N - 2, fib(N2, F2), F is F1 + F2 ?- fib(20, F) F = 10946 Yes ?- fib(21, F) ERROR: Out of local stack Ta nh n th y thu t tốn tính s Fibonacci ây s d ng hai l n g i quy ã nhanh chóng làm y b nh ch v i N=21, SWI-prolog ph i d ng l i thông báo l i Ví d III.6 : Tính hàm Ackerman /* Ackerman's function */ ack(0, N, A) :- % Ack(0, n) = n + A is N + ack(M1, 0, A) :- % Ack(m, n) = Ack(m-1, 1) M > 0, M is M - 1, ack(M, 1, A) ack(M1, N1, A) :% Ack(m, n) = Ack(m-1, Ack(m, n-1)) M1 > 0, N1 > 0, M is M - 1, N is N - 1, ack(M1, N, A1), ack(M, A1, A) Ví d III.7 : Hàm tính t ng plus(X, Y, Z) :nonvar(X), nonvar(Y), Z is X + Y plus(X, Y, Z) :nonvar(Y), nonvar(Z), X is Z - Y plus(X, Y, Z) :nonvar(X), nonvar(Z), Y is Z - X Ví d III.8 : Thu t toán h p nh t 80 L p trình lơgic Prolog Sau ây m t thu t toán h p nh t ơn gi n cho phép x lý trư ng h p m t bi n ó c thay th (h p nh t) b i m t h ng mà h ng l i có ch a úng tên bi n ó Ch ng h n phép h p nh t X = f(X) không h p l % unify(T1, T2) unify(X, Y) :% trư ng h p bi n var(X), var(Y), X = Y unify(X, Y) :% trư ng h p bi n = không ph i bi n var(X), nonvar(Y), X = Y unify(X, Y) :% trư ng h p không ph i bi n = bi n nonvar(X), var(Y), Y = X unify(X, Y) :% nguyên t hay s = nguyên t hay s nonvar(X), nonvar(Y), atomic(X), atomic(Y), X = Y unify(X, Y) :% trư ng h p c u trúc = c u trúc nonvar(X), nonvar(Y), compound(X), compound(Y), termUnify(X, Y) termUnify(X, Y) :% h p nh t h ng v i h ng ch a c u trúc functor(X, F, N), functor(Y, F, N), argUnify(N, X, Y) argUnify(N, X, Y) :% h p nh t N tham N>0, argUnify1(N, X, Y), Ns is N - 1, argUnify(Ns, X, Y) argUnify(0, X, Y) argUnify1(N, X, Y) :- % h p nh t tham arg(N, X, ArgX), arg(N, Y, ArgY), unify(ArgX, ArgY) i c a X Y i có b c N Ví d III.9 : Lý thuy t s Ta ti p t c xây d ng hàm m i s t nhiên ã c nh nghĩa ví d Ta xây d ng phép so sánh hai s t nhiên d a phép c ng sau : egal(+(X, 0), X) % phép c ng có tính giao hốn egal(+(0, X), X) egal(+(X, s(Y)), s(Z)) :egal(X+s(Y), s(Z)) % X YZ.egal(X+Y, Z) → Các phép toán s h c egal(+(X, Y), Z) Sau ây m t s k t qu : ?- egal(s(s(0))+s(s(s(0))), s(s(s(s(s(0)))))) Yes ?- egal(+(s(s(0)), s(s(0))), X) X = s(s(s(s(0)))) ?- egal(+(X, s(s(0))), s(s(s(s(s(0)))))) X = s(s(s(0))) Yes ?- egal(+(X, s(s(0))), s(s(s(s(s(0)))))) X = s(s(s(0))) Yes ?- egal(X, s(s(s(s(0))))) X = s(s(s(s(0))))+0 ; X = 0+s(s(s(s(0)))) ; X = s(s(s(0)))+s(0) ; X = 0+s(s(s(s(0)))) ; X = s(s(0))+s(s(0)) ; X = 0+s(s(s(s(0)))) ; X = s(0)+s(s(s(0))) ; X = 0+s(s(s(s(0)))) ; X = 0+s(s(s(s(0)))) ; X = 0+s(s(s(s(0)))) ; No V i ích egal(X, Y) sau ây, câu tr l i vô h n : ?- egal(X, Y) X = _G235+0 Y = _G235 ; X = 0+_G235 Y = _G235 ; X = _G299+s(0) Y = s(_G299) ; X = 0+s(_G302) Y = s(_G302) ; 81 82 L p trình lơgic Prolog X = _G299+s(s(0)) Y = s(s(_G299)) ; X = 0+s(s(_G309)) Y = s(s(_G309)) ; X = _G299+s(s(s(0))) Y = s(s(s(_G299))) ; X = 0+s(s(s(_G316))) Y = s(s(s(_G316))) ; X = _G299+s(s(s(s(0)))) Y = s(s(s(s(_G299)))) ; X = 0+s(s(s(s(_G323)))) Y = s(s(s(s(_G323)))) ; X = _G299+s(s(s(s(s(0))))) Y = s(s(s(s(s(_G299))))) ; X = 0+s(s(s(s(s(s(_G337)))))) Y = s(s(s(s(s(s(_G337)))))) ; X = _G299+s(s(s(s(s(s(s(0))))))) Y = s(s(s(s(s(s(s(_G299))))))) v.v 83 Các phép toán s h c III.2 T i ưu phép quy L i gi i toán s d ng quy ngôn ng l p trình nói chung thư ng ng n g n, d hi u d qu n lý c chương trình Tuy nhiên, m t s trư ng h p, s d ng quy l i x y v n v ph c t p tính tốn, khơng nh ng t n b nh mà t n th i gian Trong ngôn ng m nh l nh, phép tính n! s d ng quy c n s d ng b nh có c 0(n) th i gian tính tốn có c 0(n), thay g i quy, ngư i ta thư ng s d ng phép l p fac=fac*i, i=1 n Ta xét l i ví d tính s Fibonacci ây v i l i g i quy : fib(N, F) :N > 1, N1 is N - 1, fib(N1, F1), N2 is N - 2, fib(N2, F2), F is F1 + F2 ý r ng m i l n g i hàm fib(n) v i n>1 s d n t i hai l n g i khác, nghĩa s l n g i s tăng theo lu th a V i n l n, chương trình g i quy v y d gây tràn b nh Ví d sau ây t t c l i g i có th cho trư ng h p n=5 fib5 3 1 2 1 Hình III.1 Bi u di n l i g i quy tìm s Fibonacci M t s ngơn ng m nh l nh tính s Fibonacci s d ng c u trúc l p tránh tính i tính l i m t giá tr Chương trình Pascal dư i ây dùng hai bi n ph x=fib(i) y=fib(i+1) : { tính fib(n) v i n > } i:= 1; x:= 1; y:= 0; while i < n begin x:= x + y; y:= x – y end; Ta vi t l i chương trình Prolog sau : fibo(0, 0) fibo(N, F) :N >= 1, fib1(N, 1, 0, F) fib1(1, F, _, F) fib1(N, F2, F1, FN) :- 84 L p trình lơgic Prolog N > 1, N1 is N - 1, F3 is F1 + F2, fib1(N1, F3, F2, FN) ?- fibo(21, F) F = 10946 Yes ?- fibo(200, F) F = 2.80571e+041 Yes III.3 M t s ví d khác v III.3.1 Cho m t quy Tìm ng i m t th có th có nh hư ng nh hư ng sau : A B C D E Hình III.2 Tìm ng i m t th có nh hư ng Ta xét tốn tìm ng i gi a hai nh c a th M i cung n i hai nh c a th bi u di n m t quan h gi a hai nh T th trên, ta có th vi t m nh Prolog bi u di n s ki n : arc(a, arc(b, arc(c, arc(c, arc(a, b) c) e) d) e) Gi s c n ki m tra có t n t i m t ng i gi a hai nút a d (không t n t i ng i gi a hai nút ã mô t ), ta vi t m nh : path(a, d) nh nghĩa này, ta nh n xét sau : • T n t i m t ng i gi a hai nút có cung n i chúng 85 Các phép tốn s h c • T n t i m t ng i gi a hai nút X Y n u t n t i m t nút th ba Z cho t n t i m t ng i gi a X Z m t ng i gi a Z Y Ta vi t chương trình sau : path(X, Y) :- arc(X, Y) path(X, Y) :arc(X, Z), path(Z, Y) Ta th y nh nghĩa th t c path(X, Y) tương t th t c tìm t tiên gián ti p gi a hai ngư i dòng h ancestor(X, Y) ã xét trư c ây ?- path(X, Y) X = a Y = b ; X = b Y = c ; III.3.2 Tính dài ng i m t th Ta xét tốn tính dài ng i gi a hai nút, t nút u n nút cu i m t th s cung gi a chúng Ch ng h n dài ng i gi a hai nút a d ví d Ta l p lu n sau : • N u gi a hai nút có cung n i chúng dài ng i • G i L dài ng i gi a hai nút X Y, L1 dài ng i gi a m t nút th ba Z Y n u t n t i gi s có cung n i X Z, ó L = L1 + Chương trình c vi t sau : trajectory(X, Y, 1) :- arc(X, Y) trajectory(X, Y, L) :arc(X, Z), trajectory(Z, Y, L1), L is L1 + trajectory(a, d, L) L = Yes III.3.3 Tính g n úng chu i Trong Toán h c thư ng g p tốn tính g n úng giá tr c a m t hàm s v i xác nh tuỳ ý (e) theo phương pháp khai tri n thành chu i Max Loren Ví d tính hàm mũ ex v i xác 10-6 nh khai tri n chu i Max Loren : 86 L p trình lôgic Prolog ex = + x + x x3 + + 2! 3! G i expower(X, S) hàm tính giá tr hàm mũ theo X, bi n S k t qu g n úng v i xác e=10-6 T cơng th c khai tri n Max Loren ây, ta nh n th y giá tr c a hàm mũ ex t ng vơ h n có d ng : sum(0) = 1, t0 = tương ng v i x = ex = sum(i+1) = sum(i) + ti+1, v i ti+1 = ti * x /( i+1), i = 0, 1, th c hi n phép l p, ta c n xây d ng hàm quy tính t ng sum(X, S, I, T) ó s d ng bi n trung gian I bư c l p th i T s h ng ti Theo cách xây d ng này, hàm tính t ng sum(X, S, I, T) t ng c a s h ng th I tr i c a chu i Q trình tính t ng d ng l i ti< e, nghĩa ã t c xác e T i th i i m này, giá tr c a t ng s h ng ti i u ki n kh i ng trình l p chuy n v t expower(X, S) thành v t tính t ng sum(X, S, I, T) v i giá tr u I=0 T=1 Ta có chương trình quy sau : expower(X, S) :sum(X, S, 0, 1) sum(_, T, _, T) :abs(T) < 0.000001 sum(X, S, I, T) :abs(T) > 0.000001, I1 is I + 1, T1 is T*X/I1, sum(X, S1, I1, T1), S is S1 + T ?- expower(1, S) S = 2.71828 Yes ?- expower(10, S) S = 22026.5 Yes Tóm t t chương • Các phép tốn s h c c th c hi n nh th t c thư ng trú Prolog Các phép tốn s h c 87 • Vai trị c a phép tốn tương t vai trị c a hàm t , ch nhóm thành ph n c a c u trúc mà thơi • M i NLT có th t nh nghĩa nh ng phép tốn riêng c a M i phép tốn c nh nghĩa b i tên, ưu tiên ki u g i tham i • Các phép tốn cho phép NLT v n d ng cú pháp linh ho t cho nhu c u riêng c a h S d ng phép toán làm cho chương trình tr nên d c (readability) • tính m t bi u th c s h c, m i tham i có m t bi u th c ó ph i c ràng bu c b i giá tr s • Ch d n op dùng nh nghĩa m t phép toán m i, g m y u t : tên, ki u ưu tiên c a phép tốn m i • S d ng phép toán trung t , ti n t , ho c h u t làm tăng cư ng tính d c c a m t chương trình Prolog • ưu tiên m t s nguyên n m m t kho ng giá tr cho trư c, thông thư ng n m gi a 1200 Hàm t c a m t bi u th c phép tốn có ưu tiên cao nh t Các phép tốn có ưu tiên th p nh t c ưu tiên nh t • Ki u c a m t phép toán ph thu c vào hai y u t : v trí c a phép toán so v i tham i, ưu tiên c a tham i c so sánh v i ưu tiên c a phép toán i v i ký hi u c t xfy, tham i x có ưu tiên bé h n ưu tiên c a phép tốn, cịn tham i y có ưu tiên bé ho c b ng ưu tiên c a phép toán Bài t p chương Cho bi t k t qu c a câu h i sau ây : ?- X=Y ?- X is Y ?- X=Y, Y=Z, Z=1 ?- X=1, Z=Y, X=Y ?- X is 1+1, Y is X ?- Y is X, X is 1+1 ?- 1+2 == 1+2 ?- X == Y ?- X == X 88 L p trình lơgic Prolog ?- =:= 2-1 ?- X =:= Y Cho bi t k t qu c a câu h i sau ây : ?- op(X) is op(1) ?- op(X) = op(1) ?- op(op(Z), Y) = op(X, op(1)) ?- op(X, Y) = op(op(Y), op(X)) T nh nghĩa s t nhiên (nat) phép c ng (addi) cho ví d m c nh nghĩa hàm, vi t ti p hàm tr (subt), nhân (multi), chia (divi), lu th a (power), giai th a (fact), so sánh nh (less) tìm c s chung l n nh t (pdg) s d ng hàm ã có (ch ng h n less, subt ) Vi t hàm Prolog ki m tra m t s nguyên tuỳ ý N : a N s ch n (even number) s d ng quy tr c ti p Hư ng d n : N ch n N±2 s ch n b N s l (odd number) s d ng quy tr c ti p Hư ng d n : N l N±2 s l c N ch n s d ng hàm ki m tra s l câu d (N ch n N±1 s l ) d N s l s d ng hàm ki m tra s ch n câu c (N l N±1 ch n) Vi t hàm Prolog làm t (tracking/traverse) nh phân theo th t trư c (reorder), sau (post-order) gi a (in-order) Gi s nh phân tương ng v i bi u th c s h c (5+6)*(3-(2/2)) m nh Prolog sau : tree(’*’, tree(’+’, leaf(5), leaf(6)), tree(’-’, leaf(3), tree(’/’, leaf(2), leaf(2))) K t qu t sau : theo th t trư c : [*, +, 5, 6, -, 3, /, 2, 2] th t gi a : [5, +, 6, *, 3, -, 2, /, 2] th t sau : [5, 6, +, 3, 2, 2, /, -, *] Vi t l i hàm t o 10 s t nhiên ch n u tiên ( ã cho ph n quy) cho k t qu tr v dãy s tăng d n L p b ng nhân table(R, N) có s b nhân (multiplicator) t tr i v i s nhân N (multiplier) d ng l i g p s b nhân R (k t qu R * N) 89 Các phép toán s h c xác e = 10-5 : Vi t hàm tính g n úng giá tr hàm sau v i 1 = − + − + π 1+

Ngày đăng: 26/02/2014, 07:20

Hình ảnh liên quan

Hình I.1. Các kiểu dữ liệu trong Prolog - Tài liệu Lập trình Lôgích trong prolog pptx

nh.

I.1. Các kiểu dữ liệu trong Prolog Xem tại trang 11 của tài liệu.
Hình 1.1. biểu diễn một sự phân lớp các kiểu dữ liệu trong Prolog gồm kiểu dữ liệu sơ cấp và kiểu dữ liệu có cấu trúc - Tài liệu Lập trình Lôgích trong prolog pptx

Hình 1.1..

biểu diễn một sự phân lớp các kiểu dữ liệu trong Prolog gồm kiểu dữ liệu sơ cấp và kiểu dữ liệu có cấu trúc Xem tại trang 11 của tài liệu.
Ta xây dựng một cây gia hệ như Hình III.1. - Tài liệu Lập trình Lôgích trong prolog pptx

a.

xây dựng một cây gia hệ như Hình III.1 Xem tại trang 14 của tài liệu.
Hình III.3. Định nghĩa quan hệ con, mẹ và ông bà sử dụng một quan hệ khác. - Tài liệu Lập trình Lôgích trong prolog pptx

nh.

III.3. Định nghĩa quan hệ con, mẹ và ông bà sử dụng một quan hệ khác Xem tại trang 20 của tài liệu.
Trong cây gia hệ ở Hình III.1, Tom là tổ tiên trực tiếp của Liz, và tổ tiên gián tiếp của Sue - Tài liệu Lập trình Lôgích trong prolog pptx

rong.

cây gia hệ ở Hình III.1, Tom là tổ tiên trực tiếp của Liz, và tổ tiên gián tiếp của Sue Xem tại trang 23 của tài liệu.
Hình III.6. Các cặp tổ tiên hậu duệ gián tiếp ở các mức khác nhau. - Tài liệu Lập trình Lôgích trong prolog pptx

nh.

III.6. Các cặp tổ tiên hậu duệ gián tiếp ở các mức khác nhau Xem tại trang 24 của tài liệu.
Hình III.7.Dạng đệ quy của quan hệ tổ tiên (được quay ngang cho thuận tiện). - Tài liệu Lập trình Lôgích trong prolog pptx

nh.

III.7.Dạng đệ quy của quan hệ tổ tiên (được quay ngang cho thuận tiện) Xem tại trang 25 của tài liệu.
Từ đó, các đối tượng trên Hình IV.2 được biểu diễn bởi các hạng như sau : - Tài liệu Lập trình Lôgích trong prolog pptx

c.

ác đối tượng trên Hình IV.2 được biểu diễn bởi các hạng như sau : Xem tại trang 28 của tài liệu.
Hình IV.2. Một số đối tượng hình học đơn giản. - Tài liệu Lập trình Lôgích trong prolog pptx

nh.

IV.2. Một số đối tượng hình học đơn giản Xem tại trang 28 của tài liệu.
Hình IV.5. Kết quả so khớp : - Tài liệu Lập trình Lôgích trong prolog pptx

nh.

IV.5. Kết quả so khớp : Xem tại trang 31 của tài liệu.
Hình IV.6. Minh hoạ các đoạn thẳng nằm ngang và thẳng đứng. - Tài liệu Lập trình Lôgích trong prolog pptx

nh.

IV.6. Minh hoạ các đoạn thẳng nằm ngang và thẳng đứng Xem tại trang 32 của tài liệu.
Hình IV.7. Kết quả so khớp : - Tài liệu Lập trình Lôgích trong prolog pptx

nh.

IV.7. Kết quả so khớp : Xem tại trang 33 của tài liệu.
Hình II.4. Quá trình thực hiện xoá đích ancestor(tom, sue). - Tài liệu Lập trình Lôgích trong prolog pptx

nh.

II.4. Quá trình thực hiện xoá đích ancestor(tom, sue) Xem tại trang 45 của tài liệu.
Hình II.3. Các giai đoạn thực hiện xử lý xoá đích. - Tài liệu Lập trình Lôgích trong prolog pptx

nh.

II.3. Các giai đoạn thực hiện xử lý xoá đích Xem tại trang 45 của tài liệu.
Hình II.5. Quá trình thực hiện execute. - Tài liệu Lập trình Lôgích trong prolog pptx

nh.

II.5. Quá trình thực hiện execute Xem tại trang 48 của tài liệu.
Quá trình thực hiện được giải thích trong hình dưới đây. - Tài liệu Lập trình Lôgích trong prolog pptx

u.

á trình thực hiện được giải thích trong hình dưới đây Xem tại trang 51 của tài liệu.
Hình III.5. Lời giải của bài toán con khỉ và quả chuối. Quá trình tìm kiếm bắt đầu từ nút trên cùng và tiếp tục xuống dưới - Tài liệu Lập trình Lôgích trong prolog pptx

nh.

III.5. Lời giải của bài toán con khỉ và quả chuối. Quá trình tìm kiếm bắt đầu từ nút trên cùng và tiếp tục xuống dưới Xem tại trang 57 của tài liệu.
Hình III.6. Biến thể a của quan hệ tổ tiên trả lời câu hỏi “Tom có phải là một tổ tiên của Sue ?”  - Tài liệu Lập trình Lôgích trong prolog pptx

nh.

III.6. Biến thể a của quan hệ tổ tiên trả lời câu hỏi “Tom có phải là một tổ tiên của Sue ?” Xem tại trang 62 của tài liệu.
Hình III.7. Biến thể b của quan hệ tổ tiên trả lời câu hỏi “Tom có phải là một tổ tiên của Sue ?”  - Tài liệu Lập trình Lôgích trong prolog pptx

nh.

III.7. Biến thể b của quan hệ tổ tiên trả lời câu hỏi “Tom có phải là một tổ tiên của Sue ?” Xem tại trang 63 của tài liệu.
Hình III.8. Biến thể c của quan hệ tổ tiên trả lời câu hỏi “Tom có phải là một tổ tiên của Sue ?”  - Tài liệu Lập trình Lôgích trong prolog pptx

nh.

III.8. Biến thể c của quan hệ tổ tiên trả lời câu hỏi “Tom có phải là một tổ tiên của Sue ?” Xem tại trang 63 của tài liệu.
Hình I.2. Ba nhóm kiểu phép toán trong Prolog. - Tài liệu Lập trình Lôgích trong prolog pptx

nh.

I.2. Ba nhóm kiểu phép toán trong Prolog Xem tại trang 73 của tài liệu.
Hình I.3. Hai cách giải thích cho biểu thức a- b- c với giả thiết rằng phép trừ «- «-» có độ ưu tiên là 500 - Tài liệu Lập trình Lôgích trong prolog pptx

nh.

I.3. Hai cách giải thích cho biểu thức a- b- c với giả thiết rằng phép trừ «- «-» có độ ưu tiên là 500 Xem tại trang 75 của tài liệu.
Hình 3.5. Các phép tốn tiền định nghĩa trong Prolog. - Tài liệu Lập trình Lôgích trong prolog pptx

Hình 3.5..

Các phép tốn tiền định nghĩa trong Prolog Xem tại trang 76 của tài liệu.
Từ đây, định lý Morgan được viết lại thành hạng sau (xem hình trên) : - Tài liệu Lập trình Lôgích trong prolog pptx

y.

định lý Morgan được viết lại thành hạng sau (xem hình trên) : Xem tại trang 77 của tài liệu.
Hình III.1. Biểu diễn cây các lời gọi đệ quy tìm số Fibonacci - Tài liệu Lập trình Lôgích trong prolog pptx

nh.

III.1. Biểu diễn cây các lời gọi đệ quy tìm số Fibonacci Xem tại trang 91 của tài liệu.
Hình III.2. Tìm đường đi trong một đồ thị có định hướng. - Tài liệu Lập trình Lôgích trong prolog pptx

nh.

III.2. Tìm đường đi trong một đồ thị có định hướng Xem tại trang 92 của tài liệu.
III.3.1. Tìm đường đi trong một đồ thị có định hướng - Tài liệu Lập trình Lôgích trong prolog pptx

3.1..

Tìm đường đi trong một đồ thị có định hướng Xem tại trang 92 của tài liệu.

Tài liệu cùng người dùng

  • Đang cập nhật ...

Tài liệu liên quan