#lang racket (define a 5000) (define b 600) (define c 70) (define (help) "help") (define (f x) (define (help) (+ x a b c)) (define a 1000) (define b 200) (define c 30) (help)) (f 4) ; 1. Loops to evaluate the exp in tail position of each pair. ; 2. Loops to create locations (making name available), assigning the matching exp value. ; 3. Evaluates the body. ; Duplicate identifiers are illegal. (let ((f c) (c 999) (d c) (e b)) (list c d e f)) ; 1. Loops over the pairs by evaluating the exp, create location, assigning value. ; 2. Evaluates the body. ; Duplicate identifiers are legal. (let* ((f c) (c 999) (d c) (e b)) (list c d e f)) ; 1. Loops to create location for name in head position of each pair, ; assigning each the value #. ; 2. Loops over pairs to evaluate exp in tail position of each (new names are available), ; then assign value to name. ; 3. Evaluates the body. ; Duplicate identifiers are illegal. (letrec ((f c) (c 999) (d c) (e b)) (list c d e f))