I'd suggest a new built-in conjunction.  Say 128!:6 or A:

assignwith =: 1 : 0
(y) =: u (y~ [ ]) :: ((i.0)"1) 1
:
(y) =: x u (y~ [ ]) :: ((i.0)"1) 1
)

assignwithC =: 2 : 0
(y) =: u (y~ [ ]) :: (n"_) 1
:
(y) =: x u (y~ [ ]) :: (n"_) 1 
)

the error checking (::) is there to set an initial value if the name doesn't 
exist.

 1 , assignwith (][ +: assignwith) 2 (][ , assignwith) (][erase) 'aa'
1 4

The adverb version can be shortened to 

1 : 0

(y) =: u ". y
:
(y) =: x u ". y
)


which is a neat feature of ".

An alternative to allow tacit definitions of assignments would be the ordinary 
dyad:

=:: 

assign =: 4 : '(x) =: y'

the pattern ([ =:: u) or (] =:: u) would seem straightforward to "boost" with 
special code for in place assignment.

assignwith =: (] assign (u@:".)) : (]assign (u ".)) 


I imagine this as easy and very useful, especially in combination with inplace 
improvements.
----------------------------------------------------------------------
For information about J forums see http://www.jsoftware.com/forums.htm

Reply via email to