Я занимаюсь некоторым функциональным программированием и задал вопрос. Возможно, я мог бы что-то упустить, но есть ли способ остановить функцию "уменьшить()" на полпути? Давайте скажем, когда достиг определенного состояния? Идея почему-то кажется антифункциональной. Я не видел такой опции в 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() хочет работать до конца, но где-то вдоль этой линии обработки мы либо хотим ее остановить (потому что мы не заботимся о обработке остальных элементов), либо, по крайней мере, запомним место, где мы перестали заботиться.