Ответ в теме: Строки в Visual Prolog. Подсчет суммы мест

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

Предикат sum_position принимает на вход исходную строку и символ, номера позиций которого будут считаться. Возвращает сумму позиций. Вся его работа заключается в вызове вспомогательного предиката sum_position_index, который помимо строки и символа принимает индекс текущего элемента (изначально равный единице).

Функция sum_position_index состоит из трех правил:

  • в случае, если исходная строка пуста – при этом значение текущего индекса и символа не важны, т.к. результат всегда окажется равным нулю;
  • в случае, если первый символ строки совпадает с искомым – проверка выполняется посредством стандартной функции frontchar, которая отделяет первый символ от строки. При этом рассчитывается позиция следующего символа (она на единицу больше текущей), рекурсивно обрабатывается остаток строки, а к полученному результату добавляется текущая позиция;
  • если первый символ строки не совпадает с искомым – выполняются действия, аналогичные предыдущему пункту, но к результату рекурсивной обработки остатка строки не прибавляется текущая позиция.