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 ???

È stato utile?

Soluzione

Common Lisp ha (loop ... collect ...) . Confronta

(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
scroll top