如何编写返回特定列表的谓词?

时间:2015-03-25 13:56:10

标签: prolog

我正在尝试编写一个谓词,用于识别以下转换目标。

可以改变航班的地方是阿姆斯特丹,曼谷,伦敦,纽约,旧金山和悉尼。因此,在进行查询切换时,我应该得到以下结果:

?- changeover(X).
X = amsterdam ;
X = bangkok ;
X = london ;
X = new_york ;
X = san_francisco ;
X = sydney.

我目前有这个:

changeover(X):- destinations(X).

按预期打印所有目的地,但如何仅打印所需目的地?我认为我需要递归是正确的吗?

我有一个prolog数据库,其中包含以下内容:

destinations([abidjan, abu_dhabi, amsterdam, aruba, athens, baltimore,
bangkok, bermuda, brisbane, buenos_aires, colombo, dakar, dubai,
hamburg, harare, hong_kong, honolulu, johannesburg, lagos, lima,
lisbon, london, mahe, nairobi, new_york, panama, perth, quito,
rio, san_francisco, santiago, singapore, sydney, tokyo]).

2 个答案:

答案 0 :(得分:3)

您可以通过指定关系所包含的所有实例来直接定义changeover/1

changeover(amsterdam).
changeover(bangkok).
changeover(london).
changeover(new_york).
changeover(san_francisco).
changeover(sydney).

答案 1 :(得分:0)

如果目的地是一个列表,那么你需要做类似的事情

changeover(X) :- destinations(D), member(X, D), required(X).

required是一个确定所需目的地的谓词 - 它不是很清楚你想做什么