# sharp integers (ex. #1 #2) and sharp primitives (#> #< #)

## icpdesign — 2005-09-22 13:22:18

    I am plyaing with the idea of extending Joy by a new data type

    (sharp integer or #int) and 3 new sharp primitives (#> #< #).

    #int (sharp integer):

       ex.  #1 #2 ...

    #int are tagged integers; any expression using a sharp integer

    results in a sharp integer

    ex.

       4 #1 + ==> #5

       #1 #5 + 2 / #2 * ==> #6

    converting sharp integers to integers:

         #3 # ==> 3  // # converts a sharp integer to an integer

    The following two primitives #> and <# replaces a sharp integer

    #n by the element of the stack at position n, and leaves any non

    sharp ineteger as it is:

      #> pops the element from the stack, and

      <# does not pop the element,

    ex.

        10 20 30 3 #> ==> 10 20 30 3

        10 20 30 [5] <# ==> 10 20 30 [5]

        10 20 30 #2 #> ==> 10 30 20

        10 20 30 #2 <# ==> 10 20 30 20

        10 20 30 [40 #2 +] <# i ==> 10 20 30 [40 20 +] i

                   ==> 10 20 30 60

        10 20 30 [40 #2 +] #> i ==> 10 30 [40 20 +] i

                   ==> 10 30 60

        10 20 30 [40 #2 + [#1 #2]] #> i ==> 10 30 [40 20 + [#1 #2]] i

                   ==> 10 30 60 [#1 #2]

    note that the #> did not replace the #int in the nested quotation;

    I am not sure how #> and <# should deal with nested quotations, but

    for now I think that the sharp primitives should be implemented

    as following:

         [Q] #> ==  replace all sharp integeres in the quotation [Q],

                    and pop their corresponding statck element

         [Q] <# ==  replace all sharp integeres in the quotation [Q]

    So, since [#1 #2] is not a sharp integer so it is not replaced

    More to come, I hope I will be able in near future to define

    formally this extensions; sharp integers, sharp primitives

    Taoufik Dachraoui

## icpdesign — 2005-09-22 13:58:14

    I am just wondering if the conversion from #int to int is necessary.

    Any thoughts? Also may be we need a conversion from int to #int

    What if we use the same the conversion primitive to both conversions

    like this:

        3 # ==> #3

        #3 # ==> 3

    so # # ==> id

    Taoufik Dachraoui

    --- In concatenative@yahoogroups.com, "icpdesign"

    <taoufik.dachraoui@w...> wrote:

     > I am plyaing with the idea of extending Joy by a new data type

    > (sharp integer or #int) and 3 new sharp primitives (#> #< #).

    >

    > #int (sharp integer):

    >    ex.  #1 #2 ...

    >

    > #int are tagged integers; any expression using a sharp integer

    > results in a sharp integer

    >

    > ex.

    >    4 #1 + ==> #5

    >    #1 #5 + 2 / #2 * ==> #6

    >

    > converting sharp integers to integers:

    >

    >      #3 # ==> 3  // # converts a sharp integer to an integer

    >

    > The following two primitives #> and <# replaces a sharp integer

    > #n by the element of the stack at position n, and leaves any non

    > sharp ineteger as it is:

    >   #> pops the element from the stack, and

    >   <# does not pop the element,

    >

    > ex.

    >     10 20 30 3 #> ==> 10 20 30 3

    >     10 20 30 [5] <# ==> 10 20 30 [5]

    >     10 20 30 #2 #> ==> 10 30 20

    >     10 20 30 #2 <# ==> 10 20 30 20

    >

    >     10 20 30 [40 #2 +] <# i ==> 10 20 30 [40 20 +] i

    >                ==> 10 20 30 60

    >

    >     10 20 30 [40 #2 +] #> i ==> 10 30 [40 20 +] i

    >                ==> 10 30 60

    >

    >     10 20 30 [40 #2 + [#1 #2]] #> i ==> 10 30 [40 20 + [#1 #2]] i

    >                ==> 10 30 60 [#1 #2]

    >

    > note that the #> did not replace the #int in the nested quotation;

    > I am not sure how #> and <# should deal with nested quotations, but

    > for now I think that the sharp primitives should be implemented

    > as following:

    >

    >      [Q] #> ==  replace all sharp integeres in the quotation [Q],

    >                 and pop their corresponding statck element

    >      [Q] <# ==  replace all sharp integeres in the quotation [Q]

    >

    > So, since [#1 #2] is not a sharp integer so it is not replaced

    >

    > More to come, I hope I will be able in near future to define

    > formally this extensions; sharp integers, sharp primitives

    >

    > Taoufik Dachraoui

## icpdesign — 2005-09-23 06:37:49

    Originally I defined #> and <# as primitives that accepts sharp integers

    or quotations or lists, but after thinking about this I find that it is better

    to redefine #> and <# as follows:

    #n #> ==> pops the nth element from stack and pushed on top

    #n <# ==> reads the nth element from stack and pushed on top

    X #> ==> X if X is not a sharp integer

    As you see this match simpler, and using map we can have what I meant in my previous

    message:

    10 20 [1 [#1 #2] #1 #2] [#>] map ==> [1 [#1 #2] 20 10]

    Taoufik Dachraoui