(defmethod! expand-t-setclass (pcset &optional (n 12))
:icon *PC_ICON*
:doc "
Given any member of a t-setclass, lists every member of that t-setclass.
The optional parameter N can be used to set the number of equal steps per
octave to something other than the default of 12.
Will tolerate integers out of the mod-N range in PCSET."
:initvals '((1 3 4) 12)
:indoc '("pcset or list of them"
"modulus of the pc space")
(if (listp (first pcset))
(expand-t-setclasses pcset)
(let ((t-prime (t-primeform pcset n)))
(loop with result = nil
repeat n
for x-pcset = pcset then (xpose x-pcset 1 n)
unless (member x-pcset result) collect x-pcset into result
finally return result))))
(defmethod! expand-t-setclasses (pcset &optional (n 12))
(loop for item in pcset collect (expand-t-setclass item n)))
;-----
Je ne suis pas trop familier avec Lisp en général, et essaie de trouver le bug qui casues cette erreur:Aide Lisp | Erreur: double fixation dans la boucle: (résultat)
ERREUR: double liaison dans la boucle: (résultat
Merci pour la réponse! Savez-vous quelle autre forme je pourrais utiliser? Je ne sais toujours pas trop comment corriger ma première erreur. (Ceci est un vieux morceau de code d'un ancien programme et je ne peux pas contacter le développeur) –
J'ai essayé d'entrer: (boucle avec foo = nul , enlever avec un résultat répétition n pour x-pcset = pcset alors? (xpose x-pcset 1 n) sauf (résultat x-pcset membre) (pousser x-pcset foo) enfin (retour (foo inverse)))))) mais a obtenu l'erreur: Mot clé LOOP attendu dans (. .. (push x-pcset résultat) finally (return (reverse result))) –
Si je me débarrassais simplement de "avec foo = nil" et que je collais, quand il compile à chaque boucle, est-il initialisé à 0 à chaque fois? Donc, je pourrais simplement me débarrasser de cette ligne de code et résoudre le problème? –