У меня вопрос о чистоте функций.
Случай 1.
Есть база данных с транзакциями, дающими неизменяемый снимок данных.
Транзакция моделируется объектом T.
При открытии транзакции создается функция F, замыкающая T.
Функция F принимает номер строки, которую нужно прочитать из таблицы в этой бд,
и возвращает эту строку.
Получается, что F походит на чистую фукнцию.
Она полностью детерминирована.
Она значимо не изменяет внешний мир.
Но делает сетевой запрос и может бросить исключение в случае потери соединения.
Так-то процеесор ходит по шине в оперативную память за данными.
И гипотетически может потерять это соединение.
Поход и в память и в бд сопровождаются задержками, только разных порядков.
Т.е. с практической точки знения F - чистая функция.
Случай 2.
У нас есть ленивые бесконечные последовательности, которые вычисляют следующий элемент.
При этом последовательность кэширует рассчитанные элементы.
Можно сделать ленивую бесконечную последовательность случайных чисел.
И да, это напоминает "обычную" детерминированную последовательность.
Вопрос.
Может быть есть название для этих случаев?
Получистые функции? semipure functions?
Где можно поподробнее об этом посмотреть?
Дополнение.
Datomic использует именно этот подход.