„Entfalten“ für Common Lisp?
-
06-07-2019 - |
Frage
Ich habe gelernt, ziemlich viel Schema von SICP sondern bin mehr daran interessiert, in Common Lisp jetzt. Ich weiß, Common Lisp ist fold
reduce
ist, mit speziellen Argumente für links oder rechts Falten, aber was ist das Äquivalent von unfold
? Googeln hat sich nicht viel geholfen. In der Tat habe ich den Eindruck nicht entfalten gibt es ???
Lösung
Common Lisp hat (loop ... collect ...)
. Vergleichen
(loop for x from 1 to 10 collect (* x x))
mit dessen Gleichwertigkeit mit unfold
:
(unfold (lambda (x) (> x 10)) (lambda (x) (* x x)) (lambda (x) (+ x 1)) 1)
Im Allgemeinen (unfold p f g seed)
ist im Grunde
(loop for x = seed then (g x) until (p x) collect (f x))
Edit: fix Typo
Andere Tipps
Die gemeinsame Lisp hyperspec wird nicht definiert, eine unfold
Funktion, aber man kann sicherlich Ihre eigenen schreiben. Sein Schema Definition übersetzt fast Symbol für Symbol.
Lizenziert unter: CC-BY-SA mit Zuschreibung
Nicht verbunden mit StackOverflow