Don wrote:
"I think it would be impossible to do an amendment in place in tacit code"

It is not possible to amend in place tacitly in the official version of J.
However, tacit versions of amend, and append, in-place have been
implemented in an special version of J.  These are definitively not for the
faint of heart because the tacit writer has to assume full responsibility
and unexpected consequences might (will eventually) happen.

The following is a comparison between a tacit implementation of a Turing
machine (utm) (for details, see the link of my talk in
http://www.jsoftware.com/jwiki/Community/Conference2012#Schedule) and an (a
partial) in-place (utmIP) version where only the sentence,

    T h( amend o (PRINT f ; P f ; T f ) ) f.
<@:((0: 0&({::)@:]`(<@:(1&({::))@:])`(2&({::)@:])} ])@:(7&({::) ; 3&({::) ;
2&({::))) 2} ]

in the utm was replaced by,

   (PRINT,P,T) Amend
7 3 2&(102!:0)

in the utmIP; the array (the tape referred by T) grows to a maximum tally
of just 1965 in this example, nevertheless,  the in-place amendment makes a
difference (Surface 2 Pro timings running on battery):

   st
(] , <@:(1&({::) * 2&({::)))@:(] ; 7!:2@:] ; 6!:2)

   NB. http://www.drb.insel.de/~heiner/BB/bb-list (similar to Uhing's)

   NB.        0         1      Tape Symbol Scan
   NB. S   p  m  g   p  m  g

   QS=. (noun _) ; 0 NB. Reading the transition table and setting the state
    0   1 _1  1   1 _1  3
    1   1  1  2   0  1  4
    2   0 _1  0   0  1  1
    3   1 _1  4   1  0 _1
    4   1  1  2   1 _1  2
)


   TPF=. 0 ; 0 ; _                              NB. Setting the tape, its
pointer and the display frequency


   st'TPF smoutput@:utm   QS NB. (not in-place)'
0 0:0
0  :^
3 1
:11010101010101110111011101110111011101110111011101110111011101110111011101110111011101110111011101110111011101110111011101110111011101110111011101110111011101110111011101110111011101110111011101110111011101110111011101110111011101110111011101110111...
2358064:^
...
0 0:0
0  :^
3 1
:11010101010101110111011101110111011101110111011101110111011101110111011101110111011101110111011101110111011101110111011101110111011101110111011101110111011101110111011101110111011101110111011101110111011101110111011101110111011101110111011101110111...
2358064:^
...
┌─────────────────────────────────────────┬──────┬──────────┬──────────┐
│TPF smoutput@:utm   QS NB. (not in-place)│219648│78.6351039│17272043.3│
└─────────────────────────────────────────┴──────┴──────────┴──────────┘


   st'TPF smoutput@:utmIP QS NB. (in-place)'
0 0:0
0  :^
3 1
:11010101010101110111011101110111011101110111011101110111011101110111011101110111011101110111011101110111011101110111011101110111011101110111011101110111011101110111011101110111011101110111011101110111011101110111011101110111011101110111011101110111...
2358064:^
...
0 0:0
0  :^
3 1
:11010101010101110111011101110111011101110111011101110111011101110111011101110111011101110111011101110111011101110111011101110111011101110111011101110111011101110111011101110111011101110111011101110111011101110111011101110111011101110111011101110111...
2358064:^
...
┌─────────────────────────────────────┬──────┬──────────┬──────────┐
│TPF smoutput@:utmIP QS NB. (in-place)│216064│62.9319836│13597336.1│
└─────────────────────────────────────┴──────┴──────────┴──────────┘




On Tue, Jul 8, 2014 at 6:28 PM, Don Guinn <[email protected]> wrote:

> I think it would be impossible to do an amendment in place in tacit code,
> but amendment should still work in a tacit expression, just not in place.
> But if the result were assigned back to the original variable what will
> happen? Would the tacit expression prevent it from recognizing the
> operation as an amendment in place?
>
>
> On Tue, Jul 8, 2014 at 4:21 PM, Jose Mario Quintana <
> [email protected]> wrote:
>
> > Erling wrote: "It's obviously not possible to do any amendments in tacit
> > code?"  Adding after wards: "A principle of functional programming is you
> > never modify a variable?"
> >
> >
> >
> > From my perspective those (rhetorical?) questions are separate.
>  Regarding
> > the first question, consider the verb (v) that produces the squares of an
> > amendment produced by the verb amend.  For example,
> >
> >
> >
> >    ( v=. *: @: amend f. )
> >
> > *:@:(_: 0&({::)@]`(1&({::)@])`(2&({::)@])} ])
> >
> >
> >
> >    v (0 1 2 ; 2 3 5 ; 7#9)
> >
> > 81 81 0 1 81 4 81
> >
> >
> >
> > The verb (v) is tacitly defined (is it not?) and amendment is performed
> via
> > } (is it not?); thus the answer to the first question is that it is
> > possible.  Furthermore, the conclusion is reached regardless of what the
> > meanings of “functional programming” and “variable” might, or might not,
> > be.  (Am I missing something?).
>
> ----------------------------------------------------------------------
> For information about J forums see http://www.jsoftware.com/forums.htm
>
----------------------------------------------------------------------
For information about J forums see http://www.jsoftware.com/forums.htm

Reply via email to