一个简单的AMZI prolog递归,但没有按预期给出正确的结果

时间:2012-12-14 13:33:34

标签: recursion prolog

所以这是我的.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

请帮忙。感谢。

1 个答案:

答案 0 :(得分:1)

试试这个(按此顺序):

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