Процес).
перевірка (Персонаж, Номер, Процес): - Персонаж = персонаж (_, брехун), not (сказав (Персонаж, Номер, Процес)).
перевірка (Персонаж, _, _): - Персонаж = персонаж (_, шпигун).
ісключіть_подозреваемого (_, [], []).
ісключіть_подозреваемого (Ім'я, [InH | InT], [InH | OutT]): - not (InH = персонаж (Ім'я, _)), ісключіть_подозреваемого
(Ім'я, InT, OutT).
гіпотеза (Процес): -
персонажами = персонаж (а, типу),
одін_із (типу, [лицар, брехун, шпигун]),
ПерсонажБ = персонаж (б, ТІПБ),
одін_із (ТІПБ, [лицар, брехун, шпигун]), not (ТІПБ = типу),
ПерсонажВ = персонаж (у, ТіпВ),
одін_із (ТіпВ, [лицар, брехун, шпигун]), not (ТіпВ = типу), not (ТіпВ = ТІПБ),
Персонажі = [персонажі, ПерсонажБ, ПерсонажВ],
Процес = процес (Персонажі, відповідь1, відповідь2, ДалОтвет3, Ответ3).
суд1 (Процес): -
гіпотеза (Процес), Процес = процес (Персонажі, _, _, _, _),
% з процесу вибираються персонажі
персонажами = персонаж (а, _), одін_із (персонажі, Персонажі),
% вибока персонажа
перевірка (персонажами, 1, Процес),
% перевірка що сказав перонаж А
ПерсонажБ = персонаж (б, _), одін_із (ПерсонажБ, Персонажі),
% вибірка персонажа
перевірка (ПерсонажБ, 1, Процес).
% перевірка що сказав перонаж Б
суд2 (Процесс2): -
findall (Процесс1, суд1 (Процесс1), Результати),
% отримуємо в результаті список всіх гіпотез задовольняють першим двом висловлювань
одін_із_участніков (Предполагаем_Не_Шпіон),
Процесс2 = процес (Персонажі2, відповідь1, відповідь2, ДалОтвет3, Ответ3),
Підозрюваний =
перевірка (Підозрюваний, 2, Процесс2).
конец_суда (вердикт (Шпигун, Ітоговий_Результат)): -
findall (Процес, суд2 (Процес), Результати),
одін_із_участніков (Предполагаем_Шпіон),
Ітоговий_Результат = процес (Персонажі, _, _, _, _),
Шпигун = персонаж (_, шпигун), одін_із (Шпигун, Персонажі).
подсказка1 (Вердикт, Ответ4): -
Ответ4 = "так", Вердикт = вердикт (_, процес (_, відповідь1, відповідь2, _, Ответ3)),
к...