Richard

FWIW,  Dyalog APL has had something like the C-type
f= assignment for a long time,  so perhaps J could also
achieve this if there was sufficient demand.
 
So:  if f is _any_ dyad, and r x and y nouns, you could do
   x f=: y    NB.  instead of (valid) x =: x f y

[I'm embedding extra line breaks]

              NB.  APL doesn't really distinguish  =. and  =: 
or

   r =: x f=: y NB. instead of x =: x f r =: y

Interestingly, APL assigns y as the "pass-through" value to r
rather than x f y  which one might have expected.

A simple example:

   A =: 1 2 3 4 5

   r =: A+=: 10     NB. APL, this is not valid J!

   A

11 12 13 14 15

   r

10

and another:
   vec =: 3 5 1 _1 _2 4 0 _3 2

   vec#~ =: vec>0   NB. APL, this is not valid J!

   vec

3 5 1 4 2

Using Raul's modf:
   'v' #~ modf v>0 NB. this is valid J!

3 5 1 4 2

or !?!!

   'v' (#~>&0) modf v   NB. so is this!

3 5 1 4 2

When you get to know J, you might prefer something like

   [v =: (#~>&0) 3 5 1 _1 _2 4 0 _3 2

3 5 1 4 2

However,  I do like Dyalog's modified assignment and use
it often when in APL.

BTW, modified assignment (with indexed assignment, also not in J!)
allows a nice way of constructing a frequency table:
   v =: 1 1 2 1 2 1 2 3 NB. data!

   w =: 0#~#~. v         NB. initialise table with 3 zeros

   w[v i.~ ~. v] +=: 1   NB. APL allows bracket indexed assignment

   w

4 3 1  NB.  v has 4 ones, 3 twos, 1 three

You can of course do this in J using key, /.

Mike

Raul Miller wrote:
> For what it's worth, here is how to define, in J, a
> word which parallels C's modified assignment
> operations:
>
> modf=:1 :0
> :
>   (x)=:(".x)u y
> )
>
>
> Its use pattern is:
>
>    quotedname verb modf noun
>
> Its meaning is:
>    name =: name verb noun
>
> where name is the name which was quoted.
>
> For example:
>    N=:10
>    'N' + modf 3
>    'N' * modf 2
>
> N will have the value 26 after executing these lines.
>
> If any of this needs explaining, please let me know.
>
> FYI,
>
>   
and Richard Kubina wrote:

   f=:3
   (=: >:) f
|syntax error
|   (=:>:)f

Why is this not allowed?

----------------------------------------------------------------------
For information about J forums see http://www.jsoftware.com/forums.htm

Reply via email to