Ответ в теме: База даныых: социальные сети

      Комментарии к записи Ответ в теме: База даныых: социальные сети отключены
#3247

Когда пролог выдает ошибку, у вас устанавливается курсор на символ с ошибкой. Это было бы полезно чтобы узнать какой именно тип не нравится интерпретатору в первой ошибке.
Вообще, в исходном сообщении, friend описан как предикат (в секции predicates), но retract можно применять только к фактам базы данных. Чтобы решить проблему в Turbo Prolog и Visual Prolog нужно описание прототипа перенести в секцию database, а в SWI Prolog — объявить предикат динамическим. Прочитать про это подробнее можно в теме «Пример работы с базами данных в Prolog«.

По второй ошибке — замените строку с ошибкой на
friend_count(_, 0).
В данном случае, должна возникать не ошибка а предупреждение (Warning), которое обычно не мешает компиляции. Компилятор сообщал вам, что переменная Who используется только один раз, т.е. он предупреждает об этом, т.к. часто это происходит вследствие опечатки. В некоторых диалектах подавить предупреждение можно поставив знак подчеркивания перед именем переменной (это хорошо, т.к. имена помогают читать код), вроде бы в Turbo Prolog такая конструкция не работает — он требует указания символа подчеркивания вместо имени переменной.