J'ai une fonction Scheme qui est sous forme de base ressemble à ceComment puis-je savoir si mon bon fonctionnement du système récursive est optimisé correctement
(define (foo param var)
(cond ((end-condition) (return-something))
((other-end-condit) (return-something-else))
(else
(let ((newvar (if some-condition
(make-some-updated var)
(destructive-update! var))))
(foo param newvar)))))
Je me sens comme cela est assez clairement quelque chose qui doit être optimisé pour itération dans la compilation, mais quand je le compile (avec du poulet) ça marche toujours incroyablement lentement. (Si je comprends les spécifications R5RS: http://groups.csail.mit.edu/mac/ftpdir/scheme-reports/r5rs-html.old/r5rs_22.html, cela semble fonctionner)
J'ai écrit le même algorithme exact avec une boucle while en python et le programme interprété s'est terminé en secondes. Mon schéma compilé prend environ 15 minutes, et je suis certain que l'algorithme est le même.
Je pense que c'est une récursion de queue ne pas obtenir le problème optimisé, car je ne peux pas penser à quoi d'autre il pourrait éventuellement être, mais je ne peux pas le comprendre. Des idées? Pour ce que cela vaut, le var est un hachage et la mise à jour destructive est simplement en ajoutant un élément, bien qu'il renvoie également le hachage mis à jour à passer en tant que newvar.
Il se peut qu'une autre partie de votre code ait une lenteur cachée, mais j'essaierais aussi différentes implémentations de Scheme: Gambit et Bigloo sont deux compilateurs qui valent la peine d'être essayés. – erjiang
Je peux juste le faire, merci –