Я занимался функциональным программированием и у меня возник вопрос. Возможно, я что-то упускаю, но есть ли способ остановить функцию «redu ()» на полпути? Скажем, когда я достигну определенного состояния? Идея почему-то кажется антифункциональной. Я не видел такой опции в Python или F #,
В качестве примера, скажем, у меня есть список, такой как [1,2,3,4,5]. Я хочу суммировать элементы в этом списке, пока сумма не станет больше некоторого числа (скажем, 8), и вернуть / пометить / сохранить / идентифицировать каким-либо образом количество элементов, которые я фактически добавил.
Если мы посмотрим на Python, например, я мог бы попробовать что-то вроде
reduce(lambda a,b : a if a + b > 8 else a + b, input)
Это дает мне правильный ответ 6, но как мне найти, что я добавил 3 элемента, чтобы попасть сюда. Там нет счетчика как такового. Я не могу выполнять задания в лямбдах. Я думаю, что у F # такая же ситуация.
Я знаю, что могу использовать цикл for или использовать функцию, которая может хранить состояние и т. Д. Но каков будет функциональный способ делать / думать об этом. Reduce () хочет работать до конца, но где-то вдоль этой линии обработки мы либо хотим остановить его (потому что нам не нужны обработки остальных элементов), либо, по крайней мере, отметить место, где мы перестал заботиться.