First let me apologise if this has already come up (I couldn't find
it in the archive). I was just thinking about the identification of
the left and right zeroes of the Joy algebra, and their association
with 'abort' and 'newstack' .
From the Joy mathematical foundations paper:
> ... It is appropriate to remark here that there is also a left zerol P == l P r == r
> element and there is a right zero element. Two such elements l and r
> satisfy the following for all programs P:
> Since function composition is not commutative, the two zero elementsAm I right in thinking that if 'newstack' is a right zero in Joy (and
> are not identical. In Joy the left zero l is the abort operator, it
> ignores any program following it. The right zero r is the clearstack
> operator, it empties the stack and hence ignores any calculations that
> might have been done before. The two operators have some theoretical
> interest, and they are occasionally useful.
we want it to be defined everywhere), then 'abort' must be the function
that is not defined anywhere ? Otherwise
abort == abort newstack == newstack
causes problems for 'newstack'. Does that mean that 'abort' is also
a right zero and, barring side effects, any concatenation including
'abort' is the same ?
Joel Kelso (chiral@...)
On Mon, 22 Oct 2001, Joel Kelso wrote:
Thanks for the interest! It is good to hear that people do read
the theoretical material on Joy.
> First let me apologise if this has already come up (I couldn't find
> it in the archive). I was just thinking about the identification of
> the left and right zeroes of the Joy algebra, and their association
> with 'abort' and 'newstack' .
>
> From the Joy mathematical foundations paper:
>
> > ... It is appropriate to remark here that there is also a left zero
> > element and there is a right zero element. Two such elements l and r
> > satisfy the following for all programs P:
>
> l P == l P r == r
>
> > Since function composition is not commutative, the two zero elements
> > are not identical. In Joy the left zero l is the abort operator, it
> > ignores any program following it. The right zero r is the clearstack
> > operator, it empties the stack and hence ignores any calculations that
> > might have been done before. The two operators have some theoretical
> > interest, and they are occasionally useful.
>
> Am I right in thinking that if 'newstack' is a right zero in Joy (and
> we want it to be defined everywhere), then 'abort' must be the function
> that is not defined anywhere ?
No, I think a good way to think about it is this:
abort 44 55 66 == id
> Otherwise
>
> abort == abort newstack == newstack
>
> causes problems for 'newstack'. Does that mean that 'abort' is also
> a right zero and, barring side effects, any concatenation including
> 'abort' is the same ?
No, for example
11 22 33 abort 44 55 66 => 11 22 33
And combining that with my earlier response,
11 22 33 abort 44 55 66
== 11 22 33 id
== 11 22 33
It would have been possible to let abort clear the stack too.
But I decided against that because after the abort the so far
computed stack might be useful for debugging purposes.
> Joel Kelso (chiral@...)