Else break

}

n = n + v

}

Можно обнаружить следующий недостаток программы (7.39): если строка s завершается цифрой, то проверка исчерпания строки реализуется дважды. Чтобы исправить этот недостаток, следует вместо предиката числоВстроке(e, r:v, t) использовать гиперфункцию числоВстроке1(e, r:v1: v2, t), в которой первая ветвь реализуется при исчерпании входной строки r.

Возможен другой более простой алгоритм. На очередном шаге вычисляется значение очередного числа в строке в виде предиката числоВстроке(s:v, t), где v - значение очередного числа, а t - остаток непустой строки s. Если первый элемент s не является цифрой, то v = 0. Реализация данного алгоритма дает более короткую программу, чем (7.39), однако менее эффективную. По сравнению с (7.39) лишними действиями являются операторы v = 0 и n = n + v для каждого символа, отличного от цифры.