Vamos a hacer una función reduce o reducir en lisp. La función reduce nos permite acumular una lista de números por ejemplo o concatenar una lista de string.
Es decir toma un valor inicial y va acumulando los valores que tiene una lista con una función que se pasa por parámetros. Veamos esto en lisp :
(defun reducir(inicial lista fx)
(cond
((Null lista) inicial)
(T (reducir (Funcall fx inicial (first lista)) (rest lista) fx))
)
)
Si la lista esta vacía, retornamos el acumulador. Si no volvemos a llamar a la función con el valor de la acumulación del primer elemento como valor inicial y el resto del la lista.
Y podemos llamarlo de la siguiente manera:
> (reducir 0 '(1 2 3 4 5) (LAMBDA (a b) (+ a b)))
15
> (reducir "" '("hola " "Mundo") (LAMBDA (a b) (concatenate 'string a b)))
"hola Mundo"
> (reducir "" '("uno" "dos" "tres" "super tranquilo") (LAMBDA (a b) (concatenate 'string a " " b)))
" uno dos tres super tranquilo"