Одним из преимуществ чистых функций является то, что их входные данные полностью определяют их выходные данные, позволяя кэшировать результат для последующего использования. Тем не менее, я не вижу, как это можно реализовать без:
- изменяемого глобального состояния для хранения кэша (это невозможно на действительно чистом функциональном языке)
- многопоточность кэшачерез все вычисления (громоздкие, даже с монадой)
- какая-то аннотация с поддержкой во время выполнения (немного странная, но, вероятно, достаточная)
- очень умная среда выполнения (может бытьнепредсказуемо и имеет другие накладные расходы)
Каким образом memoize обычно реализуется на чисто функциональных языках?