Is this supposed to be useful or just an excercise? I don't see why we'd need this.
On 1/8/07, Eduardo Cavazos <[EMAIL PROTECTED]> wrote: > Hello, > > In Scheme: > > (define a 10) > > (list a) => (10) > > (let ((a 20)) > (list a)) => (20) > > (let ((a 30)) > (set! a 40) > (list a)) => (40) > > ; The a established by the (a 30) inside the let is set. > > (list a) => 10 > > ; The top-level a is still 10 > > (let () > (set! a 50)) > > (list a) => (50) > > ; Even though we ran set! inside a new scope, the top-level a was changed. > This is because there is no new a binding in the let to shadow the top-level > a. > > SYMBOL: a > > 10 a set > > [ 20 a set a get ] with-scope => 20 > > a get => 10 > > This is not like Scheme. a is set inside the scope but it doesn't affect the > top-level a. There isn't a let binding to shadow the top-level. This > behaviour is a result of the set word which *always* modifies the top of the > namestack. > > So let's make set* which searches up the namestack until it find the variable > and modifies it there. > > ! !!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!! > > USING: kernel kernel-internals sequences hashtables ; > > : set-hash-stack ( value key seq -- ) > dupd [ hash-member? ] find-last-with nip set-hash ; > > : set* ( val var -- ) namestack* set-hash-stack ; > > ! !!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!! > > 10 a set > > [ 20 a set* a get ] with-scope => 20 > > a get => 20 > > ! set* modified the a variable in the namespace one level up. > > Factor beginners, if you feel lost, it's probably because you haven't explored > the namestack, what it is, where it is, how things modify it. Read > the "Variables and Namespaces" section of the manual and experiment with the > namestack*, set, get, >n, ndrop words. Then see how with-scope is defined in > terms of >n and ndrop. Finally, come back and understand set-hash-stack and > set*. > > Ed > > ------------------------------------------------------------------------- > Take Surveys. Earn Cash. Influence the Future of IT > Join SourceForge.net's Techsay panel and you'll get the chance to share your > opinions on IT & business topics through brief surveys - and earn cash > http://www.techsay.com/default.php?page=join.php&p=sourceforge&CID=DEVDEV > _______________________________________________ > Factor-talk mailing list > Factor-talk@lists.sourceforge.net > https://lists.sourceforge.net/lists/listinfo/factor-talk > ------------------------------------------------------------------------- Take Surveys. Earn Cash. Influence the Future of IT Join SourceForge.net's Techsay panel and you'll get the chance to share your opinions on IT & business topics through brief surveys - and earn cash http://www.techsay.com/default.php?page=join.php&p=sourceforge&CID=DEVDEV _______________________________________________ Factor-talk mailing list Factor-talk@lists.sourceforge.net https://lists.sourceforge.net/lists/listinfo/factor-talk