網友提出有關人工智慧prolog的問題,我們來想一想.
五個村莊問題
有五個村莊塗著不同顏色,住著五種不同國籍的人,喝不同飲料,抽不同香煙,及養不同寵物,其關係如下:
-英國人住紅色村莊
-西班牙人養狗
-挪威人住在左邊第一間村莊
-住黃色村莊的人抽長壽煙
-抽新樂園的住在養狐狸人的旁邊
-挪威人住在藍色村莊旁邊
-抽萬寶路的人養蛇
-抽肯特煙的人喝橘子汁
-烏克蘭人喝茶
-日本人抽百樂門
-抽長壽煙的人住在養馬的人的旁邊
-住綠村莊的人喝咖啡
-綠村莊相鄰象牙色村莊的右邊
-中間村莊的人喝牛奶
請問斑馬住在那個村莊?
誰喝水?
他們是怎麼住的?
請問括弧紅色問號的部份該寫什麼程式碼?
程式碼:
member(C,D,N,S,P,[[C|_],[D|_],[N|_],[S|_],[P|_]]).
member(C,D,N,S,P,[[_|Lc],[_|Ld],[_|Ln],[_|Ls],[_|Lp]]):- menber(???).
right(C1,D1,N1,S1,P1,C2,D2,N2,S2,P2,[[C1,C2|_],[D1,D2|_],[N1,N2|_],[S1,S2|_],[P1,P2|_]]).
right(C1,D1,N1,S1,P1,C2,D2,N2,S2,P2,[[_|Lc],[_|Ld],[_|Ln],[_|Ls],[_|Lp]]:-
right(???).
next(C1,D1,N1,S1,P1,C2,D2,N2,S2,P2,L):- right(C1,D1,N1,S1,P1,???,L);
right(???,C1,D1,N1,S1,P1,L).
constraints(L):-
member(紅色,_,英國人,_,_,L),
member(_,_,西班牙人,_,狗,L),
member(黃色,_,_,長壽煙,_,L),
member(_,茶,烏克蘭人,_,_,L),
member(綠色,酒,_,_,_,L),
member(_,_,_,萬寶路,蛇,L),
member(_,橘子汁,_,肯特,_,L),
member(_,_,日本人,百樂門,_,L),
right(象牙色,_,_,_,_,綠色,_,_,_,_,L),
next(_,_,_,新樂園,_,_,_,_,_,狐狸,L),
next(_,_,_,長壽煙,_,_,_,_,_,馬,L),
next(_,_,挪威人,_,_,藍色,_,_,_,_,L).
thinking:-constraints([[C1,C2,C3,C4,C5],[D1,D2,牛奶,D4,D5],
[挪威人,N2,N3,N4,N5],[S1,S2,S3,S4,S5],
[P1,P2,P3,P4,P5]],
L = [[C1,C2,C3,C4,C5],[D1,D2,牛奶,D4,D5],
[挪威人,N2,N3,N4,N5],[S1,S2,S3,S4,S5],
[P1,P2,P3,P4,P5]],
member(C,_,_,_,斑馬,L),
member(_,水,N,_,_,L),
write([斑馬,住在,C,村莊]),nl,
write([N,喝,水]),nl,
write(L),nl,
fail.
附加檔案
_________________________
天步占星