Path: csiph.com!eternal-september.org!feeder.eternal-september.org!nntp.eternal-september.org!.POSTED!not-for-mail From: Kragen Javier Sitaker Newsgroups: comp.lang.forth Subject: Re: dynamic scoping in Forth in one line of code Date: Sat, 29 Aug 2026 10:50:48 -0300 Organization: Primarily biological and memetic Lines: 14 Message-ID: <87fqzx9gsn.fsf@debian> References: <87bjamc5xh.fsf@debian> <87y0dplofj.fsf@nightsong.com> MIME-Version: 1.0 Content-Type: text/plain; charset=utf-8 Content-Transfer-Encoding: 8bit Injection-Date: Sat, 29 Aug 2026 13:50:52 +0000 (UTC) Injection-Info: dont-email.me; logging-data="3444132"; mail-complaints-to="abuse@eternal-september.org"; posting-account="U2FsdGVkX1/S+DDaafTHvKpq1UnJk3mK"; posting-host="19c753fba95970cf1a99e4804f17687c" User-Agent: Gnus/5.13 (Gnus v5.13) Emacs/28.2 (gnu/linux) Cancel-Lock: sha1:CQn6r6ATFSbUB/t8XqvRAIhkYaQ= sha1:SFL2K+ATHWHdcYLFb0bYPObih9c= sha256:b2cRAHdvGIGFJpMgEbk2NOFHxJUF5eEqvA8OYOjuASw= sha1:Jqs30+u3fTs/iWENoYv9bNJyzh0= sha256:opZKMWzBPldmzLUAlAF55enIfgJnyXyCLTpVyY6IdCM= Xref: csiph.com comp.lang.forth:135476 Paul Rubin writes: > Kragen Javier Sitaker writes: >> A couple of years ago, I noticed that it’s possible to implement >> Lisp-style dynamic scoping in standard Forth in one line of code: >> >> : (let!) dup @ over swap 2r> rot >r rot >r >r >r ! ; : let! (let!) 2r> ! ; > > You need to still restore the old value when the function exits by > exception or THROW. So you have to use something like CATCH. That’s an excellent point, and one I hadn’t considered. That will definitely make it more than one line. How would you implement that? Kragen