Confusion about list types in Joy

Christopher Diggins — 2006-05-14 21:33:25

In Joy the expression:

[1 2 3]

Should have a type of "list of programs" but instead it has the type "list
of ints". I find this confusing. Do we just say in Joy, types are implied by
there context, and "1" can either be a program which returns a new stack
with one on the top, or it can be the integer "1" depending on the context.

Also, what is the history of the term "infra"?


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

John Cowan — 2006-05-15 16:04:58

Christopher Diggins scripsit:
> In Joy the expression:
>
> [1 2 3]
>
> Should have a type of "list of programs" but instead it has the type
> "list of ints". I find this confusing. Do we just say in Joy, types
> are implied by there context, and "1" can either be a program which
> returns a new stack with one on the top, or it can be the integer "1"
> depending on the context.

Yes, that's the nature of Joy. In Joy, data *is* code, as opposed to
the Lisp world in which a subset of data *represents* code.

--
John Cowan cowan@... http://www.ccil.org/~cowan
O beautiful for patriot's dream that sees beyond the years
Thine alabaster cities gleam undimmed by human tears!
America! America! God mend thine every flaw,
Confirm thy soul in self-control, thy liberty in law!
-- one of the verses not usually taught in U.S. schools

Christopher Diggins — 2006-05-15 16:49:38

Hi John,

Consider the following:

sum = [+] fold;

[[1 2] sum] => [3]
[[1 dup] sum] => ???

There is a fundamental difference between the value 1 and the program which
pushes 1 onto the stack. Programs can't rationally support "+" but values
can.

On 5/15/06, John Cowan <cowan@...> wrote:
>
> Christopher Diggins scripsit:
>
> > In Joy the expression:
> >
> > [1 2 3]
> >
> > Should have a type of "list of programs" but instead it has the type
> > "list of ints". I find this confusing. Do we just say in Joy, types
> > are implied by there context, and "1" can either be a program which
> > returns a new stack with one on the top, or it can be the integer "1"
> > depending on the context.
>
> Yes, that's the nature of Joy. In Joy, data *is* code, as opposed to
> the Lisp world in which a subset of data *represents* code.
>
> --
> John Cowan cowan@... http://www.ccil.org/~cowan
> O beautiful for patriot's dream that sees beyond the years
> Thine alabaster cities gleam undimmed by human tears!
> America! America! God mend thine every flaw,
> Confirm thy soul in self-control, thy liberty in law!
> -- one of the verses not usually taught in U.S. schools
>
> ------------------------------
> YAHOO! GROUPS LINKS
>
>
> - Visit your group "concatenative<http://groups.yahoo.com/group/concatenative>"
> on the web.
>
> - To unsubscribe from this group, send an email to:
> concatenative-unsubscribe@yahoogroups.com<concatenative-unsubscribe@yahoogroups.com?subject=Unsubscribe>
>
> - Your use of Yahoo! Groups is subject to the Yahoo! Terms of
> Service <http://docs.yahoo.com/info/terms/>.
>
>
> ------------------------------
>


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

John Cowan — 2006-05-15 17:49:03

Christopher Diggins scripsit:

> sum = [+] fold;
>
> [[1 2] sum] => [3]
> [[1 dup] sum] => ???
>
> There is a fundamental difference between the value 1 and the program which
> pushes 1 onto the stack. Programs can't rationally support "+" but values
> can.

It's not the case that "[[1 2] sum]" evaluates to "[3]" -- it is in fact
self-evaluating -- although it is the case that "[1 2] sum" evaluates to "3".

Every Joy datum has a programmatic interpretation; a symbol is interpreted
as whatever the definition of that symbol might be, or the identity
function (or bottom, depending on the value of "undeferror") if it has
none; every other datum is interpreted as a function which pushes the
datum on the stack.

However, Joy programs are not necessarily total, and in particular the "+"
function cannot be applied to a stack whose topmost member is a symbol.

--
John Cowan cowan@...
"You need a change: try Canada" "You need a change: try China"
--fortune cookies opened by a couple that I know

Christopher Diggins — 2006-05-16 15:12:22

Hi John,

I appreciate you discussing this with me.

So the following is fine:

define f = [1 1] + fold

However the following is no good:

define g = 1
define f = [1 g] + fold

The rationale being that "g" is a symbol versus a literal. This seems to be
an arbitrary distinction between "literals" and "symbols" as two separate
types, when arguably none should be made. I believe this hinders the
automated rewriting of Joy programs.

What I am doing in the Cat language instead is declaring all literals to be
functions, and no different from any other function. This requires a special
operator to convert from [1 2 3] to an actual list of integers.

Any thoughts?

