Attualmente sto leggendo Perché la programmazione funzionale è importante di John Hughes .
Nella sezione "Gluing Functions Together", dopo aver spiegato che (foldr f a)
è una funzione che sostituisce tutte le occorrenze di Cons
in un elenco di f
e tutte le occorrenze di Nil
di a
( che capisco), l'autore scrive: "Ora è ovvio che (foldr Cons Nil)
copia solo un elenco" e fornisce questo esempio per illustrare il punto:
append [1, 2] [3, 4] = foldr Cons [3, 4] [1, 2]
= foldr Cons [3, 4] (Cons 1 (Cons 2 Nil))
= Cons 1 (Cons 2 [3, 4]))
= [1, 2, 3, 4]
Non capisco perché nella terza riga dell'esempio dato, (Cons 1 (Cons 2 Nil))
è improvvisamente in primo piano e di conseguenza perché l'elenco non finisce per essere [3, 4, 1, 2]
. Nil
in (Cons 1 (Cons 2 Nil))
a
ed è Cons [3, 4]
f
se foldr
la definizione è foldr f a
?
In che modo è ovvio che foldr Cons Nil
copia solo un elenco?