You can replace

if. 0 = 4!:0 <'v' do. s =. v else. s =. v y end.

with

s=. v"_ y

FYI,

-- 
Raul

On Sat, Sep 21, 2013 at 7:48 PM, Pascal Jasmin <[email protected]> wrote:
> Here is what seems to me a much easier/saner version of amend to use, 
> especially for chained amends.  2 versions, one called for L:0 y, then other 
> without.  The dyad version doesn't seem totally necessary.
>
> amend_z_ =: 2 : 0  NB. v is n or n{"num
> if. 0 = 4!:0 <'v' do. s =. v else. s =. v y end.
> (u (s{y)) (s}) y
> :
> if. 0 = 4!:0 <'v' do. s =. v else. s =. v y end.
> (x u (s{y)) (s}) y
> )
>
> amendL0_z_ =: 2 : 0  NB. v is n or n{"num
> if. 0 = 4!:0 <'v' do. s =. v else. s =. v y end.
> (u (s{ L:0 y)) (s}) L:0 y
> :
> if. 0 = 4!:0 <'v' do. s =. v else. s =. v y end.
> (x u (s{ L:0)y) (s} L:0) y
> )
>
>   ([: 2: amend 0 3: amend 1)  amend 2 ( i. 5 3)  NB. replace in row 2, col 0 
> and 1
>  0  1  2
>  3  4  5
>  2  3  8
>  9 10 11
> 12 13 14
>    ([: 2: amend 0 3: amend 1)  amend 2 &.|: ( i. 5 3) NB. replace in col 2, 
> row 0 and 1
>  0  1  2
>  3  4  3
>  6  7  8
>  9 10 11
> 12 13 14
>
>
>    ((0;'f')"_ amend 1 3)  amendL0 3 (<"1 &. |:  i. 5 3), <'ABCDE'  NB. for 
> row 3, replace col 1 and 3
> ┌──────────┬──────────┬───────────┬─────┐
> │0 3 6 9 12│1 4 7 0 13│2 5 8 11 14│ABCfE│
> └──────────┴──────────┴───────────┴─────┘
>
>    ( 2&+ L:0 amend 1 2)  amendL0 3 4 (<"1 &. |:  i. 5 3), <'ABCDE'  NB. use 
> function y, to replace col 1 and 2 of row 3 and 4
> ┌──────────┬───────────┬───────────┬─────┐
> │0 3 6 9 12│1 4 7 12 15│2 5 8 13 16│ABCDE│
> └──────────┴───────────┴───────────┴─────┘
>
>
> or dyad:
>
>    2( + L:0 amend 1 2)  amendL0 3 4 (<"1 &. |:  i. 5 3), <'ABCDE'
> ┌──────────┬───────────┬───────────┬─────┐
> │0 3 6 9 12│1 4 7 12 15│2 5 8 13 16│ABCDE│
> └──────────┴───────────┴───────────┴─────┘
>
> more complex function: change row 3 from 9;10;11;'D' to 11;10;9;'f'
>
>    ((<'f') ,~ |.@:}:) amendL0 3 (<"1 &. |:  i. 5 3), <'ABCDE'
> ┌───────────┬───────────┬──────────┬─────┐
> │0 3 6 11 12│1 4 7 10 13│2 5 8 9 14│ABCfE│
> └───────────┴───────────┴──────────┴─────┘
>
>
> for improvements, the v side could be a 2 sided gerund for the {`} sides 
> which could be for example {"1`}"1 or {L:0`}L:0
>
>
> Thank you Raul and Aai for your help.
>
>
> ----- Original Message -----
> From: Raul Miller <[email protected]>
> To: Programming forum <[email protected]>
> Cc:
> Sent: Saturday, September 21, 2013 12:50:48 AM
> Subject: Re: [Jprogramming] Amend trickiness part 2
>
> On Fri, Sep 20, 2013 at 6:21 PM, Pascal Jasmin <[email protected]> wrote:
>>> I wanted to use the dyadic definition, but did not have
>>> a meaningful value for x, so I used ~ (giving the effect of y m} y).
>>
>> There seems to be a lot more going on there.  There is already an x value of 
>> 1.
>
> Here?
>
>    1 3:`2:`]}~&.>@{`[`]} <"1 |:  i. 5 3
>
> In this case, the ~ in the phrase 3:`2:`]}~&.>@... appears in the verb
> which is on the left side of an @
>
> And we always use the monadic definition of the verb on the left of the @
>
> So we use the monadic definition of 3:`2:`]}~&.> and so we use the
> monadic definition of 3:`2:`]}~
>
> (And the tilde means we use the dyadic definition of 3:`2:`]})
>
> That said, I should point out that there's something subtle going on
> here, with word boundaries:
>
>    ;:'1 2 3: 4 5'
> +---+--+---+
> |1 2|3:|4 5|
> +---+--+---+
>
>> for instance with the value x of _3 _2 0 or 2, an answer is provided,
>> but item 1 of the middle cell is also modified.  Other values of x
>> give various domain or index errors.  If the '~' is removed, then x
>> values of 0 to 2, produce a middle cell of 6 to 8.  I can't follow
>> what causes those results at all.
>
> The x that I think you are speaking of here is relevant for the verb
> on the right hand side of the @ so lets simplify the left hand side
> and play with the expression a bit:
>
>    1 <@0:@{`[`]} <"1 |:  i. 5 3
> +----------+-+-----------+
> |0 3 6 9 12|0|2 5 8 11 14|
> +----------+-+-----------+
>    _3 _2 0 <@0:@{`[`]} <"1 |:  i. 5 3
> +-+-+-----------+
> |0|0|2 5 8 11 14|
> +-+-+-----------+
>    2 <@0:@{`[`]} <"1 |:  i. 5 3
> +----------+-----------+-+
> |0 3 6 9 12|1 4 7 10 13|0|
> +----------+-----------+-+
>
> Note also that index _3 is (for this argument) the same as index 0.
>
>> Next I'm trying to change columns 1 and 4 row 2 to 3 and 'F', but I expect 
>> that to be harder.
>
> Well... I'm not quite sure what you want there, but let us assume that
> you want to change
>
>    (<"1 &. |:  i. 5 3), <'ABCDE'
> +----------+-----------+-----------+-----+
> |0 3 6 9 12|1 4 7 10 13|2 5 8 11 14|ABCDE|
> +----------+-----------+-----------+-----+
>
> to
>
> +----------+-----------+-----------+-----+
> |0 3 3 9 12|1 4 7 10 13|2 5 8 11 14|ABFDE|
> +----------+-----------+-----------+-----+
>
> if so, a phrase that would accomplish that would be:
>
>    (3;7;8;'F') [`2:`]}&.> data
>
> Here, I've presumed that you are calling the contents of a box a
> "column" and that you are calling the location within a box a "row".
> I've also presumed that you have added 1 to the "column index" when
> you are speaking of "columns 1 and 4". I could easily be wrong,
> though, about your intentions. If so, let us know and we can try
> again?
>
> Thanks,
>
> --
> Raul
> ----------------------------------------------------------------------
> For information about J forums see http://www.jsoftware.com/forums.htm
>
> ----------------------------------------------------------------------
> 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