Je suis nouveau à clojure et je viens d'apprendre et d'expérimenter avec la fonction de mémorisation. Il me semble que l'existence de cette fonction est étrange.Pourquoi avons-nous la fonction de memoize de clojure?
D'abord les fonctions avec effets secondaires se terminent par!
En second lieu à l'aide de mémoriser est très simple
Pourquoi ne Clojure pas fait tout ça pour moi? Il y a un équilibre entre l'utilisation de la mémoire et les performances, mais vous pourriez facilement obtenir le temps d'exécution de clojure pour avoir un morceau de RAM alloué aux résultats de la fonction. Si une fonction est appelée avec les mêmes arguments, elle utilise plusieurs fois les résultats mis en cache, si la mémoire est épuisée, efface le cache et conserve la trace des caches de cache si fréquemment rappelés que les fonctions sont moins susceptibles d'être supprimées du cache. Si je conçois cela, je définirais même un niveau de performance minimum pour les fonctions de sorte que si un appel de fonction est plus rapide que la récupération du cache, il n'est pas mis en cache. (Ou faire de cette propriété de la façon dont toutes les fonctions appelle le travail.)
Quelqu'un peut-il expliquer pourquoi clojure ne le fait pas
Merci
Si vous pouvez ajouter cette capacité au compilateur, vous enchanterez la communauté Clojure. Rappelez-vous que Clojure (contrairement à - disons - Haskell) ne force pas les fonctions à être pures. – Thumbnail
Je ne pense pas que quiconque serait enchanté par cela. Il y a beaucoup de problèmes avec ça. Vous remplissiez la mémoire presque instantanément, par exemple, en mettant en cache un tas de déchets inutiles dont personne ne se soucie, ne laissant aucune place pour mettre en cache la ou les choses utiles. De plus, vous ajouteriez une surcharge substantielle à chaque appel de fonction pour effectuer la mise en cache, et pour mesurer le "niveau de performance minimum" pour décider si une chose vaut la mise en cache. La performance deviendrait beaucoup plus difficile à raisonner, car l'exécution de chaque fonction devient non-déterministe. Les fonctions marginales s'exécutent "si cela en a l'air". – amalloy