Phần còn lại của các mệnh đề trong một chương trình Prolog được gọi là luật. Nó thường thể hiện những phát biểu logic trong bài toán, ví dụ như nếu công tác đèn bật thì đèn sáng
Nội dung trích xuất từ tài liệu:
Lập Trình Logic Trong ProLog - PGS.TS. PHAN HUY KHÁNH phần 10 167K thu t l p trình Prolog displaylist( [X | L ] ) :- write( X ), tab( 1), displaylist( L), nl. YesIII.3. ng d ng ch làm vi c v i các t pIII.3.1. nh d ng các h ng Gi s m t b n ghi cơ s d li u, là m t s ki n có d ng c u trúc hàm t c aProlog, có n i dung như sau : family( individual(tom, smith, date(7, may, 1960), work(microsoft, 30000)), individual( ann, smith, date(9, avril, 1962), inactive), [ individual( roza, smith, date(16, june, 1991), inactive), individual( eric, smith, date(23, march, 1993), inactive) ] ). Ta c n in ra n i dung b n ghi s d ng v t write(F) theo quy cách nhưsau : parents tom smith, birth day may 7,1960, work microsoft, salary 30000 ann smith, birth day avril 9, 1962, out of work children roza smith, birth day june 16, 1991, out of work eric smith, birth day march 23, 1993, out of work Ta xây d ng th t c writefamily( F) như sau : writefamily(family(Husband, Wife, Children)) :- nl, write(parents),nl, nl, writeindividual(Husband) ,nl, writeindividual(Wife), nl, nl, write(children), nl, nl, writeindividual(Children). writeindividual(individual(Firstname, Name, date(D, M, Y), Work)) :- tab(4), write(Firstname), tab(1), write(Name), write(, birth day ), write(M), tab(1), write(D), tab(1), write(, ), write(Y), write(, L p trình lägich trong Prolog168 ), writework(Work). writeindividual([ ]). writeindividual([ P | L] ):- writeindividual( P), nl, writeindividual( L). writework(inactive):- write(out of work). writework(work(Soc, Sal)):- write( work ), write(Soc), write(, salaire ), write(Sal). Th c hi n íchX = ..., writefamily(X), ta nh n ư c k t qu như sau ?- X = family(individual( tom, smith, date(7, may, 1960), work(microsoft, 30000) ),individual( ann, smith, date(9, avril, 1962), inactive),[individual( roza, smith, date(16, june, 1991), inactive),individual( eric, smith, date(23, march, 1993), inactive) ] ), writefamily(X). parents tom smith, birth day may 7 , 1960, work microsoft, salaire 30000 ann smith, birth day avril 9 , 1962, out of work children roza smith, birth day june 16 , 1991, out of work eric smith, birth day march 23 , 1993, out of work X = family(individual(tom, smith, date(7, may, 1960), work(microsoft, 30000)), individual(ann, smith, date(9, avril, 1962), inactive), [individual(roza, smith, date(16, june, 1991), inactive), individual(eric, smith, date(23, march, 1993), inactive)]) YesIII.3.2. S d ng t p x lý các h ng c d li u trên t p, ngư i ta s d ng dãy ích sau : ..., see( F), fileprocess, see( user), ... Th t c fileprocess c và x lý l n lư t t ng h ng c a F cho n khi ch t t p. Mô hình th t c như sau : filetreat :- read( Term), treat( Term). % K t thúc t p treat( end_of_file) :- !. treat( Term) :- 169K thu t l p trình Prolog treatment( Term), % X lý h ng hi n hành % X lý ph n còn l i c a t p filetreat. Trong th t c trên, treatment( Terme) th hi n m i thao tác có th tác ng lên h ng. Ch ng h n th t c dư i ây li t kê t ng h ng c a t p k t dòngth N tr i cho n h t t p, kèm theo th t có m t c a h ng ó trong t p : viewfile( N) :- read( Term), viewterm( Term, N). viewterm( end_of_file, _ ) :- !. viewterm( Term, N) :- write( N), tab( 2), write( Term), nl, N1 is N + 1, viewfile( N1). ?- see(exp.txt), viewfile(1), see( user), seen. 1 parent(pam, bob) 2 parent(tom, bob) 3 parent(tom, liz) 4 parent(bob, ann) 5 parent(bob, pat) … Yes Sau ây là m t mô hình khác x lý t p. Gi s file1 là t p d li u ngu nch a các h ng có d ng : object( NoObject, Description, Price, FurnisherName). M i h ng mô t m t ph n t c a danh sách các i tư ng. Gi s r ng t p c nxây d ng file2 ch a các i tư ng do cùng m t nhà cung c p c p hàng. Trongt p này, tên nhà cung c p ư c vi t m t l n u t p, mà không xu t hi n trongcác i tư ng, có d ng object( No, Desc, Price). Th t c t o t p nhưsau : createfile(Furnisher) :- write(Furnisher), write( ‘.‘), nl, creatremaining(Furnisher). creatremaining( Fournisseur) :- read( Objet), treat( Objet, Furnisher). treat( end_of_file) :- !. treat(object( No, Desc, Price, Furn), Furn) :- write( object( No, Desc, Price) ), write( ‘.‘), nl, creatremaining(Furn). L p trình lägich trong Prolog170 treat( _ , Furnisher) :- creatremaining(Furnisher). Gi s file1 là t p see( file1.txt),tell( file2.txt), createfile(suzuki),seen, see(user), told, tell(user).Ví d III.10 : Sao chép n i dung m t t p lên m t t p khác : copie :- repeat, read(X), mywrite(X), X == end_of_file, !. mywrite( end_of_file). mywrite( X) :- write( X), write( .), nl. ích sau cho phép côpy t t p ngu n f1.txt vào t p ích f2.txt : ?- tell(f2.txt), see(f1.txt), copie, seen, told. Yes Trong th t c copie có s d ng v t repeat. V t repeat luôn luônthành công, t o ra m t vòng l p vô h n. V t repeat ư c nh nghĩa như sau : repeat. repeat :- repeat.III.3.3. ...