我一直在研究这个 Prolog 逻辑问题。结果不正确,运行程序本身需要一段时间,这让我更担心。逻辑问题如下:
Alex、Bret、Chris、Derek、Eddie、Fred、Greg、Harold 和 John 是九名学生,他们住在一栋三层楼的大楼里,每层楼有三个房间。西厢房,中厢房,东厢房。直视建筑物,左侧为西,右侧为东。每个学生都被分配到一个房间。你能找到他们每个房间的位置吗?
- 哈罗德不住在底层。
- 弗雷德住在约翰的正上方,紧挨着布雷特(住在西翼)。
- Eddie 住在东翼,比 Fred 高一层。
- 德里克住在弗雷德的正上方。
- 格雷格住在克里斯的正上方。
这是我编写的代码,需要一段时间才能完成并给出不正确的结果:
rooms([west,center,east]).
floors([bottom,middle,top]).
students([alex,bret,chris,derek,eddie,fred,greg,harold,john]).
student(S) :-
students(L), member(S,L).
empty_building(building(floor(_,_,_),floor(_,_,_),floor(_,_,_))).
location(P,1,1,building(floor(P,_,_),_,_)).
location(P,1,2,building(floor(_,P,_),_,_)).
location(P,1,3,building(floor(_,_,P),_,_)).
location(P,2,1,building(_,floor(P,_,_),_)).
location(P,2,2,building(_,floor(_,P,_),_)).
location(P,2,3,building(_,floor(_,_,P),_)).
location(P,3,1,building(_,_,floor(P,_,_))).
location(P,3,2,building(_,_,floor(_,P,_))).
location(P,3,3,building(_,_,floor(_,_,P))).
puzzle_soln(BLDG) :-
empty_building(BLDG),
location(harold,HFN,_,BLDG),
location(fred,FFN,FRN,BLDG),
location(john,JFN,JRN,BLDG),
location(bret,BFN,BRN,BLDG),
location(eddie,EFN,ERN,BLDG),
location(derek,DFN,DRN,BLDG),
location(greg,GFN,GRN,BLDG),
location(chris,CFN,CRN,BLDG),
location(alex,_,_,BLDG),
HFN \= 1,
FFN is JFN + 1,
FRN = JRN,
1 =:= abs(FRN - BRN),
FFN = BFN,
BRN is 1,
ERN is 3,
EFN is FFN + 1,
DFN is FFN + 1,
DRN = FRN,
GFN is CFN + 1,
GRN = CRN.
这是一个有问题和解决方案的网站的链接:https ://www.brainbashers.com/showpuzzles.asp?puzzle=ZQJZ
任何帮助,将不胜感激。