[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]

Re: postfix



You can program without variables in Lisp too, when you
define code using higher-order functions like the ones provided
by Dylan.

Arc (currently) has a function builder called rec that causes
factorial to look like this:

(rec zero 1 * 1-)

rec in turn is defined

(def rec (base val app delta)
  (rfn f (x)
    (if (base x)
        val
        (app x (f (delta x))))))

I don't know whether this counts as concatenative programming,
but it seems to give many of the same benefits.


--- "S. Alexander Jacobson" <alex@shop.com> wrote:
> From the replies, I realized that I am mixing two different ideas:
> concatenative programming and postfix syntax.
> 
> The issue here is that concatenative programming is more or less
> incompatible with infix syntax.  However I don't think it is
> a problem if you structure the language correctly.
> 
> On 30 Nov 2001 jmarshall@mak.com wrote:
> > "S. Alexander Jacobson" <alex@shop.com> writes:
> > > What about postfix?
> > You can rearrange its indentation and whitespace, but you can't
> > rearrange it to read left to right.
> 
> Perhaps you can. Or perhaps you prefer a concatenative prefix
> language.
> You could do a transformation to prefix that included reversing
> arguments.
> So:
> concat
>   [2 3 4 5]
>   map
>     [add 1]
>     range 1 10
> 
> would be the same as postfix.:
> [2 3 4 5] [add 1] 1 10 range map concat
> 
> Guy Steele thinks the former is easier to read.  The conversions
> are trivial.  The point is that in either case you eliminate
> variables and
> scoping issues.
> 
> > A particular language that uses postfix syntax (for instance Forth)
> > may not have `variables' in the sense of arguments, but they *do*
> have
> > `variables' in the sense of `identifiers' that map to a meaning.
> 
> Yes, but that is hugely different.  Without variables you don't have
> to
> figure out scoping rules.  variables are just lists of stack
> operations.
> When you use them, they apply to whatever is on top of the stack
> then.
> 
> > > So you immediately eliminate the large class of errors that come
> from
> > > destructive updates to shared data structures without having to
> jump
> > > through all the hoops that functional programming languages force
> on you.
> >
> > Postfix syntax doesn't do squat for aliasing.  The syntax of the
> > language is unrelated to whether there are primitives within the
> > language that support destructive updates.
> 
> Perhaps there is a distinction here between postfix and
> concatenative.
> The point is that all functions are presumed to consume all their
> arguments.  So there is no sharing, period.  For example executing
> "head [1 2 3 4]" leaves 1 on the stack. The rest of the list is gone.
> If you want to use the rest of the list, you want something like:
> 
> "delist [1 2 3 4]" which results in the stack "1 [2 3 4]"
> 
> Henry Baker did a version of this concept in lisp at some point, but
> it seemed hard to read/understand in that format.
> 
> > > You also eliminate all errors associated with variable scope
> because you
> > > get rid of variables.
> >
> > You also eliminate lexical scoping.  The baby has been thrown out
> with
> > the bath water.
> 
> Using the stack means you get the locality of lexical scope without
> the
> confusion.
> 
> > In addition, you *increase* the ease at which wrong number of
> argument
> > errors are generated and propagated.
> 
> This is indeed an added problem, but I think there are various
> automated
> type-checking schemes that can verify that those mistakes don't
> happen
> at runtime.
> 
> > Don't get me wrong, I love my HP calculator, but a postfix language
> > isn't a panacea.
> 
> I think I am not talking about postfix, but rather a purely
> destructive
> language (that therefore doesn't need variables).  You could
> implement
> the language prefix as well (and I think Guy is right, it looks
> better).
> 
> But I don't think you could implement such a language infix.
> 
> -Alex-
> 
> ___________________________________________________________________
> S. Alexander Jacobson			i2x Media
> 1-917-783-0889 voice			1-212-697-1427 fax
> 
> 
> 
> 


__________________________________________________
Do You Yahoo!?
Buy the perfect holiday gifts at Yahoo! Shopping.
http://shopping.yahoo.com