Else break

}

};

Далее, поскольку внутренний цикл в теле предиката Сумма не имеет нормального выхода, можно заменить оператор #2 на break и убрать скобки оператора продолжения ветви. Подставим определение числоВстроке на место вызова, а затем определение предиката Сумма в тело СуммаСтроки. Получим:


СуммаСтроки(string s: nat n) (7.38)

{ n = 0;

for (; ;) {

for (; ;) {

if (s = nil) return

{ char e = s.car || s = s.cdr };

if (цифра(e)) break

}

nat v = val(e);

for (; ;) {

if (s = nil) break

{char b = s.car || s = s.cdr};

if (цифра(b)) v = v * 10 + val(b)