Ответ в теме: Посчитать количество цифр в числе на Visual Prolog

      Комментарии к записи Ответ в теме: Посчитать количество цифр в числе на Visual Prolog отключены
#2238

digits_count(Number, 1):-
  Number >= 0, Number <= 9, !.
digits_count(Number, Count):-
  NumberWithoutDigit = Number div 10,
  digits_count(NumberWithoutDigit, CountWithotDigit),
  Count = CountWithotDigit + 1.

Если число является цифрой, то есть находится в диапазоне от нуля до девяти – то оно состоит из единственного разряда, поэтому функция должна вернуть единицу и выполнить отсечение. Отсечение при этом запретит искать другие варианты решения, т.к. очевидно, что решение единственное и уже найдено.
В противном случае выполняется целочисленное деление исходного числа на 10 – за счет этого последний разряд числа отбрасывается. Остаток числа обрабатывается рекурсивно – разряды числа будут отбрасываться до тех пор, пока не останется один разряд, который запустит первое правило функции. При рекурсивной обработке формируется результат – количество разрядов в числе без последней цифры, для получения окончательного результата к нему надо добавить единицу.

В Visual Prolog исходный код этой функции должен быть помещен в секцию clauses, а в раздел predicates необходимо описать прототип функции:
digits_count(integer, integer)
В данном случае, функция принимает два аргумента, оба из которых являются целыми числами.