Я пытаюсь создать список четных целых чисел, в то время как сумма элементов в списке меньше заданного числа. Например, если порог k равен 20, то ожидаемый результат равен [0;2;4;6;8]
Я могу создать список, в котором наибольшее значение меньше порогового значения, например:
let listOfEvenNumbersSmallerThanTwenty =
Seq.unfold (fun x -> Some(x, x + 1)) 0 // natural numbers
|> Seq.filter (fun x -> x % 2 = 0) // even numbers
|> Seq.takeWhile (fun x -> x <= 20)
|> List.ofSeq
(Я знаю, что могу объединить развертку и фильтрацию в Some(x, x + 2), но эта задача носит ознакомительный характер)
Мне удалось создать другой список с промежуточным итогом меньше порога:
let runningTotal =
listOfEvenNumbersSmallerThanTwenty
|> Seq.scan (+) 0
|> Seq.filter (fun x -> x < 20)
|> List.ofSeq
Но для этого я установил порог в listOfEvenNumbersSmallerThanTwenty (что намного больше, чем нужно) и потерял исходную последовательность. Я также пытался найти это, используя изменяемое значение, но мне не очень понравился этот маршрут.