Prolog-试图解决文本难题
我现在正在学习一点序言。作为练习,我试图解开以下谜题: 这些规则如下:Prolog-试图解决文本难题,prolog,zebra-puzzle,Prolog,Zebra Puzzle,我现在正在学习一点序言。作为练习,我试图解开以下谜题: 这些规则如下: *Every person that has neither a car nor a plane, has a bike. *Every person that doesn't have a plane but has a bike, has a car *Every person that doesn't have a plane but has a car, has a truck *Every person that
*Every person that has neither a car nor a plane, has a bike.
*Every person that doesn't have a plane but has a bike, has a car
*Every person that doesn't have a plane but has a car, has a truck
*Every person that doesn't have a truck but has a boat, doesn't have a plane
*Every person that doesn't have a boat but has a plane, doesn't have a car
现在有四个人:
*Person1 doesn't have a car but has a boat
*Person2 doesn't have a boat but has a plane
*Person3 doesn't have a plane but has a bike
*Person4 doesn't have a bike but has a car
哪个人没有卡车
到目前为止,我想到的是:
doesnthave(car,pa).
has(boat,pa).
doesnthave(boat,pb).
has(plane,pb).
doesnthave(plane,pc).
has(bike,pc).
doesnthave(bike,pd).
has(car,pd).
has(bike,X) :- doesnthave(car,X),doesnthave(plane,X).
has(car,X) :- doesnthave(plane,X),has(bike,X).
has(truck,X) :- doesnthave(plane,X),has(car,X).
doesnthave(plane,X) :- doesnthave(truck,X),has(boat,X).
doesnthave(car,X) :- doesnthave(boat,X),has(plane,X).
现在这似乎还不够。或者这不是在prolog中解决类似难题的方法吗
编辑:前两种说法似乎相互矛盾。他们一起让步:每个既没有汽车也没有飞机的人都有一辆汽车。我不确定是否有一个合理的解决方案。不确定这个解决方案,但更简单的知识表达肯定会有帮助:
has(car, pa, n). has(boat, pa, y).
has(boat, pb, n). has(plane, pb, y).
has(plane, pc, n). has(bike, pc, y).
has(bike, pd, n). has(car, pd, y).
has(bike, X, y) :- has(car, X, n), has(plane, X, n).
has(car, X, y) :- has(plane, X, n), has(bike, X, y).
has(truck, X, y) :- has(plane, X, n), has(car, X, y).
has(plane, X, n) :- has(truck, X, n), has(boat, X, y).
has(car, X, n) :- has(boat, X, n), has(plane, X, y).
现在我们可以查询什么是所有权(注意这是一对多关系)
注:我将p
erson放在T
transport之前,然后我们可以目视检查结果
似乎解决方案是一个三重…事实证明,前两个语句中存在矛盾。他们一起让步:每个既没有汽车也没有飞机的人都有一辆汽车。
?- setof((P,T,R), has(T,P,R), L), maplist(writeln, L).
pa,boat,y
pa,car,n
pb,boat,n
pb,car,n
pb,plane,y
pc,bike,y
pc,car,y
pc,plane,n
pc,truck,y
pd,bike,n
pd,car,y
L = [ (pa, boat, y), (pa, car, n), (pb, boat, n), (pb, car, n), (pb, plane, y), (pc, bike, y), (pc, car, y), (pc, ..., ...), (..., ...)|...].