Browse thread
Re: How must we teach lexical scope?
- oleg@p...
[
Home
]
[ Index:
by date
|
by threads
]
[ Message by date: previous | next ] [ Message in thread: previous | next ] [ Thread: previous | next ]
[ Message by date: previous | next ] [ Message in thread: previous | next ] [ Thread: previous | next ]
Date: | 2007-03-29 (03:47) |
From: | oleg@p... |
Subject: | Re: How must we teach lexical scope? |
Loup Vaillant wrote: > Personally, I think environments are about the implementation of > lexical scope, not its specifications. I agree. A language system that eagerly performs substitutions inherent in the beta-rule needs no environments. An environment, which is a list of pending substitutions, is merely an optimization. A quite good optimization though. This is discussed in an article http://okmij.org/ftp/Scheme/misc.html#closure-misconceptions Regarding free variables: some of the multi-staged languages, including MetaOCaml, can literally manipulate code with `free variables'. For example, let bar u = print_endline "here"; .<.~u + 1>. in .<fun x -> .~(bar .<x+3>.)>.;; Evaluating this code prints the string "here" and returns a code value, which can be printed as .<fun x_1 -> ((x_1 + 3) + 1)>. We note that the function bar received a piece of code .<x+3>. containing a free variable 'x' and incorporated that piece of code in the larger code. All while the binding for "x", "fun x -> ..." will be evaluated only in the future.