Ответ в теме: Задача на Visual Prolog. Проверка на наличие слов

      Комментарии к записи Ответ в теме: Задача на Visual Prolog. Проверка на наличие слов отключены
#2848

Я не могу объяснить ее решение, т.к. мне не понятно даже что передается в вашу функцию. Функция проверки, на мой взгляд, должна принимать строку, но у вас она что-то еще возвращает.

Функция check зачем-то отделяет от строки первый символ и передает его в check_text вместе с исходной строкой.

Функция check_text никак не может решать вашу задачу, т.к. в ней нигде не встречается даже упоминание о букве “b”, которая фигурирует в условии задачи.

Например, если я подам на вход вашей функции строку " hello world" – то результатом будет истина, хотя никаких слов, начинающихся с “b” в моей строке нет.

Ваша программа сработает так:

  1. в секции goal вызывается check(" hello world", M);
  2. функция check вычислит T = " hello world", A = ' '. Вызовет check_text(" hello world", ' ', L);
  3. в предикате check_text выполнится первое правило, т.к. второй аргумент успешно сопоставится с пробелом, а от исходной строки можно отделить один символ (что сделает frontchar). Причем, остаток строки будет выкинут, ведь третьим аргументом записана анонимная переменная. Итого, функция check_text вернет L = ' ';
  4. вернемся в функцию check со значением L = ' ';
  5. вернемся в goal и выведем true (т.к. решение найдено) и M = ‘ ‘.

Поясните, каким образом это все связано с вашей задачей? – Почему Вы решили, что это правильное решение?