Рассмотрит рекурсивную функцию, скажем, алгоритм Евклида определяется по формуле:Как запоминать рекурсивные функции?
let rec gcd a b =
let (q, r) = (a/b, a mod b) in
if r = 0 then b else gcd b r
(. Это упрощенное, очень хрупкое определение) Как memoize такой функции? Классический подход к определению функции высокого порядка memoize : ('a -> 'b) -> ('a -> 'b)
Добавление memoization к функции здесь бесполезно, потому что это только сэкономит время при первом вызове.
Я нашел подробности о том, как memoize такую функцию в Лиспе или Haskell:
Эти предложения основаны на способности найти в Лиспе перезаписать определение символа функции или стратегии «по требованию», используемой Haskell, и поэтому бесполезны в OCaml.
Как этот ответ улучшает ответ Майкла Грюнвальда? –
@ AdèleBlanc-Sec Направлено официальное объяснение из книги 'real world ocaml'. Он действительно подробно объясняет, как работает «памятка». Честно говоря, «продолжение прохождения стиля» в ответе Майкла немного сложнее или вводит в заблуждение, если вы действительно не понимаете, что такое «продолжение прохождения» –