II. CÀI ĐẶT HỆ THỐNG SUY DIỄN 1) Phát biểu bài toán
5) Sử dụng ngôn ngữ lập trình Prolog để cài đặt chương trình chọn ngày giờ tốt để khai trương trong năm 2014.
chọn ngày giờ tốt để khai trương trong năm 2014.
Dựa vào phương pháp suy diễn để dẫn ra các sự kiện và các giả thuyết mới đồng thời tạo ra các luật dẫn.
1. Xác định các luật dẫn
- Luật dẫn 1: Xác định can
Nếu phần dư ((năm sinh - 4) / 10) = 0 thì can Giáp Nếu phần dư ((năm sinh - 4) / 10) = 1 thì can Ất Nếu phần dư ((năm sinh - 4) / 10) = 2 thì can Bính Nếu phần dư ((năm sinh - 4) / 10) = 3 thì can Đinh Nếu phần dư ((năm sinh - 4) / 10) = 4 thì can Mậu Nếu phần dư ((năm sinh - 4) / 10) = 5 thì can Kỷ Nếu phần dư ((năm sinh - 4) / 10) = 6 thì can Canh Nếu phần dư ((năm sinh - 4) / 10) = 7 thì can Tân Nếu phần dư ((năm sinh - 4) / 10) = 8 thì can Nhâm Nếu phần dư ((năm sinh - 4) / 10) = 9 thì can Quý - Luật dẫn 2: Xác định chi
Nếu phần dư ((năm sinh - 4) / 12) = 0 thì chi Tý Nếu phần dư ((năm sinh - 4) / 12) = 1 thì chi Sửu Nếu phần dư ((năm sinh - 4) / 12) = 2 thì chi Dần Nếu phần dư ((năm sinh - 4) / 12) = 3 thì chi Mẹo Nếu phần dư ((năm sinh - 4) / 12) = 4 thì chi Thìn Nếu phần dư ((năm sinh - 4) / 12) = 5 thì chi Tỵ Nếu phần dư ((năm sinh - 4) / 12) = 6 thì chi Ngọ Nếu phần dư ((năm sinh - 4) / 12) = 7 thì chi Mùi Nếu phần dư ((năm sinh - 4) / 12) = 8 thì chi Thân Nếu phần dư ((năm sinh - 4) / 12) = 9 thì chi Dậu Nếu phần dư ((năm sinh - 4) / 12) = 10 thì chi Tuất
Nếu phần dư ((năm sinh - 4) / 12) = 11 thì chi Hợi - Luật dẫn 3: Xác định mạng
Nếu tuổi Giáp Tý, Ất Sửu, Giáp Ngọ, Ất Mùi, Nhâm Thân, Quý Dậu, Nhâm Dần, Quý Mão, Canh Thìn, Tân Tị, Canh Tuất, Tân Hợi thì mạng Kim
Nếu tuổi Mậu Thìn, Kỷ Tị, Mậu Tuất, Kỷ Hợi, Nhâm Ngọ, Quý Mùi, Nhâm Tý, Quý Sửu, Canh Dần, Tân Mão, Canh thân, Tân Dậu thì mạng Mộc
Nếu tuổi Bính Tý, Đinh Sửu, Bính Ngọ, Đinh Mùi, Giáp Thân, Ất Dậu, Giáp Dần, Ất Mão, Nhâm Thìn, Quý Tị, Nhâm Tuất, Quý Hợi thì mạng Thuỷ
Nếu tuổi Bính Dần, Đinh Mão, Bính Thân, Đinh Dậu, Giáp Tuất, Ất Hợi, Giáp Thìn, Ất Tị, Mậu Ngọ, Kỷ Mùi, Mậu Tý, Kỷ Sửu thì mạng Hoả.
Nếu tuổi Canh Ngọ, Tân Mùi, Canh Tý, Tân Sửu, Mậu Dần, Kỷ Mão, Mậu Thân, Kỷ Dậu, Bính Tuất, Đinh Hợi, Bính Thân, Đinh Tị thì mạng Thổ.
- Luật dẫn 4: Xác định chi hợp
Nếu chi là Dần, Ngọ, Tuất thì hợp nhau Nếu chi là Thân, Tý, Thìn thì hợp nhau Nếu chi là Tỵ, Dậu, Sửu thì hợp nhau Nếu chi là Hợi, Mão, Mùi thì hợp nhau Ngược lại thì không hợp không kỵ Nếu chi là Tý thì hợp Sửu
Nếu chi là Thìn thì hợp Dậu Nếu chi là Dần thì hợp Hợi Nếu chi là Tỵ thì hợpThân Nếu chi là Mão thì hợp Tuất Nếu chi là Ngọ thì hợp Mùi
Ngược lại thì không hợp không kỵ - Luật dẫn 5: Xác định chi không hợp
Nếu chi là Tý thì khắc Ngọ Nếu chi là Tỵ thì khắc Hợi Nếu chi là Mão thì khắc Dậu Nếu chi là Thìn thì khắc Tuất Nếu chi là Dần thì khắc Thân Nếu chi là Sửu thì khắc Mùi Ngược lại thì không hợp không kỵ - Luật dẫn 6: Định điểm theo can
Nếu can là hợp thì cộng 1 điểm Nếu can là kỵ thì trừ 1 điểm
Nếu can không hợp không kỵ thì không cộng điểm. - Luật dẫn 7: Định điểm theo chi
Nếu chi là hợp thì cộng 1 điểm Nếu chi là kỵ thì trừ 1 điểm
Nếu chi không hợp không kỵ thì không cộng điểm - Luật dẫn 8: Định điểm theo mạng
Nếu mạng là tương khắc thì trừ 1 điểm
Nếu mạng không sinh không khắc thì không cộng điểm - Luật dẫn 9: Định tổng điểm của ngày theo điểm can, chi, mạng
Tổng điểm khi so sánh hợp/kỵ (tương sinh/tương khắc) của can, chi và mạng.
- Luật dẫn 10: Định điểm cho ngày tốt cơ bản
Tổng điểm ban đầu của ngày (điểm khi so khớp với ngày trực) và điểm khi so sánh can, chi, mạng.
2. Xây dựng các vị từ
Luật dẫn Vị từ Giải thích
1 can(Y,Y1) Xác định thiên can Y1 dựa vào năm Y 2 chi(Y,Y1) Xác định địa chi Y1 dựa vào năm Y
3 mang(C,Ch,M) Xác định mạng M dựa vào can C và chi Ch 4 chi_hop(C,KQ) Xác định các chi hợp với chi C
5 chi_k_hop(C,KQ) Xác định các chi không hợp với chi C 6 diem_can(C1,C2,D) Xác định điểm D cho ngày dựa theo vào so
sánh 2 can C1 và C2 hợp hay kỵ nhau. 7 diem_chi(CH1,CH2,
D):-
Xác định điểm D cho ngày dựa theo vào so sánh 2 chi CH1 và CH2 hợp hay kỵ nhau.
8 diem_mang(M1,M2,
D):-
Xác định điểm D cho ngày dựa theo vào so sánh 2 mạng M1 và M2 tương sinh hay tương khắc
9 diem(C1,CH1,C2,C
H2,D):-
Xác định điểm của ngày can C2- chi CH2 so với tuổi can C1-chi CH1
10 diem_ngay(T,X,C1, CH1,C2,CH2,AL,D)
Xác định điểm của ngày AL trong tháng T
3. Chương trình domains list=string* predicates can(integer,string) chi(integer,string) mang(string,string,string) chi_hop(string,symbol)
chi_k_hop(string,symbol) thang(integer,integer) ngay(integer,integer,string,string,string,integer) diem_can(string,string,integer) diem_chi(string,string,integer) diem_mang(string,string,integer) diem(string,string,string,string,integer) diem_ngay(integer,integer,string,string,string,string,string,integer) hien_thi_cac_ngay(integer,integer,string,string) run clauses
% Luat dan 1: xac dinh can
can(Y,Y1):- (Y-4) mod 10=0,Y1="Giap"; (Y-4) mod 10=1,Y1="At"; (Y-4) mod 10=2,Y1="Binh"; (Y-4) mod 10=3,Y1="Dinh"; (Y-4) mod 10=4,Y1="Mau"; (Y-4) mod 10=5,Y1="Ky"; (Y-4) mod 10=6,Y1="Canh"; (Y-4) mod 10=7,Y1="Tan"; (Y-4) mod 10=8,Y1="Nham"; (Y-4) mod 10=9,Y1="Quy". % Luat dan 2: xac dinh chi
chi(Y,Y1):- (Y-4) mod 12=0,Y1="Ty'"; (Y-4) mod 12=1,Y1="Suu"; (Y-4) mod 12=2,Y1="Dan"; (Y-4) mod 12=3,Y1="Mao"; (Y-4) mod 12=4,Y1="Thin"; (Y-4) mod 12=5,Y1="Ti."; (Y-4) mod 12=6,Y1="Ngo"; (Y-4) mod 12=7,Y1="Mui"; (Y-4) mod 12=8,Y1="Than"; (Y-4) mod 12=9,Y1="Dau"; (Y-4) mod 12=10,Y1="Tuat"; (Y-4) mod 12=11,Y1="Hoi". %Luat dan 3: xac dinh mang
mang(C,Ch,M):- C="Giap",Ch="Ty'",M="Kim"; C="At",Ch="Suu",M="Kim"; C="Giap",Ch="Ngo",M="Kim"; C="At",Ch="Mui",M="Kim"; C="Nham",Ch="Than",M="Kim"; C="Quy",Ch="Dau",M="Kim"; C="Nham",Ch="Dan",M="Kim"; C="Quy",Ch="Mao",M="Kim"; C="Canh",Ch="Thin",M="Kim"; C="Tan",Ch="Ti.",M="Kim"; C="Canh",Ch="Tuat",M="Kim"; C="Tan",Ch="Hoi",M="Kim"; C="Mau",Ch="Thin",M="Moc"; C="Ky",Ch="Ti.",M="Moc"; C="Mau",Ch="Tuat",M="Moc";
C="Ky",Ch="Hoi",M="Moc"; C="Nham",Ch="Ngo",M="Moc"; C="Quy",Ch="Mui",M="Moc"; C="Nham",Ch="Ty'",M="Moc"; C="Quy",Ch="Suu",M="Moc"; C="Canh",Ch="Dan",M="Moc"; C="Tan",Ch="Mao",M="Moc"; C="Canh",Ch="Than",M="Moc"; C="Tan",Ch="Dau",M="Moc"; C="Binh",Ch="Ty'",M="Thuy"; C="Dinh",Ch="Suu",M="Thuy"; C="Binh",Ch="Ngo",M="Thuy"; C="Dinh",Ch="Mui",M="Thuy"; C="Giap",Ch="Than",M="Thuy"; C="At",Ch="Dau",M="Thuy"; C="Giap",Ch="Dan",M="Thuy"; C="At",Ch="Mao",M="Thuy"; C="Nham",Ch="Thin",M="Thuy"; C="Quy",Ch="Ti.",M="Thuy"; C="Nham",Ch="Tuat",M="Thuy"; C="Quy",Ch="Hoi",M="Thuy"; C="Binh",Ch="Dan",M="Hoa"; C="Dinh",Ch="Mao",M="Hoa"; C="Binh",Ch="Than",M="Hoa"; C="Dinh",Ch="Dau",M="Hoa"; C="Giap",Ch="Tuat",M="Hoa"; C="At",Ch="Hoi",M="Hoa"; C="Giap",Ch="Thin",M="Hoa"; C="At",Ch="Ti",M="Hoa"; C="Mau",Ch="Ngo",M="Hoa"; C="Ky",Ch="Mui",M="Hoa"; C="Mau",Ch="Ty'",M="Hoa"; C="Ky",Ch="Suu",M="Hoa"; C="Canh",Ch="Ngo",M="Tho"; C="Tan",Ch="Mui",M="Tho"; C="Canh",Ch="Ty'",M="Tho"; C="Tan",Ch="Suu",M="Tho"; C="Mau",Ch="Dan",M="Tho"; C="Ky",Ch="Mao",M="Tho"; C="Mau",Ch="Than",M="Tho"; C="Ky",Ch="Dau",M="Tho"; C="Binh",Ch="Tuat",M="Tho"; C="Dinh",Ch="Hoi",M="Tho"; C="Binh",Ch="Thin",M="Tho"; C="Dinh",Ch="Ti.",M="Tho".
% Luat dan 4: xac dinh chi hop
chi_hop(C,KQ):- C="Ty'", KQ="Than, Thin, Suu";
C="Suu" ,KQ="Ti., Dau, Ty'";C="Dan", KQ="Ngo, Tuat, Mui"; C="Mao", KQ="Hoi, Mui, Tuat";C="Thin", KQ="Than, Ty', Dau"; C="Ti.", KQ="Dau, Suu, Than"; C="Ngo", KQ="Dan, Tuat, Mui";C="Mui", KQ="Hoi, Mao, Ngo"; C="Than", KQ="Ty', Thin, Ti."; C="Dau", KQ="Ti., Suu, Thin";C="Tuat", KQ="Dan, Ngo, Mao"; C="Hoi", KQ="Mao, Mui, Dan".
%Luat dan 5: xac dinh chi khong hop
chi_k_hop(C,KQ):- C="Ty'", KQ="Ngo"; C="Suu", KQ="Mui"; C="Dan", KQ="Than"; C="Mao", KQ="Dau"; C="Thin", KQ="Tuat"; C="Ti.",
KQ="Hoi"; C="Ngo", KQ="Ty'"; C="Mui",KQ="Suu"; C="Than", KQ="Dan"; C="Dau", KQ="Mao"; C="Tuat", KQ="Thin"; C="Hoi", KQ="Ti.".
% Luat dan 6: xac dinh diem hop cua Can diem_can(C1,C2,D):- C1="Giap",C2="Ky",D=1; C1="Ky",C2="Giap",D=1; C1="At",C2="Canh",D=1;C1="Canh",C2="At",D=1; C1="Binh",C2="Tan",D=1;C1="Tan",C2="Binh",D=1; C1="Dinh",C2="Nham",D=1;C1="Nham",C2="Dinh",D=1; C1="Mau",C2="Quy",D=1;C1="Quy",C2="Mau",D=1;
C1="Giap",C2="Mau",D=-1;C2="Giap",C1="Mau",D=-1; C1="At",C2="Ky",D=-1;C2="At",C1="Ky",D=-1; C1="Binh",C2="Canh",D=-1; C2="Binh",C1="Canh",D=-1; C1="Dinh",C2="Tan",D=-1; C2="Dinh",C1="Tan",D=-1; C1="Mau",C2="Nham",D=-1; C2="Mau",C1="Nham",D=- 1; C1="Ky",C2="Quy",D=-1; C2="Ky",C1="Quy",D=-1; C1="Canh",C2="Giap",D=-1; C2="Canh",C1="Giap",D=-1; C1="Tan",C2="At",D=-1;C2="Tan",C1="At",D=-1; C1="Nham",C2="Binh",D=-1; C2="Nham",C1="Binh",D=- 1; C1="Quy",C2="Dinh",D=-1; C2="Quy",C1="Dinh",D=-1; D=0.
% Luat dan 7: xac dinh diem hop cua Chi diem_chi(CH1,CH2,D):-
CH1="Ty'", CH2="Than", D=1;CH1="Ty'",CH2="Thin",
D=1;CH1="Ty'",CH2="Suu", D=1;CH1="Suu" ,CH2="Ti.", D=1;CH1="Suu" , CH2="Dau", D=1;CH1="Suu" , CH2="Ty'", D=1;CH1="Dan", CH2="Ngo", D=1;CH1="Dan",CH2="Tuat", D=1;CH1="Dan",CH2="Mui", D=1;
CH1="Mao", CH2="Hoi", D=1;CH1="Mao", CH2="Mui", D=1;CH1="Mao", CH2="Tuat", D=1;CH1="Thin",CH2="Than", D=1; CH1="Thin",CH2="Ty'", D=1; CH1="Thin",CH2="Dau", D=1, D=1;CH1="Ti.", CH2="Dau",
D=1;CH1="Ti.",CH2="Suu", D=1;CH1="Ti.",CH2="Than", D=1; CH1="Ngo", CH2="Dan", D=1;CH1="Ngo",CH2="Tuat", D=1; CH1="Ngo",CH2="Mui", D=1;CH1="Mui", CH2="Hoi", D=1;
CH1="Mui",CH2="Mao", D=1; CH1="Mui",CH2="Ngo", D=1;CH1="Than", CH2="Ty'", D=1; CH1="Than",CH2="Thin", D=1; CH1="Than",CH2="Ti.", D=1; CH1="Dau", CH2="Ti.", D=1;CH1="Dau", CH2="Suu", D=1;CH1="Dau", CH2="Thin", D=1;CH1="Tuat", CH2="Dan", D=1; CH1="Tuat", CH2="Ngo", D=1;CH1="Tuat", CH2="Mao", D=1;CH1="Hoi", CH2="Mao", D=1;
CH1="Hoi", CH2="Mui", D=1;CH1="Hoi", CH2="Dan", D=1;
CH1="Ty'", CH2="Ngo", D=-1; CH1="Suu", CH2="Mui", D=-1; CH1="Dan", CH2="Than", D=-1; CH1="Mao", CH2="Dau", D=-1;
CH1="Thin", CH2="Tuat", D=-1; CH1="Ti.", CH2="Hoi", D=-1; CH1="Ngo", CH2="Ty'", D=-1; CH1="Mui",CH2="Suu", D=-1;
CH1="Than", CH2="Dan", D=-1; CH1="Dau", CH2="Mao", D=-1; CH1="Tuat", CH2="Thin", D=-1; CH1="Hoi", CH2="Ti.", D=-1; D=0.
% Luat dan 8: xac dinh diem hop cua Mang diem_mang(M1,M2,D):-
M1="Thuy", M2= "Moc" , D=1; M2="Thuy", M1= "Moc" , D=1; M1="Moc", M2="Hoa", D=1; M2="Moc", M1="Hoa", D=1; M1="Hoa",M2="Tho", D=1; M2="Hoa",M1="Tho", D=1; M1="Tho",M2="Kim",D=1;M2="Tho",M1="Kim",D=1; M1="Kim",M2="Thuy", D=1;M2="Kim",M1="Thuy", D=1; M1="Thuy", M2="Hoa", D=-1; M2="Thuy", M1="Hoa", D=-1; M1="Thuy", M2="Tho", D=-1; M2="Thuy", M1="Tho", D=-1; M1="Moc", M2="Tho", D=-1; M2="Moc", M1="Tho", D=-1;
M1="Moc", M2="Kim", D=-1; M2="Moc", M1="Kim", D=-1; M1="Kim", M2="Hoa", D=-1; M2="Kim", M1="Hoa", D=-1; D=0.
% Luat dan 9: xac dinh diem cua ngay can-chi so voi tuoi diem(C1,CH1,C2,CH2,D):- diem_can(C1,C2,D1),
diem_chi(CH1,CH2,D2), mang(C1,CH1,M1), mang(C2,CH2,M2), diem_mang(M1,M2,D3), D=D1+D2+D3.
% Luat dan 10: xac dinh diem cua ngay Am lich so voi tuoi diem_ngay(T,X,C1,CH1,C2,CH2,AL,D):-
ngay(T,X,C2,CH2,AL,D1),diem(C1,CH1,C2,CH2,D2),D=D1+D2. %Luat dan : xac dinh ngay tot co ban cua thang
ngay(1,1,"Quy", "Mao","2-1-2014",6). ngay(1,2,"Nham","Ty'","11-1-2014",6). ngay(1,3,"Giap","Dan","13-1-2014",6). ngay(1,4,"Giap","Ty'","23-1-2014",6). ngay(1,5,"Binh","Dan","25-1-2014",6). ngay(1,6,"Ky","Ti.","28-1-2014",6). ngay(1,7,"Canh","Ngo","29-1-2014",6). %ngay(1,8,"Binh","Ngo","5-1-2014",5). hien_thi_cac_ngay(T,K,C,CH):- K<8, diem_ngay(T,K,C,CH,CC,CHCH,AL,D6),
write("Nguoi tuoi ",C, " ",CH," khai truong ngay ", CC, " ",CHCH, " ", AL,". Diem = ",D6),nl, K2=K+1, hien_thi_cac_ngay(T,K2,C,CH). hien_thi_cac_ngay(_,8,_,_):-!. run:- %tao cua so makewindow(1,7,7,"Chuong trinh ",1,1,18,79),
Write("Nhap vao nam sinh (dang YYYY) cua nguoi thuc hien cong viec khai truong "), readint(NS),
%goi luat dan 1, 2, 3 can(NS,C), chi(NS,CH),
mang(C,CH,M),chi_hop(CH,ChiH),chi_k_hop(CH,ChiKH),
Write("Nguoi nay sinh vao nam ",C," ", CH, " , mang ",M,". Hop voi ngay: ",ChiH, ". Ky voi ngay: ",ChiKH), nl,
Write("(Nen chon ngay co diem >=5 de lam ngay khai truong)"),nl, Write("Diem 1 so ngay nhu sau: "),nl,
hien_thi_cac_ngay(1,1,C,CH) .
goal
PHỤ LỤC