& # 8220; dispiegarsi & # 8221; per lisp comune?
-
06-07-2019 - |
Domanda
Ho imparato un bel po 'di schema da SICP, ma ora sono più interessato al lisp comune. So che fold
di lisp comune è riduci
, con argomenti speciali per la piegatura a sinistra oa destra, ma qual è l'equivalente di unfold
? Google non ha aiutato molto. In effetti ho l'impressione che non ci sia spiegamento ???
Soluzione
Common Lisp ha (loop ... collect ...)
. Confronta ??p>
(loop for x from 1 to 10 collect (* x x))
con la sua equivalenza usando unfold
:
(unfold (lambda (x) (> x 10)) (lambda (x) (* x x)) (lambda (x) (+ x 1)) 1)
In generale, (unfold p f g seed)
è sostanzialmente
(loop for x = seed then (g x) until (p x) collect (f x))
Modifica: correggi l'errore di battitura
Altri suggerimenti
Il comune Lisp hyperspec non definisce una funzione unfold
, ma puoi sicuramente scriverne una tua. La sua definizione di schema traduce quasi il simbolo per simbolo.
Autorizzato sotto: CC-BY-SA insieme a attribuzione
Non affiliato a StackOverflow