Таким образом, функциональное программирование все еще довольно ново для меня, и я пытаюсь понять идею избежать удержания (или, скорее, мутирования) «состояния». Я думаю, что я путаю эту концепцию с переменными let. Есть ситуации, когда мне нужно передать результат функции нескольким другим функциям. Например, в следующем коде
let doSomething a b f g = ((a |> b |> f), (a |> b |> g))
значение b(a)
вычисляется дважды без необходимости. Вместо этого я хочу
let result = b a
((f result), (g result))
Однако я чувствую, что это как-то нарушает соглашение в функциональном программировании? Считается ли использование разрешенных переменных таким образом как состояние удержания? Одной из альтернатив является
match a |> b with
| result -> ((f result), (g result))
Но это похоже на то, что вы делаете по сути то же самое, что и раньше. Интересно, если эта проблема связана с недостатком моего подхода к функциональному программированию, где, возможно, эти проблемы никогда не приходят в первую очередь? Или, может быть, так как пусть связанные переменные являются неизменяемыми, использовать их первым способом вполне нормально, и я полностью обдумываю это? Извиняюсь, если это немного расплывчато.