Tài liệu hạn chế xem trước, để xem đầy đủ mời bạn chọn Tải xuống
1
/ 41 trang
THÔNG TIN TÀI LIỆU
Thông tin cơ bản
Định dạng
Số trang
41
Dung lượng
332,99 KB
Nội dung
Chương 4. Ngôn ngữ Prolog Trần Thọ Châu Logic Toán. NXB Đại học quốc gia Hà Nội 2007. Tr 126-165. Từ khoá: Logic toán, Đại số mệnh đề, Hàm đại số logic, Ngôn ngữ Prolog, Tân từ Fall, Nhập dữ liệu . Tài liệu trong Thư viện điện tử ĐH Khoa học Tự nhiên có thể sử dụng cho mục đích học tập và nghiên cứu cá nhân. Nghiêm cấm mọi hình thức sao chép, in ấn phục vụ các mục đích khác nếu không được sự chấp thuận của nhà xuất bản và tác giả. Chu . o . ng 4 Ngˆon ng˜u . PROLOG 4.1 Mo . ’ dˆa ` u 127 4.2 Ngˆon ng˜u . PROLOG 131 4.2.1 Qui t˘a ´ cc´uph´ap 131 4.2.2 C´ac kiˆe ’ u dˆo ´ itu . o . . ng 131 4.2.3 C´ac ph´ep to´an, quan hˆe . v`a h`am chuˆa ’ n 137 4.3 Cˆa ´ utr´uc cu ’ a chu . o . ng tr`ınh PROLOG . . . . . . 139 4.4 Tˆan t`u . FAIL, nh´at c˘a ´ t (!) v`a tˆan t`u . NOT . . . 141 4.5 Phu . o . ng th´u . c xuˆa ´ t nhˆa . pd˜u . liˆe . u 143 4.5.1 Phu . o . ng th´u . c xuˆa ´ td˜u . liˆe . u 143 4.5.2 Phu . o . ng th´u . c nhˆa . pd˜u . liˆe . u 145 4.6 Mˆo . tsˆo ´ th´ı du . minh hoa . vˆe ` lˆa . ptr`ınh PROLOG 148 4.7 B`ai tˆa . p chu . o . ng4 162 4.1. Mo . ’ dˆa ` u 127 4.1 Mo . ’ dˆa ` u Prolog l`a mˆo . tkˆe ´ t qua ’ quan tro . ng cu ’ a cˆong viˆe . c nghiˆen c ´u . u trong nhiˆe ` u n˘am bo . ’ i nh´om nghiˆen c´u . ucu ’ a Alain Colmerauer ta . i tru . `o . ng da . iho . c Marseille, cˆo . ng ho`a Ph´ap, v`ao nu . ’ a dˆa ` u thˆa . pky ’ 70. Mˆo . t trong nh˜u . ng nguyˆen nhˆan chu ’ yˆe ´ u l`am cho Prolog du . o . . c phˆo ’ cˆa . p rˆo . ng r˜ai l`a kha ’ n˘ang gia ’ i quyˆe ´ t c´o hiˆe . u qua ’ c´ac vˆa ´ n dˆe ` c´o liˆen quan dˆe ´ nxu . ’ l´y k´y hiˆe . u, ch˘a ’ ng ha . n: • C´ac co . so . ’ d˜u . liˆe . u quan hˆe . • Logic To´an ho . c • L´y thuyˆe ´ t gia ’ i quyˆe ´ tvˆa ´ n dˆe ` tr `u . utu . o . . ng • Hiˆe ’ u ngˆon ng˜u . tu . . nhiˆen, ta . o c´ac giao diˆe . n Ngu . `o . i - M´ay b˘a ` ng ngˆon ng˜u . tu . . nhiˆen • Viˆe ´ t c´ac chu . o . ng tr`ınh biˆen di . ch ngˆon ng˜u . • Thiˆe ´ tkˆe ´ cˆa ´ utr´uc • Gia ’ i c´ac phu . o . ng tr`ınh da . ng k´y hiˆe . u, xu . ’ l´y c´ac cˆong th´u . c • Phˆan t´ıch cˆa ´ utr´uc sinh ho´a • Diˆe ` u khiˆe ’ n Robot, Tr´ı tuˆe . nhˆan ta . o, Hˆe . chuyˆen gia v.v Diˆe ’ mma . nh cu ’ a ngˆon ng˜u . PROLOG so v´o . i ngˆon ng˜u . lˆa . p tr`ınh truyˆe ` n thˆo ´ ng l`a c´ach tiˆe ´ pcˆa . n gia ’ i quyˆe ´ tvˆa ´ n dˆe ` b˘a ` ng viˆe . c mˆo ta ’ phu . o . ng ph´ap gia ’ i quyˆe ´ t. Chu . o . ng tr`ınh Prolog khˆong mˆo ta ’ thu ’ tu . c gia ’ i quyˆe ´ tvˆa ´ n dˆe ` m`a mˆo ta ’ logic cu ’ avˆa ´ n dˆe ` cˆa ` n gia ’ i quyˆe ´ t. Prolog du . o . . c coi l`a bu . ´o . c th`anh cˆong dˆa ` u tiˆen cu ’ alˆa . p tr`ınh logic, hu . ´o . ng dˆa ˜ nviˆe . c c`ai d˘a . t c´o hiˆe . u qua ’ nhiˆe ` u kh´ıa ca . nh thˆong minh cu ’ amˆo . tchu . o . ng tr`ınh, ch˘a ’ ng ha . n: lu . . acho . n khˆong tˆa ´ t di . nh, xu . ’ l´y song song, go . ithu ’ tu . c khˆong qua tham sˆo ´ (pattern dicected procedure call), V`ı Prolog tiˆe ´ pcˆa . n c´ac vˆa ´ n dˆe ` mˆo . t c´ach tu . . nhiˆen v`a logic, nˆen nh˜u . ng ngu . `o . im´o . ilˆa . p tr`ınh v`a nh˜u . ng ngu . `o . ilˆa . p tr`ınh viˆen c´o kinh nghiˆe . m dˆe ` uc´o 128 Chu . o . ng 4. Ngˆon ng˜u . PROLOG thˆe ’ d`ung n´o dˆe ’ viˆe ´ tnh˜u . ng chu . o . ng tr`ınh ´u . ng du . ng c´o tˆa ` mc˜o . nhu . c´ac hˆe . chuyˆen gia, c´ac co . so . ’ tri th ´u . c, c´ac giao diˆe . nb˘a ` ng ngˆon ng˜u . tu . . nhiˆen, v`a c´ac hˆe . thˆo ´ ng qua ’ n l´y thˆong tin go . n nhe . v`a hiˆe . u qua ’ . Diˆe ’ mma . nh cu ’ a Prolog l`a c´ach tiˆe ´ pcˆa . n gia ’ i quyˆe ´ tvˆa ´ n dˆe ` b˘a ` ng viˆe . cmˆo ta ’ phu . o . ng ph´ap gia ’ i quyˆe ´ t. Chu . o . ng tr`ınh Prolog khˆong mˆo ta ’ thu ’ tu . c gia ’ i quyˆe ´ tvˆa ´ n dˆe ` m`a mˆo ta ’ logic cu ’ avˆa ´ n dˆe ` cˆa ` n gia ’ i quyˆe ´ t, ngh˜ıa l`a ngu . `o . ilˆa . p tr`ınh cˆa ` n d`anh to`an bˆo . s´u . clu . . cv`asu . . quan tˆam cu ’ a m`ınh v`ao viˆe . c khai b´ao cho m´ay t´ınh mˆo . tsˆo ´ kh˘a ’ ng di . nh cˆa ` n thiˆe ´ tvˆe ` c´ac t´ınh chˆa ´ tcu ’ a c´ac dˆo ´ itu . o . . ng trong l˜ınh vu . . c du . o . . c dˆe ` cˆa . pv`amˆo . tsˆo ´ luˆa . t suy diˆe ˜ n, mˆo ta ’ t´ınh chˆa ´ t v`a c´ac quan hˆe . gi˜u . a c´ac dˆo ´ itu . o . . ng. Du . . a v`ao viˆe . c suy diˆe ˜ n theo c´ac luˆa . t, kˆe ´ tho . . pv´o . i kh˘a ’ ng di . nh d˜a cho, chu . o . ng tr`ınh Prolog tu . . x´ac di . nh c´ach th´u . c “dˆa ˜ n” ra l`o . i gia ’ icu ’ avˆa ´ n dˆe ` . Ngo`ai ra Prolog cho ph´ep gia ’ i quyˆe ´ t c´ac vˆa ´ n dˆe ` m`a l`o . i gia ’ i l`a khˆong tˆa ´ t di . nh v`a l`am viˆe . cv´o . i c´ac dˆo ´ itu . o . . ng ho`an to`an chu . a du . o . . cbiˆe ´ t ho˘a . cm´o . ichı ’ biˆe ´ t mˆo . t phˆa ` nvˆe ` ch´ung. C˜ung nhu . c´ac ngˆon ng˜u . lˆa . p tr`ınh truyˆe ` n thˆo ´ ng: Pascal, C, ngu . `o . ita xˆay du . . ng phˆa ` nmˆe ` m Turbo-Prolog gi´up cho ngu . `o . ilˆa . p tr`ınh cha . y chu . o . ng tr`ınh Prolog dˆe ˜ d`ang v`a hiˆe . u qua ’ ho . n. Turbo-Prolog tro . ’ th`anh mˆo . t cˆong cu . lˆa . p tr`ınh rˆa ´ th˜u . udu . ng v´o . inh˜u . ng l´y do sau dˆay: 1. C´o thˆe ’ ta . o ra c´ac chu . o . ng tr`ınh dˆo . clˆa . pcha . y trˆen c´ac m´ay PC, v`a cho ph´ep dˆe ˜ d`ang truy cˆa . p dˆe ´ nbˆo . nh´o . v`a c´ac cˆo ’ ng v`ao/ra c˜ung nhu . c´ac kha ’ n˘ang phˆo ´ iho . . p c´ac chu . o . ng tr`ınh viˆe ´ tb˘a ` ng m˜a m´ay v`ao trong chu . o . ng tr`ınh Turbo Prolog. 2. Turbo Prolog duy tr`ı tˆen biˆe ´ ncu ’ a riˆeng ngu . `o . ilˆa . p tr`ınh, ngh˜ıa l`a kˆe ’ ca ’ khi chu . o . ng tr`ınh d˜a du . o . . c biˆen di . ch, ta vˆa ˜ n c´o thˆe ’ l`am chu ’ chu . o . ng tr`ınh gˆo ´ c. Trong khi t`ım v`a g˜o . lˆo ˜ i, ta d`ung vˆe ´ t(trace) cho ph´ep quan s´at viˆe . c thu . . chiˆe . n chu . o . ng tr`ınh v`a qu´a tr`ınh thao t´ac qua c´ac d´ıch (goal). 3. Turbo Prolog l`a mˆo . t mˆoi tru . `o . ng ph´at triˆe ’ n chu . o . ng tr`ınh ho`an to`an theo mˆo dun. C´ac mˆodun chu . o . ng tr`ınh viˆe ´ t trong Turbo Prolog ho˘a . c 4.1. Mo . ’ dˆa ` u 129 c´ac ngˆon ng˜u . kh´ac nhu . C, Assembler, c´o thˆe ’ du . o . . cnˆo ´ ila . iv´o . i nhau th`anh mˆo . tchu . o . ng tr`ınh. 4. C´ac tˆan t`u . c´o s˘a ˜ n trong hˆe . thˆo ´ ng cho ph´ep su . ’ du . ng c´ac tˆe . p truy nhˆa . p tru . . ctiˆe ´ p(random access files). 5. To`an bˆo . c´ac thao t´ac t´ınh to´an v´o . i c´ac sˆo ´ nguyˆen, sˆo ´ thu . . c, c´ac h`am lu . o . . ng gi´ac c˜ung nhu . c´ac thao t´ac bit d`ung dˆe ’ viˆe ´ t c´ac chu . o . ng tr`ınh ´u . ng du . ng cho Rob ot v`a diˆe ` u khiˆe ’ nk˜ythuˆa . t, dˆe ` u du . o . . c du . a v`ao th`anh thao t´ac chuˆa ’ ncu ’ ahˆe . thˆo ´ ng Turbo Prolog. Turbo Prolog c´o thˆe ’ du . o . . csu . ’ du . ng: 1. Ta . o h`ınh mˆa ˜ u(prototype) cho mˆo . t chu . o . ng tr`ınh ´u . ng du . ng. Nh˜u . ng ´ytu . o . ’ ng ban dˆa ` uc´othˆe ’ du . o . . c mˆo h`ınh ho´a nhanh ch´ong b˘a ` ng Turbo Prolog v`a cha . ythu . ’ ngay mˆo h`ınh d´o. 2. Diˆe ` u khiˆe ’ n v`a chı ’ da . o c´ac qu´a tr`ınh sa ’ n xuˆa ´ t cˆong nghiˆe . p. 3. C`ai d˘a . t c´ac co . so . ’ d˜u . liˆe . u dˆo . ng quan hˆe . . 4. Di . ch ngˆon ng˜u . ho˘a . cdi . ch ngˆon ng˜u . tu . . nhiˆen cu ’ a con ngu . `o . i, ho˘a . cdi . ch t`u . mˆo . t ngˆon ng ˜u . lˆa . p tr`ınh n`ay sang mˆo . t ngˆon ng ˜u . lˆa . p tr`ınh kh´ac, ch˘a ’ ng ha . nmˆo . tchu . o . ng tr`ınh di . ch ngˆon ng˜u . viˆe ´ tb˘a ` ng Turbo Prolog di . ch du . o . . c ngˆon ng˜u . Basic sang ngˆon ng˜u . Ccha . y trong hˆe . diˆe ` u h`anh Unix trˆen m´ay t´ınh HP-9000. 5. Xˆay du . . ng c´ac giao diˆe . nb˘a ` ng ngˆon ng˜u . tu . . nhiˆen cho c´ac hˆe . thˆo ´ ng phˆa ` n mˆe ` m c´o s˘a ˜ n dˆe ’ c´o thˆe ’ truy cˆa . p v`a su . ’ du . ng ch´ung thuˆa . nlo . . iho . n. 6. Xˆay du . . ng c´ac Hˆe . chuyˆen gia v`a c´ac cˆong cu . (Tools) dˆe ’ xˆay du . . ng hˆe . chuyˆen gia. 7. Viˆe ´ t c´ac chu . o . ng tr`ınh ´u . ng du . ng cho Tr´ı tuˆe . nhˆan ta . ov`ach´u . ng minh di . nh l´y. 130 Chu . o . ng 4. Ngˆon ng˜u . PROLOG Chu . o . ng tr`ınh Prolog bao gˆo ` m c´ac khai b´ao: su . . khai b´ao n`ay du . o . . cta . o th`anh bo . ’ i3phˆa ` n: a) Tˆen v`a cˆa ´ utr´uc cu ’ a c´ac dˆo ´ itu . o . . ng trong b`ai to´an b) Tˆen c´ac quan hˆe . gi˜u . a c´ac dˆo ´ itu . o . . ng c) C´ac su . . kiˆe . n(fact) v`a luˆa . t(rule) mˆo ta ’ nh˜u . ng quan hˆe . n`ay. Su . . khai b´ao trong chu . o . ng tr`ınh Prolog du . o . . csu . ’ du . ng dˆe ’ x´ac di . nh mˆo ´ i quan hˆe . gi˜u . a c´ac d˜u . liˆe . u v`ao v`a c´ac d˜u . liˆe . uras˜edu . o . . c Prolog ta . o ra khi n´o su . ’ du . ng c´ac su . . kiˆe . n v`a luˆa . t. Ngo`ai nh˜u . ng khai b´ao cˆa ` n thiˆe ´ t, mˆo . tchu . o . ng tr`ınh Prolog c`on bao gˆo ` mmˆo . t danh s´ach c´ac mˆe . nh dˆe ` logic ho˘a . cda . ng c´ac su . . kiˆe . n, ch˘a ’ ng ha . n“Hˆom nay tr`o . imu . a” ho˘a . cda . ng luˆa . t, ch˘a ’ ng ha . n“Nˆe ´ u tr`o . imu . a m`a ba . nquˆen ˆo th`ı ba . ns˜eu . ´o . t”. Prolog c´o thˆe ’ thu . . chiˆe . n suy diˆe ˜ n, ch˘a ’ ng ha . n cho tru . ´o . c c´ac su . . kiˆe . n: Folin th´ıch Mery. Tom th´ıch Sam. v`a luˆa . t: Nˆe ´ u Tom th´ıch X th`ı Jeanette th´ıch X. Prolog c´o thˆe ’ suy diˆe ˜ nnhu . sau: Jeanette th´ıch Sam Ba . nc˜ung c´o thˆe ’ cho Prolog mˆo . t d´ıch, ch˘a ’ ng ha . n: H˜ay t`ım ngu . `o . i th´ıch Sam? Khi d´o Prolog s˜e su . ’ du . ng kha ’ n˘ang suy diˆe ˜ ncu ’ a m`ınh dˆe ’ t`ım ra tˆa ´ tca ’ c´ac l`o . i gia ’ i c´o thˆe ’ cu ’ a b`ai to´an. Khi mˆo . tchu . o . ng tr`ınh Prolog du . o . . c thu . . chiˆe . n, hˆe . thˆo ´ ng s˜e cˆo ´ g˘a ´ ng t`ım ra c´ac tˆa . p gi´a tri . c´o thˆe ’ thoa ’ m˜an d´ıch d˜a cho. Prolog su . ’ du . ng co . chˆe ´ backtracking (quay lui), ngh˜ıa l`a khi d˜a t`ım ra mˆo . tl`o . i gia ’ i th`ı quay la . ibˆa ´ t c´u . mˆo . t gia ’ thiˆe ´ t d˜a x´ac di . nh dˆe ’ xem liˆe . uc´or´ut ra du . o . . cl`o . i gia ’ im´o . in˜u . a khˆong. Prolog c´o mˆo . tc´u ph´ap rˆa ´ t ng˘a ´ ngo . nv`ado . n gia ’ n, nˆen dˆe ˜ ho . cho . n nhiˆe ` u so v´o . i c´ac ngˆon ng ˜u . lˆa . p tr`ınh truyˆe ` n thˆo ´ ng. 4.2. Ngˆon ng˜u . PROLOG 131 4.2 Ngˆon ng˜u . PROLOG Theo quan diˆe ’ mcu ’ alˆa . p tr`ınh logic, Prolog l`a mˆo . t ngˆon ng˜u . tˆan t`u . cˆa ´ p 1 c´o ha . n chˆe ´ du . o . . c xˆay du . . ng nˆen t`u . c´ac th`anh phˆa ` nco . ba ’ n sau dˆay: • Mˆo . tba ’ ng ch˜u . c´ai (tˆa . pc´ack´yhiˆe . uco . ba ’ ncu ’ a ngˆon ng˜u . ) • Tˆa . pc´ack´yhiˆe . uh˘a ` ng • Tˆa . pc´ack´yhiˆe . ubiˆe ´ n • Tˆa . pc´ack´yhiˆe . u h`am • Tˆa . pc´ack´yhiˆe . u phˆan c´ach • Tˆa . p c´ac to´an tu . ’ liˆen hˆe . 4.2.1 Qui t˘a ´ c c´u ph´ap C´ac qui t˘a ´ cc´u ph´ap cu ’ amˆo . t ngˆon ng˜u . mˆo ta ’ c´ach th´u . cgh´ep nˆo ´ ita . onˆen c´ac t`u . cu ’ a ngˆon ng˜u . . Thuˆa . tng˜u . “term”d`ung dˆe ’ chı ’ mˆo . t d˜ay c´ac k´yhiˆe . uco . ba ’ nph`uho . . pv´o . i c´ac qui t˘a ´ cc´u ph´ap cu ’ a ngˆon ng˜u . . Ngˆon ng˜u . Prolog phˆan biˆe . t 3 loa . i“term”: • C´ac h˘a ` ng • C´ac biˆe ´ n • C´ac kiˆe ’ u term du . o . . cgo . i chung l`a cˆa ´ utr´uc. 4.2.2 C´ac kiˆe ’ u dˆo ´ itu . o . . ng 4.2.2.1 Ba ’ ng k´y hiˆe . uco . ba ’ n 132 Chu . o . ng 4. Ngˆon ng˜u . PROLOG 1. Nh´om c´ac k´yhiˆe . uviˆe ´ t hoa ABCDEFGHIJKLM NOPQRSTUV WXY Z 2. Nh´om c´ac k´yhiˆe . uviˆe ´ tthu . `o . ng abcdefghijklm nopqrstuvwxyz 3. Nh´om c´ac ch˜u . sˆo ´ 0123456789 4. Nh´om c´ac k´yhiˆe . u d˘a . cbiˆe . t ;”#$%& () | | - ∼ } ][{ + − ; ∗ : <> , . ? 4.2.2.2 C´ac h˘a ` ng Trong Prolog c´ac h˘a ` ng d`ung dˆe ’ d˘a . t tˆen c´ac dˆo ´ itu . o . . ng v`a c´ac quan hˆe . riˆeng biˆe . t, v`a ta cˆa ` n pha ’ i phˆan biˆe . t hai loa . ih˘a ` ng: h˘a ` ng k´y hiˆe . u v`a h˘a ` ng sˆo ´ . C´o hai kiˆe ’ uh˘a ` ng k´yhiˆe . u: –Kiˆe ’ uth´u . nhˆa ´ t l`a mˆo . t d˜ay c´ac ch˜u . v`a c´ac ch˜u . sˆo ´ b˘a ´ t dˆa ` ub˘a ` ng mˆo . tch˜u . viˆe ´ tthu . `o . ng ch˘a ’ ng ha . n: ta . ich´u . c, c500, john. –Kiˆe ’ uth´u . hai l`a mˆo . t d˜ay k´y tu . . bˆa ´ tk`yn˘a ` mgi˜u . a hai dˆa ´ u nh´ay do . n, ch˘a ’ ng ha . n ‘hoa lan’, ngo`ai ra dˆa ´ uga . ch thˆa ´ p“” du . o . . cd`ung dˆe ’ ch`en v`ao gi˜u . a hai d˜ay k´y hiˆe . u l`am cho h˘a ` ng d´o dˆe ˜ do . c, dˆe ˜ hiˆe ’ uho . n nhiˆe ` u. C´ac d˜ay k´yhiˆe . u sau dˆay khˆong pha ’ i l`a c´ac h˘a ` ng k´y hiˆe . u : 124k, Void, 1hoa lan, alpha. C´ac h˘a ` ng sˆo ´ d`ung dˆe ’ biˆe ’ udiˆe ˜ nd˜u . liˆe . usˆo ´ . C´ac thao t´ac t´ınh to´an c´o thˆe ’ du . o . . c thu . . chiˆe . nv´o . ich´ung. 4.2. Ngˆon ng˜u . PROLOG 133 Ba ’ ng c´ac miˆe ` nd˜u . liˆe . u chuˆa ’ ncu ’ a Prolog - integer:sˆo ´ nguyˆen t`u . - 32768 dˆe ´ n 32767. - real:sˆo ´ thu . . ccha . yt`u . ±10 −307 dˆe ´ n ±10 +307 - char:k´ytu . . du . o . . cviˆe ´ t trong hai dˆa ´ u nh´ay do . n, ch˘a ’ ng ha . n: ‘a , ‘b , ‘c - string: xˆau k´ytu . . du . o . . cviˆe ´ tgi˜u . a hai dˆa ´ u nh´ay k´ep, ch˘a ’ ng ha . n“ch`ao c´ac ban” - file: l`a c´ac tˆe . p tin - symbol: c´o hai loa . ik´yhiˆe . u 1. D˜ay c´ac ch˜u . , c´ac sˆo ´ v`a dˆa ´ uga . ch thˆa ´ p. D˜ay n`ay pha ’ ib˘a ´ t dˆa ` u b˘a ` ng mˆo . tch˜u . viˆe ´ tthu . `o . ng, ch˘a ’ ng ha . n: anh em. 2. D˜ay k´ytu . . n˘a ` mgi˜u . ac˘a . pdˆa ´ u nh´ay k´ep ch˘a ’ ng ha . n: “DR no”, “Hanoi”, v.v Ch´u ´y: Symbol (k´y hiˆe . u) v`a string (xˆau) c´o thˆe ’ su . ’ du . ng thay cho nhau, nhu . ng ch´ung du . o . . cxu . ’ l´y kh´ac nhau. 4.2.2.3 C´ac biˆe ´ n Biˆe ´ n pha ’ ib˘a ´ t dˆa ` ub˘a ` ng mˆo . tch˜u . viˆe ´ t hoa ho˘a . cmˆo . tdˆa ´ uga . ch thˆa ´ p“” (du . o . . cgo . i l`a biˆe ´ n vˆo danh anonymous variable). Biˆe ´ n vˆo danh c´o mˆo . t t´ınh chˆa ´ trˆa ´ t d˘a . cbiˆe . t l`a n´o c´o thˆe ’ k´yhiˆe . u cho mo . i dˆo ´ itu . o . . ng, v`ı thˆe ´ n´o c´o thˆe ’ du . o . . csu . ’ du . ng v`ao bˆa ´ tk`ychˆo ˜ n`ao m`a mˆo . tbiˆe ´ n kh´ac c´o thˆe ’ d`ung du . o . . c, nhu . ng khˆong cˆa ` n nhˆa . nmˆo . t gi´a tri . cu . thˆe ’ . Ch´u ´y: Ta cˆa ` n phˆan biˆe . t hai loa . ibiˆe ´ n • Biˆe ´ ntu . . do: Prolog khˆong biˆe ´ t gi´a tri . cu ’ a n´o, • Biˆe ´ n r`ang buˆo . c: Prolog biˆe ´ t gi´a tri . cu ’ a n´o. Th´ı du . 4.2.1 134 Chu . o . ng 4. Ngˆon ng˜u . PROLOG domains person, hobby=symbol predicates likes(person, hobby) clauses likes(john, reading). likes(ellen, computers). likes(eric, swimming). likes(eric, reading). Cha . y chu . o . ng tr`ınh theo chˆe ´ dˆo . Interactive Mode (hˆo . i thoa . i) Goal: likes(X, reading)← Kˆe ´ t qua ’ l`a: X=ellen X=eric 2 solutions trong d´o X du . o . . c xem l`a biˆe ´ ntu . . do g˘a ´ nliˆe ` nv´o . i quan hˆe . cu ’ alu . o . . ng t`u . to`an thˆe ’ ∀, c`on reading du . o . . c xem l`a r`ang buˆo . cg˘a ´ nliˆe ` nv´o . i quan hˆe . cu ’ alu . o . . ng t`u . tˆo ` nta . i ∃. 4.2.2.4 C´ac cˆa ´ utr´uc Cˆa ´ utr´uc l`a loa . i term th´u . 3 (thu . `o . ng du . o . . cgo . il`abiˆe ´ n h`am f) du . o . . csu . ’ du . ng trong chu . o . ng tr`ınh Prolog. Mˆo . tcˆa ´ utr´uc l`a mˆo . t dˆo ´ itu . o . . ng do . n du . o . . cta . onˆen t`u . mˆo . ttˆa . pho . . p c´ac dˆo ´ i tu . o . . ng kh´ac go . i l`a c´ac th`anh phˆa ` n. C´ac th`anh phˆa ` n du . o . . cliˆen kˆe ´ tv´o . i nhau trong mˆo . tcˆa ´ utr´uc dˆe ’ c´o thˆe ’ xu . ’ l´y ch´ung mˆo . t c´ach thuˆa . ntiˆe . n v`a thˆo ´ ng nhˆa ´ t. Mˆo . tcˆa ´ utr´uc du . o . . cviˆe ´ t trong c´u ph´ap Prolog b˘a ` ng c´ach mˆo ta ’ tˆen du . o . . c go . il`a“functor”cu ’ acˆa ´ utr´uc, sau d´o mˆo ta ’ c´ac th`anh phˆa ` n. C´ac th`anh phˆa ` n n`ay du . o . . cviˆe ´ t trong hai dˆa ´ u ngo˘a . c do . n, v`a c´ach nhau bo . ’ i c´ac dˆa ´ u phˆa ’ y. Th´ı du . 4.2.2 co(john, sach( doi gio hu, ten tac gia(emily, brownte))) [...]... error return codes */ grOk = 0 grNoInitGraph = -1 grNotDetected = -2 grFileNotFound = -3 grInvalidDriver = -4 grNoLoadMem = -5 grNoScanMem = -6 grNoFloodMem = -7 grFontNotFound = -8 grNoFontMem = -9 grInvalidMode = -1 0 grError = -1 1 /* generic error */ grIOerror = -1 2 grInvalidFont = -1 3 grInvalidFontNum = - 14 grInvalidDeviceNum = -1 5 151 Chu.o.ng 4 Ngˆn ng˜ PROLOG o u 152 /* define graphics drivers */... MCGAMED = 4 /* 640 x200 1 page */ 4. 6 Mˆt sˆ th´ du minh hoa vˆ lˆp tr`nh PROLOG o o ı e ı ´ ` a 153 MCGAHI = 5 /* 640 x480 2 color 1 page */ EGALO = 0 /* 640 x200 4 pages */ EGAHI = 1 /* 640 x350 16 color 2 pages */ EGA64LO = 0 /* 640 x200 16 color 1 page */ EGA64HI = 1 /* 640 x350 4 color 1 page */ EGAMONOHI = 3 /* 640 x350 64K on card, 1 page - 256K on card, 4 pages */ HERCMONOHI = 0 /* 720x 348 2 pages... ATT400C0 = 0 /* 320x200 color palette 0: red, yellow, green, 1 page */ ATT400C1 = 1 /* 320x200 color palette 1: cyan, magenta, white, 1 pg */ ATT400C2 = 2 /* 320x200 color palette 2: */ ATT400C3 = 3 /* 320x200 color palette 3: */ ATT400MED = 4 /* 640 x200 1 page */ ATT400HI = 5 /* 640 x400 1 page */ VGALO = 0 /* 640 x200 16 color 4 pages */ VGAMED = 1 /* 640 x350 16 color 2 pages */ VGAHI = 2 /* 640 x480... e o a a ` • Phˆn include “filename” a ˜ - Yˆu cˆu khi chay, Turbo Prolog du.a thˆm v`o mˆt tˆp tin c´ s˘n e ` a e a o e o a ’ trong ˆ d˜ A:, B:, C:, o ıa Th´ du 4. 3.3 include “A:\ Grapdecl Pro” ı ´ 4. 4 Tˆn t` FAIL, nh´t c˘t (!) v` tˆn t` NOT a u a a a a u 4. 4 141 ´ Tˆn t` FAIL, nh´t c˘t (!) v` tˆn t` NOT a u a a a a u ’ ’ 4. 4.1 Tˆn t` fail yˆu cˆu Turbo Prolog sau khi t`m du.o.c mˆt l`.i giai phai... e o Th´ du 4. 2.6 round (-3 .2) =-3 ı ´ ´ ´ ´ ´ ’ a ’ ` o a o e a a a a a - trunc(x) dˆi l` sˆ thu.c, kˆt qua l` bo phˆn thˆp phˆn sau dˆ u chˆ m 4. 2.3 .4 C´c ph´p to´n logic a e a =def and | , | =def or | ; | ’ dˆy dˆ u , | , thay cho “hay l`” ´ a O a a | ´ 4. 3 Cˆ u tr´c cua chu.o.ng tr`nh PROLOG a u ’ ı 4. 3 139 ´ ’ Cˆu tr´c cua chu.o.ng tr` a u ınh PROLOG ´ ’ o Chu.o.ng tr` Prolog c´ phˆn... pro*/ ı Goal A=one B =43 2.7685 writef(“A=’ % -8 ’ \ B=’% 10.2e’ \ n” , A, B), writef(“%% c” , 4, 4) ´ ’ a ınh o e Khi chay chu.o.ng tr` ta c´ kˆt qua l`: A = ‘one B = 4. 33E + 02 4 ´ 4. 5 Phu.o.ng th´.c xuˆ t nhˆp d˜ liˆu u a a u e 4. 5.2 145 u e Phu.o.ng th´.c nhˆp d˜ liˆu u a ’ Ta c´ 5 tˆn t` nhˆp d˜ liˆu chuˆ n sau dˆy: o a u a u e a a - readln(X) - readint(X) ’ ’ ´ biˆn X c´ kiˆ u xˆu ho˘c kiˆ... uni(depressed).uni(unhappy).uni(help).uni(mother) ans(”depressed”) :-! , write(”I’M SORRY PRESSED”),nl,run1 TO HEAR YOU ARE DE- ans(”unhappy”):write(”-DO YOU THINK COMING HERE WILL HELP YOU”, ” NOT TO BE UNHAPPY”),nl,run1 ans(”help”) :-! , write(”-WHAT WOULD IT MEAN TO YOU IF YOU GOT ”,”HELP?”),nl,run ans(”mother”) :-! , write(”-TELL ME MORE ABOUT YOUR FAMILY”),nl,run1 Chu.o.ng 4 Ngˆn ng˜ PROLOG o u 160 goal run,exit ’ a Th´ du 4. 6.6 C´c thu tuc v`o... solutions 4. 5 4. 5.1 ´ Phu.o.ng th´.c xuˆt nhˆp d˜ liˆu u a a u e ´ u a u e Phu.o.ng th´.c xuˆ t d˜ liˆu - Ta d`ng tˆn t` sau dˆy: u a u a write(Arg1, Arg2, , ArgN) ´ - Xuˆ t theo khuˆn dang ta d`ng tˆn t` sau: a o u a u write(Formatstring, Arg1, Arg2, , ArgN) ’ a a o o ` ´ ´ ´ a u a a e a O dˆy c´c dˆi sˆ Arg1, Arg2, ArgN l` nh˜.ng xˆu ho˘c biˆn, h˘ ng 144 Chu.o.ng 4 Ngˆn ng˜ PROLOG o u Th´ du 4. 5.1... % - m.pf o trong d´: ’ - % chı thi khuˆn dang, o ´ ’ ’ a ` a ’ a ` ’ - Dˆ u gach ngang nho - chı c˘n lˆ tr´i (khˆng gach ngang chı c˘n lˆ phai) a e o e ’ ’ o a o e ’ o u - m dˆ d`i tˆ ng thˆ cua khuˆn dang lu.u tr˜ ´ ´ ´ ´ ’ o a - p chı sˆ c´c ch˜ sˆ thˆp phˆn sau dˆ u chˆ m u o a a a a ’ - f cho ph´p in gi´ tri dang khuˆn chuˆ n e a o a Th´ du 4. 5.2 /* Writef pro*/ ı Goal A=one B =43 2.7685... c´ kˆt qua ınh o e H =2 T = [4, 6] 4. 2.3 ’ C´c ph´p to´n, quan hˆ v` h`m chuˆ n a e a e a a a ’ ´ ’ 4. 2.3.1 C´c ph´p to´n sˆ hoc v` kiˆ u to´n tu a e a o a e a ’ ’ ´ ’ ’ Bang c´c kiˆ u cua to´n hang v` kˆt qua a e a a e Chu.o.ng 4 Ngˆn ng˜ PROLOG o u 138 To´n hang 1 a integer integer real real integer or real integer integer To´n tu a ’ +, -, * +, -, * +, -, * +, -, * / div mod To´n hang 2 a . Chương 4. Ngôn ngữ Prolog Trần Thọ Châu Logic Toán. NXB Đại học quốc gia Hà Nội 2007. Tr 12 6-1 65. Từ khoá: Logic toán, Đại số mệnh đề, Hàm đại số logic, Ngôn ngữ Prolog, . nhˆa . pd˜u . liˆe . u 143 4. 5.1 Phu . o . ng th´u . c xuˆa ´ td˜u . liˆe . u 143 4. 5.2 Phu . o . ng th´u . c nhˆa . pd˜u . liˆe . u 145 4. 6 Mˆo . tsˆo ´ th´ı du . minh hoa . vˆe ` lˆa . ptr`ınh PROLOG 148 4. 7 B`ai. giả. Chu . o . ng 4 Ngˆon ng˜u . PROLOG 4. 1 Mo . ’ dˆa ` u 127 4. 2 Ngˆon ng˜u . PROLOG 131 4. 2.1 Qui t˘a ´ cc´uph´ap 131 4. 2.2 C´ac kiˆe ’ u dˆo ´ itu . o . . ng 131 4. 2.3 C´ac ph´ep to´an,