Re: [stack] impure concatenativity: let without translation
Don Groves <[email protected]>
| Newsgroups | gmane.comp.lang.concatenative |
|---|---|
| Message-ID | <[email protected]> |
On Mar 19, 2008, at 19:11 , John Nowak wrote: > > On Mar 19, 2008, at 4:51 PM, Joe Bowbeer wrote: > >> On Wed, Mar 19, 2008 at 11:58 AM, John Nowak wrote: >> >>> Postfix, as are *all* procedures. Only special forms are infix. >>> Perhaps this is a better declaration form: >>> >>> (define (a b c quad) >>> ...) >>> >>> - John >>> >> >> Better. Better yet is: >> >> (... >> (a b c quad) define) >> >> This maintains a consistent right-to-left reading direction. If >> postfix is >> the "right thing," there's no such thing as too much, right? > > There is. Special forms and macros need access to the entire tree to > do their work. If you were to put 'define' at the end, then there's no > way for it to act on the tree (without some bizarre backtracking). > Keep in mind that even [a b c] is really (lambda () a b c). Putting > meta-level things like 'define' and 'let' up front also aids in > readability. > >> Naive question: Is there any reason why concatenative languages are >> (uniformly) postfix? Would prefix work just as well, pushing >> elements onto >> the stack from right to left? > > Let's say these two are equivalent: > > -- postfix > hypot -> sqr swap sqr + sqrt > > -- prefix > sqrt + sqr swap sqr <- hypot I'm partial to the syntax I'm using in ACL: [sqr swap sqr + sqrt] -> hypot This reads left-to-right and solves the problem of the as yet undefined symbol, hypot, which is read by -> Actually, I use "def" instead of "->" for clarity but the meaning is the same. -- don > Sure, both mean the same thing, but which is easier to read (provided > you're used to reading left to right)? > > - John > > > ------------------------------------ > > Yahoo! Groups Links > > > >