& # 8220; déplier & # 8221; pour le lisp commun?
-
06-07-2019 - |
Question
J’ai appris pas mal de schémas avec SICP mais je suis plus intéressé par le lisp commun maintenant. Je sais que le fold
de lisp commun est reduction
, avec des arguments spéciaux pour le repliement à gauche ou à droite, mais quel est l'équivalent de unfold
? Googler n'a pas beaucoup aidé. En fait, j'ai l'impression qu'il n'y a pas de dévoilement ???
La solution
Common Lisp a (loop ... collect ...)
. Comparer
(loop for x from 1 to 10 collect (* x x))
avec son équivalence utilisant déplier
:
(unfold (lambda (x) (> x 10)) (lambda (x) (* x x)) (lambda (x) (+ x 1)) 1)
En général, (déplier p semences)
est fondamentalement
(loop for x = seed then (g x) until (p x) collect (f x))
Modifier: corriger une faute de frappe
Autres conseils
Common lisp hyperspec ne définit pas de fonction deploye
, mais vous pouvez certainement écrire la vôtre. Sa définition de schéma traduit presque symbole pour symbole.