#lang racket ;; --------------------------------------------------------------------- ;; This let expression returns a function that refers to itself -- ;; without using letrec. ;; --------------------------------------------------------------------- (define factorial (let ((fact #f)) (set! fact (lambda (n) (if (zero? n) 1 (* n (fact (sub1 n)))))) fact)) ;; --------------------------------------------------------------------- ;; This is the *translational semantics* for letrec. ;; It really is a syntactic abstraction! ;; ---------------------------------------------------------------------