Pregunta

Aprendí bastante del esquema de SICP pero ahora estoy más interesado en el lisp común. Sé que el fold de lisp común es reduce , con argumentos especiales para el plegado izquierdo o derecho, pero ¿cuál es el equivalente de despliegue ? Buscar en Google no ha ayudado mucho. De hecho, me da la impresión de que no hay despliegue ???

¿Fue útil?

Solución

Common Lisp tiene (loop ... collect ...) . Comparar

(loop for x from 1 to 10 collect (* x x))

con su equivalencia usando despliegue :

(unfold (lambda (x) (> x 10))
  (lambda (x) (* x x))
  (lambda (x) (+ x 1))
  1)

En general, (desplegar p f g seed) es básicamente

(loop for x = seed then (g x) until (p x) collect (f x))

Editar: corregir error tipográfico

Otros consejos

El hiperespec lisp común no define una función despliegue , pero ciertamente puede escribir la suya. Su definición de esquema traduce casi símbolo por símbolo.

Licenciado bajo: CC-BY-SA con atribución
No afiliado a StackOverflow
scroll top