Ответ в теме: Влюбленные юноши и девушки (Turbo и SWI Prolog)

      Комментарии к записи Ответ в теме: Влюбленные юноши и девушки (Turbo и SWI Prolog) отключены
#2422

Теперь мы видим, что пролог считает правильным решение, когда Коля любит Аню, а Аня — Колю, однако в условии задачи говорится, что любовь должна быть без взаимности. Добавить такое ограничение можно следующим образом:

\+ (
    member(love(Boy, Girl), Solution), 
    member(love(Girl, Boy), Solution)
  ).

Тут мы требуем, чтобы в решении не было двух таких пар, в которых мальчик и девочка любят друг друга. При этом используется функция member для выбора элемента из списка. В данном случае, первый вызов member пытается инициализировать переменные Boy и Girl, всеми вариантами, содержащимися в списке Solution, а второй вызов member проверяет взаимность отношения. Чтобы переписать этот фрагмент на Turbo Prolog — фрагмент проверяющий взаимность надо будет поместить в отдельный предикат, а вместо оператора \+ использовать NOT.

Теперь при запуске на экране мы увидим следующие варианты решения (фрагмент):

?- solve_love_problem(X).
X = [love(kolya, anya), love(dima, lena), love(yura, vika), love(anya, dima), love(lena, yura), love(vika, kolya)] ;
X = [love(kolya, anya), love(dima, lena), love(yura, vika), love(anya, yura), love(lena, kolya), love(vika, dima)] ;