Ouch, I forgot to explain V. NO, you canNOT replace x with arbitrary expressions. You may use ONLY VALUES (V for Value). In this context a value is one of: #t/#f, number, or a lambda expression. -- Matthias
On Feb 11, 2014, at 9:50 AM, Matthew Johnson <mcoog...@gmail.com> wrote: > The general form: ( (lambda (x) e) V) ~ e with all [free] x replaced by V > > In concrete terms means: ( (lambda (x) (* x y) 2) ~ (* 2 y) ? > > I figure best to be sure now. > > Thanks and best regards > > matt johnson > > > On 11/02/2014, at 3:35 PM, Matthias Felleisen <matth...@ccs.neu.edu> wrote: > >> >> On Feb 11, 2014, at 12:48 AM, Matthew Johnson <mcoog...@gmail.com> wrote: >> >>> I am still a little unclear. Is this a logical result, or a result of the >>> evaluator's rules? Or are they the same thing? >> >> >> They are the same thing. To calculate with the Racket that you see in the >> book/derivation, use this rule: >> >> ( (lambda (x) e) V ) ~ e with all [free] occurrences of x replaced by V >> >> [This is the rule you learn in pre-algebra, with the 'free' needed here >> because >> variables can occur at more places than in pre-algebra.] Using this rule, >> plus >> simple car/cdr/cons/+1 rules, you can confirm every step in the derivation. >> As it >> turns out, the compiler implements this rule totally faithfully BUT instead >> of >> copying actual code it "copies" references to code by moving things from >> registers >> to registers. Because the two are equivalent, a programmer can use the above >> rule to think about code and the compiler writer (one among 10,000s of >> language >> users) is the only one who has to keep references, registers, and replication >> in mind (kind of). >> >> -- Matthias >> ____________________ Racket Users list: http://lists.racket-lang.org/users