如果事实不符合';prolog中不存在吗?

如果事实不符合';prolog中不存在吗?,prolog,Prolog,我不熟悉序言。 我的项目的想法是说“如果没有人是X的客人,那么X房间是免费的,而如果一个家庭住在X房间,那么X房间是被占用的”。 我使用谓词 guest(FamilySurname,RoomTaken) 这意味着一个家庭占据了这个房间 taken(X) :- guest(_,X). guest(albert, 123). ?- taken(123, R). R = albert. 所以如果一个家庭住在X房间,那么X就被拿走了 我的问题是我怎么能说X房间是免费的?我应该用一种不,比如:

我不熟悉序言。 我的项目的想法是说“如果没有人是X的客人,那么X房间是免费的,而如果一个家庭住在X房间,那么X房间是被占用的”。 我使用谓词

guest(FamilySurname,RoomTaken)
这意味着一个家庭占据了这个房间

taken(X) :- guest(_,X).
guest(albert, 123).

?- taken(123, R).

R = albert.
所以如果一个家庭住在X房间,那么X就被拿走了

我的问题是我怎么能说X房间是免费的?我应该用一种不,比如:

free(X) :- "NOT EXIST" guest(_,X).
我如何在prolog中翻译“不存在”? 我试过了!但它不能正常工作。。。也许我把它放错地方了


对不起,我的英语不好。

请检查以下代码:

taken(X, Y) :- guest(Y,X).
free(X) :- \+ guest(_,X).
我做了一个小小的改变,现在它告诉你谁在那个房间里

taken(X) :- guest(_,X).
guest(albert, 123).

?- taken(123, R).

R = albert.

free()谓词非常简单,我使用了否定运算符,您可以检查第一个答案中的代码似乎不是解决方案,即查询
?-free(X)
不会给出答案,因为查询
?-free(foo)
会成功。一个需要考虑的因素,即所有变量

考虑以下代码,其中有两个选项用于表示
free
谓词

 room(123).
 room(124).
 guest(albert, 123).

 taken(Room) :- guest(_, Room).

 free2(Room) :- room(Room),
                \+ taken(Room).

 free(Room) :- room(Room),
               forall(guest(_, RoomTaken),
                      RoomTaken \= Room).