Domanda

Qualcuno può spiegare un esempio in Ansi Common Lisp Page 110 di Paul Graham?

L'esempio cerca di spiegare l'uso e il riposo e lambda per creare strutture di programmazione funzionali. Uno di questi è una funzione per comporre argomenti funzionali. Non riesco a trovare nulla che spieghi come ha funzionato. Il codice è il seguente:

(defun compose (&rest fns)
  (destructuring-bind (fn1 . rest) (reverse fns)
    #'(lambda (&rest args)
        (reduce #'(lambda (v f) (funcall f v))
                rest
                :initial-value (apply fn1 args)))))

L'uso è:

(mapcar (compose #'list #'round #'sqrt)
        '(4 9 16 25))

L'output è:

((2) (3) (4) (5))

La linea 2 e 6 mi assomigliano soprattutto a una magia. Eventuali commenti saranno apprezzati.

Nessuna soluzione corretta

Autorizzato sotto: CC-BY-SA insieme a attribuzione
Non affiliato a StackOverflow
scroll top