# Re: [stack] Ideas slowly growing in my head.

## Massimo Dentico — 2000-12-04 19:29:05

    sz wrote:

     > [...]

    >

    >                  III. WHERE IS HENRY BAKER HOMEPAGE?!

    >

    > I decided to reread his papers on linear logic and failed to find

    > his homepage.

     "Henry Baker's Archive of Research Papers" was here:

    - ftp://ftp.netcom.com/pub/hb/hbaker/home.html

    but unfortunately seems recently disappeared and, worse,

    I have lost copies of some of his papers.

    --

    Massimo Dentico

## Brian Rice — 2000-12-04 19:30:51

    >sz wrote:

    >>  [...]

    >>

    >>                   III. WHERE IS HENRY BAKER HOMEPAGE?!

    >>

    >>  I decided to reread his papers on linear logic and failed to find

    >>  his homepage.

    >

    >"Henry Baker's Archive of Research Papers" was here:

    >

    >-

    ><ftp://ftp.netcom.com/pub/hb/hbaker/home.html>ftp://ftp.netcom.com/pub/hb/hbaker/home.html

    >

    >but unfortunately seems recently disappeared and, worse,

    >I have lost copies of some of his papers.

    >

    >--

    >Massimo Dentico

     ftp://samaris.tunes.org/pub/food/papers/people/Henry.Baker/ and

    http://linux.rice.edu/~rahul/hbaker/

    are the mirrors that I currently know of.

    Glad to help,

    ~

    [Non-text portions of this message have been removed]

## Billy Tanksley — 2001-03-05 22:13:26

    From: ndg-51@... [mailto:ndg-51@...]

     >I've only toyed a little with Forth and just found out about Joy, but

    >anyway ..

    >(On the other hand I know some things about type systems :)

     Did you check out the type system in strongForth (available from our Files

    page, or from its homepage)?  It's impressive in its simplicity and

    flexibility.  Very Forthlike, yet provides full static polymorphism on input

    parameters.

    -Billy

## Billy Tanksley — 2001-03-08 02:04:09

    It's good to see a post here :-).

    From: Manfred von Thun [mailto:phimvt@...]

     >On Wed, 14 Feb 2001 ndg-51@... wrote:

    >> --- In concatenative@y..., phimvt@l... wrote:

    >> > On Sat, 23 Dec 2000, sz wrote:

    >> > > NumRes == Int Float Either synonim ;

    >> I would write that :

    >>   type NumRes == Int Float Either ;

    >> This is the type of objects which contain

    >> either an object of type 'Int' or an object of type 'Float'

    >I think it will need a lost of discussion whether concatenative

    >notation (Forth, Joy) is really the best to use for types.

    >Also, distinguish concatenative notation from postfix notation.

    >For example,

    >    add_three   ==   +  +

    >is perfectly OK concatenative notation, but of course the right

    >hand side does not denote a number.

     I wouldn't call any notation using infix "==" concatenative notation.

    "add_three" [+ +] == would be a little more concatenative.

    I'm not sure what you mean by "does not denote a number", though.  The

    expression certainly doesn't have a numeric literal in it -- but I don't

    know why that should be important.  The right side does weakly connote a

    number, since + is defined primarily on numbers.

    Dr. Becher has done some impressive work with concatenative type-notation;

    the result is both simple and powerful.

     >Let us now ask whether there might be a use for

    >    alt_three   ==   Either Either

    >Maybe there is, but I don't see it yet. If there is no use for

    >that, then your particular example is best seen as just postfix

    >notation.

     Why shouldn't there be a use for alternating between one of three types?  I

    don't get it.

     >    EXPRESSION                denotes         VALUE

    >    arithmetic postfix            -->         number

    >          type postfix            -->         type

    >    arithmetic concatenative      -->    numeric_stack function

    >          type concatenative      -->       type_stack function     ???

     Hmm.  I'm not familiar with your usage of the word "denote".  To me, it

    means "to explicitly write down."  It's usually opposed to "connote", which

    means "to carry meaning implicitly."  Thus, I don't know what you're saying

    here.

    I also don't know exactly what your distinction between "postfix" and

    "concatenative" is; I'm guessing that "postfix" is being used as a parsing

    term (whether or not the parser can truly handle all concatenative

    properties), and "concatenative" implies the preservation of concatenative

    semantics.  Thus, you could make a postfix language out of Lisp by putting

    the function at the end of the parentheses, but it would still be an

    applicative language.

     >> So if an object has type 'a b Either',

    >> for some types a and b, said object contains

    >> either an object of type 'a' or an object of type 'b'

    >> (And you can determine at runtime which alternative

    >> a specific object is)

     I didn't notice this in the original post.  I think runtime type

    determination is essential, but I don't think it's wise to require it of all

    types, as he's implying here.  I'll talk more about this later if anyone

    asks -- I've gotta go.

     >    - Manfred

     -Billy

