#lang racket (require racket/trace) ; plain recursive (define fact (lambda (n) (if (= n 1) 1 (* n (fact (- n 1)))))) ; tail recursive (define fact-acc (lambda (n acc) (if (= n 1) acc (fact-acc (- n 1) (* n acc))))) (trace fact fact-acc) (define id (lambda (x) x)) (define square-sum (lambda (n) (if (= n 1) 1 (+ (square-sum (- n 1)) (* n n))))) (define square-all (lambda (lon) (if (null? lon) '() (cons (* (car lon) (car lon)) (square-all (cdr lon)))))) (define make-list (lambda (n obj) (if (zero? n) '() (cons obj (make-list (- n 1) obj)))))