Использование FindAll вы ищете findall(+Template, :Goal, -Bag)
(как Гай Coder сказал: findall/3).
Что это означает найти каждый набор переменных, которые удовлетворяют :Goal
как написано (в данном случае, вы ищете station(X,Line)
), а затем поместить их в -Bag
списке (который вы называете ListOfStations
) с помощью +Template
(которые, вы, предположительно, X
, чтобы создать [X1,X2,X3|...]
).
Поместите их все вместе, и вы получите (предупреждение спойлер, я думаю?):
findall(X, station(X,Line), ListOfStations).
Что будет:
[kennington, embankment, tottenhamcourtroad, warrenstreet, euston]
Где л ist упорядочивается по порядку фактов.
Дополнительная информация:
Если ваш шаблон выглядит [X]
вместо просто X
:
findall([X], station(X,Line), ListOfStations).
Ваш результат выглядит следующим образом:
[[kennington], [embankment], [tottenhamcourtroad], [warrenstreet], [euston]]
И вы можете даже сделать его похожим на (station,X)
получить:
findall((station,X), station(X,Line), ListOfStations).
Давать вам:
[(station,kennington), (station,embankment), (station,tottenhamcourtroad), (station,warrenstreet), (station,euston)]
И если вы хотите, чтобы найти все возможные комбинации станций на линии, :Goal
может быть соединение, а также, например, так:
findall((X,Y), (station(X,Line),station(Y,Line),X\=Y), ListOfStations).
Давать вам что-то глупое, как это:
[(kennington,embankment), (kennington,tottenhamcourtroad), (kennington,warrenstreet), (kennington,euston), (embankment,kennington), (embankment,tottenhamcourtroad), (embankment,warrenstreet), (embankment,euston), (tottenhamcourtroad,kennington), (tottenhamcourtroad,embankment), (tottenhamcourtroad,warrenstreet), (tottenhamcourtroad,euston), (warrenstreet,kennington), (warrenstreet,embankment), (warrenstreet,tottenhamcourtroad), (warrenstreet,euston), (euston,kennington), (euston,embankment), (euston,tottenhamcourtroad), (euston,warrenstreet)]
Который, я надеюсь, дает вам хорошее представление о том, насколько мощный поисковик.
Связанный вопрос: [Как я могу написать правила для следующих вопросов и фактов в Prolog?] (Http://stackoverflow.com/q/41742556/1243762) –
Связанный вопрос: [Задача линии пролога Prolog] (http: //stackoverflow.com/q/41706982/1243762) –
Связанный вопрос: [Использование списка из факта в правилах Prolog] (http://stackoverflow.com/q/41698790/1243762) –