x) 0) (else (+ (car x) (sum (cdr x)))))))

(fact 14)

(fib 10)

(map (lambda (x) (* x (+ 1 x))) ;;; obliczy listę wartości wyrażenia x*(x+1) '(1 3 6 9)) ;;; kolejno dla 1, 3, 6 i 9

(sum '(6 6 6 100))

(sum (map fib '(1 2 3 4)))

;; zamiast tworzyć procedurę sum, możemy również użyć apply: (apply + '(6 6 6 100))

Zamiast pętli wykorzystuje się możliwości stwarzane przez rekurencję, szczególnie przez rekurencję ogonową w której wywołanie rekurencyjne występuje jako ostatnie wyrażenie, funkcje z rekurencją ogonową zamieniane są na pętle przez kompilator.

Przykład funkcji z rekurencją ogonową do obliczania silni. (define (! n) (let iter ((n n) (product 1)) (if (zero? n) product (iter (- n 1) (* product n)))))

Tak zdefiniowana rekurencja może być wykonywana bez odkładania parametrów na stos, czyli tak jak zwykła iteracja.

Makra Za pomocą makr można przetwarzać kod scheme jak dane. Makra są przetwarzane najczęściej w czasie kompilacji. Makro musi zwracać kod jako dane (tzn.