Ответ в теме: Логическая задача: Аладар, Бела и Балаш. Аптекарь, бухгалтер, агроном

      Комментарии к записи Ответ в теме: Логическая задача: Аладар, Бела и Балаш. Аптекарь, бухгалтер, агроном отключены
#2515

Здравствуйте. Я не использую Visual Prolog 7.x, но постараюсь помочь.
Во-первых, поясните что вы хотели сделать за счет функции run (я вижу, что она вызывалась в разделе goal, но эта строка закомментирована), почему-то эта функция не описана в разделе predicates, но реализована в разделе clauses (при этом вызывает name(balsh)).

Во-вторых, у вас однозначно есть ошибка при описании фактов. Все имена, начинающиеся с большой буквы в прологе означают переменные. Т.е. name(Bela). содержит описание несвязанной переменной Bella. Т.к. переменная не связана, то вызов пройдет успешно с любым значением, например name(«balash») вернет true и Bela="balash".

В-третьих, почему вы думаете, что ваш код работает неправильно? (выдает какие-то конкретные ошибки или вы не получаете ожидаемый результат?

Наконец есть пара советов — посмотрите:

  • введение в Prolog очень быстро поможет разобраться с тем как работают программы на этом языке и почему name(Bela) ведет себя так, а не иначе;
  • правила кодирования на Prolog — это очень простые рекомендации, за счет соблюдения которых код будет гораздо понятнее;
  • решение логических задач на Prolog поможет разобраться с тем, как решить именно вашу проблему (смотрите раздел «задачи на установление соответствия» — там есть примеры решенных задач такого типа).