Как написать правила, чтобы перечислить весь город при запросе в запросе? - PullRequest
0 голосов
/ 24 апреля 2019

Как установить правила и когда попросить запрос перечислить все города, в которых он работает?

/*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*/

1 Ответ

1 голос
/ 24 апреля 2019

Чтобы получить полный список городов, доступных с этим набором правил, следующий запрос перечислит все ваши города в переменной 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].
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...