Некая функция принимает данные по WebSocket протоколу, необходимо произвести кое-какие вычисления, сохранить состояние этих вычислений, для последующей обработки порции данных, и при этом вернуть результат этих вычислений.
Сразу приходит на ум, сделать замыкание с записью с мутабельными полями, с каждым вызовом функция сохраняет состоя ние внутри декоратора и при этом возвращает результат.
type Foo =
{
mutable Value: int
}
let init_handler (value: int) =
let foo = { Value = value }
fun (item: int) ->
foo.Value <- foo.Value + item
foo.Value
[<EntryPoint>]
let main args =
let handler = init_handler 0
printfn "%A" (handler(10))
printfn "%A" (handler(20))
0
А возможно ли использовать только иммутабельные структуры для реализации этого алгоритма?
Опять же можно возвращать частично примененную функцию с копированной структурой данных, для последующего вызова, а тогда как вернуть результат вычислений.