У меня есть код F#, который кэширует результаты для будущего поиска. Насколько я понимаю, словари и другие структуры данных, которые вы добавляете, требуют побочных эффектов. (т.е. изменение состояния словаря) Это правильно? Считается ли это нечистым или это все еще в модели вычислений без побочных эффектов.
let rec fib =
let dict = new System.Collections.Generic.Dictionary<_,_>()
fun n ->
match dict.TryGetValue(n) with
| true, v -> v
| false, _ ->
let fibN =
match n with
| 0 | 1 -> n
| _ -> fib (n - 1) + fib(n - 2)
dict.Add(n, fibN)
fibN
fib
могут совместно использовать экземплярdict
для обеспечения кэширования. Разве каждый вызов функции не получит свой экземплярdict
? - person CoderDennis   schedule 27.05.2015dict.Add(n, fibN - 1)
Тогда при первом вызовеfib 1
я получу 1, второй вызов даст мне 0. Я пришел к выводу, что это имеет побочные эффекты. Он просто ведет себя так, как ожидалось, потому что структура правильная. - person t3dodson   schedule 27.05.2015