□ Definicja listy (cons jest tutaj funkcją składania) list X := nil | cons X (list X)
[] oznacza nil, lista pusta; [1] oznacza cons 1 nil; [1,2,3] oznacza cons 1 (cons 2 (cons 3 nil))
□ Sumowanie sum nil = 0
sum (cons numb list) = numb + sum list sum można zmodularyzować, wprowadzając operację reduce: sum — reduce add 0 gdzie add jest funkcją dwuargumentową: add x y = x + y
Wstawiając definicję funkcji sum otrzymamy rekurencyjną definicję reduce: (reduce add x) nil = x
(reduce add x) (cons a 1) = add a ((reduce add x) 1)
(wyrażenie w nawiasach zastąpiło sum; nawiasy można opuścić)
reduce