prolog - 在查询中询问时如何编写列出所有城市的规则?
问题描述
如何设置规则以及何时要求查询列出它工作的所有城市?
/*CITY DATABASE */
capital(bern).
capital(london).
capital(prague).
capital(bonn).
capital(belgrade).
city_in(prague,czechoslovakia).
city_in(berlin,germany).
city_in(hamburg,germany).
city_in(belgrade,yugoslavia).
city_in(bern,switzerland).
city_in(london,united_kingdom).
belongs_to(czechoslovakia,’COMECON’).
belongs_to(germany,’EC’).
belongs_to(switzerland,’EFTA’).
belongs_to(united_kingdom,’EC’).
/*END*/
解决方案
要获取此规则集可用的完整城市列表,以下查询将在 X 变量中列出您的所有城市(在 SWI-Prolog 中测试):
city_in(X, _).
要将城市转换为单个列表,请使用findall/3
(Xs
将得到结果):
findall(X, city_in(X, _), Xs).
如果您尝试获取属于某个组织的城市列表,您可以发出以下命令并获取该组织中存在的国家和城市的列表:
belongs_to(Country, _), city_in(X, Country).
同样,对于具有以下内容的响应列表findall/3
:
findall(X, (belongs_to(Country, _), city_in(X, Country)), Xs).
属于某个组织的首府城市列表(列在 City 变量中):
belongs_to(Country, _), city_in(City, Country), capital(City).
并且,对于属于以下组织的城市列表findall/3
:
findall(City, (belongs_to(Country, _), city_in(City, Country), capital(City)), Cities).
上述输出:
?- findall(City, (belongs_to(Country, _), city_in(City, Country), capital(City)), Cities).
Cities = [prague, bern, london].
推荐阅读
- google-api - G Suite Marketplace SDK 将可见性从 My Domain 更改为 Public?
- django - React + Django Axios 问题
- ansible - 如何获取 ansible 塔主机名
- javascript - 使用简单的javascript在对话框外单击
- bluetooth - is Bluetooth BR/EDR same as bluetooth Classic
- r - 在 R & dabestr 中,如何正确获得分组差异?
- c - 等待多个信号量或多个消息队列
- tensorflow - 使用自定义量化器在数据并行 SGD 中进行梯度量化
- python-2.7 - 使用 BeautifulSoup 从 xml 中删除 img 标签
- python - 如何在 python ubuntu 中检查其他程序是否正在使用相机/麦克风