Я пытаюсь разработать правило, которое будет проверять, находятся ли две станции в одной строке и какая строка.
Примером может служить следующее правило
sameLine(Stat1, Stat2, Line) :-
station(Stat1, Line),
station(Stat2, Line),
Stat1 \= Stat2.
, который является гибким.
Он может проверить пара станции находится в одной и той же линии (вызов sameLine(aldgate, baker, metropolitan)
возвращение правда, называя sameLine(aldgate, baker, Line)
возвращение истинного и унифицировать Line
с metropolitan
), но могут найти пары станций линии (вызов sameLine(Stat1, Stat2, metropolitan)
возвращающие в два раза, объединяет Stat1
с aldgate
и Stat2
с baker
(в первый раз) и наоборот (второй раз).
Соблюдать ограничение
Stat1 \= Stat2.
Это навязать, что две станции различны.
Если вы хотите, чтобы sameLine(aldgate, aldgate, Line)
верн. Объединив Line
с metropolitan
, вы можете удалить его.
Если вы, в противном случае, хотите, чтобы избежать двойных результатов (aldgate
/baker
и baker
/aldgate
, на собственном примере, вызывая sameLine(Stat1, Stat2, metropolitan)
) вы можете наложить, что Stat1
это не только отличается от Stat2
, но и то, что это «до» Stat2
, замена
Stat1 \= Stat2
с
Stat1 @< Stat2
Но, таким образом, вы получите истинное от sameLine(aldgate, baker, Line)
, но false (потому что baker
не «до» aldgate
) от sameLine(baker, aldgate, Line)
.
Вы вообще что-то пробовали? Если вы не знаете, с чего начать, вы должны попробовать учебник Prolog (* например. *, [Learn Prolog Now] (learnprolognow.org)). – lurker
Спасибо, человек, посмотрел на сайт, и это очень полезно! –