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?