## Manfred von Thun — 2001-03-08 07:18:19

    On Wed, 7 Mar 2001, Billy Tanksley wrote:

     > From: Manfred von Thun [mailto:phimvt@...]

    > >On Wed, 14 Feb 2001 ndg-51@... wrote:

    > >> --- In concatenative@y..., phimvt@l... wrote:

    >

    > >> > On Sat, 23 Dec 2000, sz wrote:

    > >> > > NumRes == Int Float Either synonim ;

    >

    > >> I would write that :

    > >>   type NumRes == Int Float Either ;

    > >> This is the type of objects which contain

    > >> either an object of type 'Int' or an object of type 'Float'

    >

    > >I think it will need a lost of discussion whether concatenative

    > >notation (Forth, Joy) is really the best to use for types.

    > >Also, distinguish concatenative notation from postfix notation.

    > >For example,

    > >    add_three   ==   +  +

    > >is perfectly OK concatenative notation, but of course the right

    > >hand side does not denote a number.

    >

    > I wouldn't call any notation using infix "==" concatenative notation.

    > "add_three" [+ +] == would be a little more concatenative.

     If one thing is defined to be another, then the two are really one,

    they are the same thing. For expressions this means that the one

    can be substituted for the other. Examples of substitutions:

       2 3 +  ==  5   and hence   2 3 + 10 *  ==  5 10 *

       2 *  ==  dup +    and hence  3 2 *  ==  3 dup +

    After the definitions

       square  ==  dup *

       add_three  ==  + +

    they can be substituted, for example

       3 square  ==  3 dup *

       4 add_three  ==  4 + +

           (and incidentally, but only because addition is associative:

                    ==  + 4 +   )

    But after the definition

       "add_three" [+ +]  ==

    they can't be substituted - one is a string, the other is a quoted

    program. Where one writes the == , if at all, is independent of the

    syntax of what goes on the left (a new name) and on the right (an

    expression). One could write definitions like this:

      { square dup *, add_three + +, swapd [swap] dip }

    i.e. as comma-separated combinations of a name and a (possibly empty)

    program. The program would still be in whatever notation the language

    uses.

     >

    > I'm not sure what you mean by "does not denote a number", though.

     I think my usage is entirely conventional, as in "denotational semantics".

    Semantics gives meaning to syntactic expressions (combinations of

    symbols). Semantics has to start with the simplest symbols and give

    them a meaning, their denotation. For example, the following are

    expressions one can find in English writing:

      "seven"  "7"  "VII"  "3 + 4"  "the number of days of the week"

    All these expressions denote one and the same number - I could tell

    you what that number is (as though you did not know), but in doing

    so I would have use to an expression which denotes that number. That

    would have to be one of the expressions or a new one.

     >                                                                   The

    > expression certainly doesn't have a numeric literal in it -- but I don't

    > know why that should be important.  The right side does weakly connote a

    > number, since + is defined primarily on numbers.

     This is how I would say it:

      + +   denotes a function from stacks whose top three elements are

            numbers and which returns a stack in which the top three numbers

            are replaced by just one number, their sum.

    That function does not denote a number, nor a ternary function

    from three numbers to one numbers. It denotes a function from stacks to

    stacks.

     > >Let us now ask whether there might be a use for

    > >    alt_three   ==   Either Either

    > >Maybe there is, but I don't see it yet. If there is no use for

    > >that, then your particular example is best seen as just postfix

    > >notation.

    >

    > Why shouldn't there be a use for alternating between one of three types?  I

    > don't get it.

     As I said, maybe there is, but I don't see it yet.

     >

    > >    EXPRESSION                denotes         VALUE

    > >    arithmetic postfix            -->         number

    > >          type postfix            -->         type

    > >    arithmetic concatenative      -->    numeric_stack function

    > >          type concatenative      -->       type_stack function     ???

    >

    > Hmm.  I'm not familiar with your usage of the word "denote".  To me, it

    > means "to explicitly write down."  It's usually opposed to "connote", which

    > means "to carry meaning implicitly."  Thus, I don't know what you're saying

    > here.

     See what I said earlier. Writing down is done by people and computers,

    or if you like human hands and printers. But they don't denote in any

    sense I have heard of.  I see "connote" only rarely these days. An old

    example used to be "I am firm" "you are obstinate" "he is a pigheaded

    fool" - which carry the same information but different connotation

    (same as "emotive meaning"). Dunno. Maybe an expert on intensional

    languages can clarify what connotation is.

     > I also don't know exactly what your distinction between "postfix" and

    > "concatenative" is; I'm guessing that "postfix" is being used as a parsing

    > term (whether or not the parser can truly handle all concatenative

    > properties), and "concatenative" implies the preservation of concatenative

    > semantics.

     Let me try:

                    EXPRESSION       what the expression denotes

     concatenative:

                    5                a unary function from stacks to stacks

                                       (push the number five)

                    2 3 +            same as above

                    + +              a unary function from stacks to stacks

                                       (add top three numbers)

     postfix:

                    5                the number five

                    2 3 +            same as above

                    + +              nothing

     >  Thus, you could make a postfix language out of Lisp by putting

    > the function at the end of the parentheses, but it would still be an

    > applicative language.

     That is exactly right.

    Instead of postfix one could use prefix, and instead of the

    "diagrammatic" (category theory) order of Forth or Joy one could

    use the reverse, "applicative" order - both awful terms if you ask me.

    Concatenative-reverse would make  + +  just as meaningful

    as concatenative does: it denotes a unary function from stacks to

    stacks... - you have heard it before.  But  + +  is not meaningful

    in postfix or prefix notation, even though of course

       1 2 3 + +   is meaningful in postfix, and

       + + 1 2 3   is meaningful in prefix.

    While I'm at it, we must distinguish  + +  from    (read "\" as "lambda")

       \x \y \z  + + x y z

       \x \y \z  x + y + z

       \x \y \z  x y z + +

    which all denote, in prefix, infix and postfix, the ternary function

    which adds three numbers (and that is not a unary stack function either).

    I hope this helps. I have to admit that it took me a _very_ long

    time to get clear on all this.

    - Manfred

