Prolog. Задачи на следование

В этой теме 1 ответ, 2 участника, последнее обновление  Васильев Владимир Сергеевич 1 год, 11 мес. назад.

  • Автор
    Сообщения
  • #2516

    Prolog
    Участник

    Доброго времени суток. У кого-нибудь есть мысли насчет этой задачи?

    На скамейке сидели дети. Гриша сидел в центре, Вика сидела справа от Сережи, и слева от Гриши, Олег сидел слева от Люси. В каком порядке сидели дети.

  • #2519

    Я думаю, что “скамейку” в задаче можно представить списком, а задача сводится к установлению соответствия элементов списка правилам размещения детей (см. раздел “логические задачи на установление соответствия“).

    Вам нужно описать имена детей:

    children(grisha).
    children(vika).
    children(serezha).
    children(oleg).
    children(luci).

    Затем, вы сможете поместить их в список и используя механизм поиска с возвратами заставить интерпретатор prolog перебрать все варианты построения списка:

    Bench = [A, B, C, D, E], 
    children(A), children(B), children(C), children(D), children(E),
    unique(Bench).

    Тут используется предикат unique для генерации таких сочетаний детей, чтобы имена не повторялись.

    Теперь остается лишь добавить правила расстановки детей:

    C = grisha,
    divide_list(Bench, [_,[serezha, vika, grisha], _]),
    divide_list(Bench, [_,[oleg, luci], _]).

    Для поиска подсписков тут используется функция divide_list.

Для ответа в этой теме необходимо авторизоваться.