J'ai écrit plus de code Lisp récemment. En particulier, les fonctions récursives qui prennent des données et construisent une structure de données résultante. Parfois, il semble que je doive transmettre deux ou trois informations à l'invocation suivante de la fonction, en plus des données fournies par l'utilisateur. Appelons ces accumulateurs.Quelles sont les meilleures pratiques pour inclure des paramètres tels qu'un accumulateur dans les fonctions?
Quelle est la meilleure façon d'organiser ces interfaces avec mon code?
Actuellement, je fais quelque chose comme ceci:
(defun foo (user1 user2 &optional acc1 acc2 acc3)
;; do something
(foo user1 user2 (cons x acc1) (cons y acc2) (cons z acc3)))
Cela fonctionne comme je l'aime, mais je suis inquiet parce que je ne ai pas vraiment besoin de présenter les paramètres optionnels & au programmateur .
3 approches que je suis un peu en tenant compte:
ont une fonction wrapper qu'un utilisateur est invité à utiliser immédiatement le qui appelle definiton étendu.
utiliser
labels
en interne dans une fonction dont la signature est concise.commencez simplement à utiliser une boucle et des variables. Cependant, je préférerais ne pas le faire puisque je voudrais vraiment envelopper ma tête autour de la récursivité.
Merci les gars!
Merci.J'avais certaines fonctions traitant des arbres, donc je les ai convertis pour utiliser des 'labels'. Un autre ensemble de fonctions fonctionnant uniquement sur des listes, j'ai donc utilisé cette opportunité pour me familiariser avec 'loop'. –