Поскольку, когда вы передаете char*
в std::ostream
, он печатает строку C-style (т. е.: char, char*
), на которую указывает.
Помните, что "hello"
a char*
.
def accumulate_iter(combiner, term, a, next, b):
result = term(a)
while a <= b:
a = next(a)
if a <= b:
result = combiner(term(a), result)
return result
print(accumulate_iter(lambda x, y: x * y, lambda x: x * x, 1, lambda x: x + 1, 5))
Вывод:
14400
Вы также можете полностью избавиться от дополнительной итерации цикла, чтобы вам не понадобился дополнительный (x < = y) тест:
def accumulate_iter(combiner, term, a, next, b):
result = term(a)
a = next(a)
while a <= b:
result = combiner(term(a), result)
a = next(a)
return result
Обратите внимание, что эта вторая версия более верна тому, что на самом деле происходит. Цикл «объединяет вещи», что означает, что вам нужно объединить две вещи, но вы выбираете только одну новую вещь на каждой итерации. Поэтому перед циклом естественно иметь особый случай, который касается первого слагаемого и проходит мимо него.