## Reuben Thomas — 2001-03-08 08:52:04

    > Dr. Becher has done some impressive work with concatenative type-notation;

    > the result is both simple and powerful.

     Do you have a reference for this?

    --

    http://sc3d.org/rrt/ | violence, n.  bravery for cowards

## Billy Tanksley — 2001-03-08 19:10:33

    From: Reuben Thomas [mailto:rrt@...]

     >> Dr. Becher has done some impressive work with concatenative

    >> type-notation; the result is both simple and powerful.

    >Do you have a reference for this?

     http://home.t-online.de/home/s.becher/forth/

    Good stuff.

    -Billy

## ndg-51@mdstud.chalmers.se — 2001-04-03 16:25:45

    --- In concatenative@y..., Billy Tanksley <wtanksley@b...> wrote:

     > It's good to see a post here :-).

    >

    > From: Manfred von Thun [mailto:phimvt@l...]

    > >On Wed, 14 Feb 2001 ndg-51@m... wrote:

    > >> So if an object has type 'a b Either',

    > >> for some types a and b, said object contains

    > >> either an object of type 'a' or an object of type 'b'

    > >> (And you can determine at runtime which alternative

    > >> a specific object is)

    >

    > I didn't notice this in the original post.  I think runtime type

    > determination is essential, but I don't think it's wise to require

     it of all

     > types, as he's implying here.  I'll talk more about this later if

     anyone

     > asks -- I've gotta go.

     I don't think runtime type information is essential (i'm more of a

    static typer than a dynamic typer (heresy ?))

    what i meant was that one could (at runtime) determine wheather the

    object of type 'a b Either' contained an object of type 'a' or an

    object of type 'b', *not* what type 'a' or 'b' is...

    This kind of thing could be seen as a dynamic type tag,

    but it's necessary even in statically typed languages

     >

    > >    - Manfred

    >

    > -Billy

## Billy Tanksley — 2001-04-03 17:45:42

    From: ndg-51@... [mailto:ndg-51@...]

     >> in regular expressions and grammars. The "|" might

    >> be paired with a "fail" operator to give backtracking.

    >> So "." and "|" would be similar to "," and ";" in Prolog.

    >> But just as regular expressions and grammars do quite

    >> nicely without making both infix operators explicit,

    >> so could Joy which has other infix operators.

    >> Anyone out there want to implement a backtracking version

    >> of Joy? If you do, take a look at the Pascal pages on my

    >> web page. Lots of backtracking programs there.

    >interesting

     Indeed.  Backtracking is fun :-).

    It's also surprisingly easy to add to a concatenative language, if the

    language allows well-defined access to the return stack and a word to push

    the current continuation.

    http://www.forth.org.ru/~mlg/#bacforth

    I don't read Russian, but the English paper tells me what I needed.

    By "well defined access" I mean a way to push and pop things from the return

    stack onto the data stack, and a well-defined way to operate on them on the

    data stack (swap, dup, and so on).

     >>   - Manfred

     -Billy

## Manfred von Thun — 2001-04-11 01:57:16

    My recollection is that when the concatenative group was

    handled by egroups.com, one had to join to read the emails.

    When I was first invited, I joined and put a link on the

    Joy page advising how to join the group - and of course

    I had to give the name of the group.

    In the meantime the handling of the group was transferred to yahoo.

    Recently I had a private email (from a non-member, at that time)

    suggesting that I update the link to

            http://groups.yahoo.com/group/concatenative

    which gets into the group directly. All the old posts are there,

    very nicely archived. But one can read them even if one is

    not a member - as I found out when I visited that site from

    another account which very definitely does not have any connection

    with my normal account. So if I give the above link on the

    Joy page, some marketeer can flood us with advertisements.

    If I just give as the new link

            http://groups.yahoo.com

    anyone interested will have to know the name of group to use

    the search facility to find us. So I'll have to tell them, also

    on the Joy page, to search for "concatenative". Then the

    mail archive is two clicks away - just as easy for the marketeer.

    I receive the usual academic junk mail from my own University

    Administration, but apart from that just about nothing from

    the outside - maybe two or three per year. So it seems that

    yahoo is in fact quite safe, and that marketeers cannot be

    bothered to hunt us down.

    I nobody objects, I shall change the link on the Joy page

    to the first, longer one above. It saves any new joiners those

    extra two clicks. Please let me know if anyone objects.

       - Manfred