Re: [stack] Re: Barebone implementation of concatenative language in c or c++
Don Groves <[email protected]> Thu, 22 Jul 2010 15:33:04 -0700
| Newsgroups | gmane.comp.lang.concatenative |
|---|---|
| Message-ID | <[email protected]> |
> > . >>>> In a call-by-value environment, It seems to me that encapsulating >>>> all data in functions yields the same effect as call-by- >>>> reference. If >>>> a parameter is not needed, its evaluating function will not be >>>> called. >>> >>> This gets confusing to me, so hold on tight... :-) >>> >>> In order to pass a function to a procedure, the function has to be >>> available as data. If it's not, you can't pass it. >> >> I don't understand this -- I do it all the time in my C code by using >> the >> address operator, &, and the same is easily done in Forth, et al. > > That's pretty much the same indirection approach I use in Furphy > (see http://users.beagle.com.au/peterl/furphy.html), to achieve the > same effect with a workaround even when what actually happens is > done eagerly. I even describe it there with an analogy to what you > are thinking of in C:- > > Conditional code is mostly achieved by IF and a complementary pair > of things, freezing and thawing. This is a bit like using > indirection in C to pass parameters by name instead of the default > by value. The analogy here is that IF does eager evaluation, and > freezing and thawing change the behaviour to lazy evaluation. IF has > this behaviour, using Forth documenting standards: ( true/ > false_flag true_option false_option --- result ). > > FREEZE and THAW behave like an anonymous label (if that isn't a > contradiction in terms - it really returns early and pushes a re- > entry address to the stack) and a dynamic subroutine call, different > from the Forth keyword EXECUTE that it resembles. Typically, you > would put FREEZE at the beginning of each keyword that you might > want to select with IF and then you would use THAW on whichever one > got chosen, like this:- > > FREEZE TRUE_STUFF TRUE_OPTION > > FREEZE FALSE_STUFF FALSE_OPTION > > GET_FLAG TRUE_OPTION FALSE_OPTION IF THAW DEMO > > Later on I describe some syntactic sugar to make coding and using > the indirection easier, too. P.M.Lawrence. Thanks. Do you feel your approach is equivalent to lazy evaluation? don > ------------------------------------ > > Yahoo! Groups Links > > >