Ответ в теме: Попытка диверсии — найти преступника.

      Комментарии к записи Ответ в теме: Попытка диверсии — найти преступника. отключены
#2657

Ошибка «PROGRAM ERROR. 1010» говорит о переполнении стека, чаще всего это возникает при зацикливании (вечной рекурсии).
Ваш код я не смог понять, так правило является_преступником принимает в качестве аргумента переменную Преступник, но в коде правила она не используется, т.е. при любом раскладе функция не вернет ничего более полезного чем неинициализированную переменную.

Я не знаю точно в чем у вас ошибка, но зацикливание может быть например тут:

сказал (в,3):-
    not(сказал (в,1)), сказал (в,2), сказал (в,3);
    сказал (в,1), not(сказал (в,2)), сказал (в,3);
    сказал (в,1), сказал (в,2), not(сказал (в,3)).

Так как чтобы вычислить правило вы вызываете это же правило с точно таким же набором аргументов. Очевидно, выполнение зациклится, а т.к. используется рекурсия (т.е. вызовы функции, сохраняющие аргументы при каждом вызове в стек) — переполнится стек.

Я предлагаю Вам посмотреть пример решения похожей задачи на правильные и ложные высказывания и попробовать что-то исправить. В любом случае — пишите о результатах, даже если совсем ничего не получится, мы поможем.