bir özyinelemeli fonksiyon düşünün, Öklid algoritması tarafından tanımlanan demek? Fonksiyonun belleğe eklenmesini ekleyen bir yüksek işlevli fonksiyonun memoize : ('a -> 'b) -> ('a -> 'b)
tanımlanmasının klasik yaklaşımı burada işe yaramaz, çünkü sadece ilk aramaya zaman kazandıracak.Özyinelemeli işlevler nasıl hafızaya alınır? Böyle bir işlev memoize nasıl</p> <pre><code>let rec gcd a b = let (q, r) = (a/b, a mod b) in if r = 0 then b else gcd b r </code></pre> <p>(Bu basitleştirilmiş, çok kırılgan tanımıdır.):
Bu öneriler sembol tanımını üzerine yazmak Lisp'te bulunan yeteneğine güvenmek:
Ben Lisp veya Haskell böyle işlevini memoize nasıl ayrıntıları bulduk Bir fonksiyonun ya da Haskell tarafından kullanılan “ihtiyaca göre” stratejisi ve bu nedenle OCaml'de faydasızdır.
Bu cevap Michael Grünewald'ın cevabını nasıl geliştiriyor? –
@ AdèleBlanc-Sec "Gerçek dünya ocaml" kitabından resmi bir açıklama yazdı. Memo'nun nasıl çalıştığını ayrıntılı olarak açıklıyor. Dürüst olmak gerekirse, Michael'ın cevabındaki “devam eden stil” ifadesi, “devam edenin ne olduğunu” anlamadığında biraz karmaşık veya yanıltıcıdır. –