On 5/15/06, John Cowan <cowan@...> wrote:
>
>
> Christopher Diggins scripsit:
>
>
> > sum = [+] fold;
> >
> > [[1 2] sum] => [3]
> > [[1 dup] sum] => ???
> >
> > There is a fundamental difference between the value 1 and the program
> which
> > pushes 1 onto the stack. Programs can't rationally support "+" but
> values
> > can.
>
> It's not the case that "[[1 2] sum]" evaluates to "[3]" -- it is in fact
> self-evaluating -- although it is the case that "[1 2] sum" evaluates to
> "3".
>
> Every Joy datum has a programmatic interpretation; a symbol is interpreted
> as whatever the definition of that symbol might be, or the identity
> function (or bottom, depending on the value of "undeferror") if it has
> none; every other datum is interpreted as a function which pushes the
> datum on the stack.
>
> However, Joy programs are not necessarily total, and in particular the "+"
> function cannot be applied to a stack whose topmost member is a symbol.
>
> --
>
> John Cowan cowan@...
> "You need a change: try Canada" "You need a change: try China"
> --fortune cookies opened by a couple that I know
>
>
> SPONSORED LINKS
> Basic programming language<http://groups.yahoo.com/gads?t=ms&k=Basic+programming+language&w1=Basic+programming+language&w2=Computer+programming+languages&w3=Programming+languages&w4=Java+programming+language&c=4&s=126&.sig=bnac3LCZpttb3c9FvbVU-A> Computer
> programming languages<http://groups.yahoo.com/gads?t=ms&k=Computer+programming+languages&w1=Basic+programming+language&w2=Computer+programming+languages&w3=Programming+languages&w4=Java+programming+language&c=4&s=126&.sig=1Czd2hKCO9_u4KVZQperFQ> Programming
> languages<http://groups.yahoo.com/gads?t=ms&k=Programming+languages&w1=Basic+programming+language&w2=Computer+programming+languages&w3=Programming+languages&w4=Java+programming+language&c=4&s=126&.sig=TyHGCjod4YOKITrSq1xccQ> Java
> programming language<http://groups.yahoo.com/gads?t=ms&k=Java+programming+language&w1=Basic+programming+language&w2=Computer+programming+languages&w3=Programming+languages&w4=Java+programming+language&c=4&s=126&.sig=PZAexF9LyXpKb3HDJSlB1g>
>
> ------------------------------
> YAHOO! GROUPS LINKS
>
>
> - Visit your group "concatenative<http://groups.yahoo.com/group/concatenative>"
> on the web.
>
> - To unsubscribe from this group, send an email to:
> concatenative-unsubscribe@yahoogroups.com<concatenative-unsubscribe@yahoogroups.com?subject=Unsubscribe>
>
> - Your use of Yahoo! Groups is subject to the Yahoo! Terms of
> Service <http://docs.yahoo.com/info/terms/>.
>
>
> ------------------------------
>


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

Sergey Zubkov — 2006-05-16 15:40:23

On Tue, 16 May 2006, Christopher Diggins wrote:

> What I am doing in the Cat language instead is declaring all literals to be
> functions, and no different from any other function. This requires a special
> operator to convert from [1 2 3] to an actual list of integers.
> Any thoughts?

Does it have to be "an actual list of integers" though? That's a whole new
concept to add. Could those functions that put integers on stack simply be
executed when required by fold or map or whatever?



--Sergey Zubkov

John Cowan — 2006-05-16 16:53:00

Christopher Diggins scripsit:

> So the following is fine:
>
> define f = [1 1] + fold
>
> However the following is no good:
>
> define g = 1
> define f = [1 g] + fold
>
> The rationale being that "g" is a symbol versus a literal.

Not at all. The rationale is that "g" is a symbol, whereas "1" is a *number*
(or representations thereof, actually). Addition doesn't apply to symbols,
only to numbers.

In Joy, both symbols and numbers have a function interpretation as well as
a datum interpretation. This has nothing to do with their representations.

> What I am doing in the Cat language instead is declaring all literals to be
> functions, and no different from any other function. This requires a special
> operator to convert from [1 2 3] to an actual list of integers.

That IMHO misses the spirit of Joy. [1 2 3] has the functional interpretation
"push the datum [1 2 3] on the stack", like every other datum except a
symbol, whose functional interpretation is either "do the primitive function
named by the symbol" or else "retrieve the symbol's definition, which is a
list of datums, and apply each datum in turn to the stack".

--
A few times, I did some exuberant stomping about, John Cowan
like a hippo auditioning for Riverdance, though cowan@...
I stopped when I thought I heard something at http://ccil.org/~cowan
the far side of the room falling over in rhythm
with my feet. -- Joseph Zitt