0

所以这是我的 .pro 文件内容(AMZI PROLOG):

room(kitchen).
room(office).
room(hall).
room('dining room').
room(cellar).

door(office, hall).
door(kitchen, office).
door(hall, 'dining room').
door(kitchen, cellar).
door('dining room', kitchen).

location(desk,office).
location(apple,kitchen).
location(flashlight,desk).
location('washing machine',cellar).
location(nani,'washing machine').
location(broccoli,kitchen).
location(crackers,kitchen).
location(computer,office).
location(envelope,desk).
location(stamp,envelope).
location(key,envelope).

edible(apple).
edible(crackers).

tastes_yucky(broccoli).

here(kitchen).

is_located_in(T1,T2):-location(X,T2),is_located_in(T1,X).

我想要实现的是,如果我使用例如 is_located_in(X,office),那么结果将是:

X=desk,
X=flashlight,
X=computer,
X=envelope,
X=stamp,
X=key,
no

(没有特别的顺序)。

这样,结果将包括基本上位于办公室对象中/上的事物,而不是直接位于办公室中的事物。

这是来源:http ://www.amzi.com/AdventureInProlog/a8recurs.php

据说代码很好,但是当我测试它时,它只是返回:

no

请帮忙。谢谢。

4

1 回答 1

1

试试这个(按这个顺序):

is_located_in(T1,T2):-location(T1,T2).
is_located_in(T1,T2):-location(X,T2),is_located_in(T1,X).
于 2012-12-14T13:41:11.557 回答