Assignment is not *necessarily* side effecting. If you treat assignment as a mapping from string keys to values and you write your program carefully then it can still be functional. The thing to watch out for in J is that the maps are global and update in place rather than returning a copy. Besides, almost all J is a mix of tacit and explicit anyway so why worry about being non-functional?

On 07/13/2016 09:07 PM, bill lam wrote:
I find it very strange for tacit code mixed with copula.
In general tacit form is functional and side effect free, so that
composition is possible but copula is special and depends side effect.

Ср, 13 июл 2016, JBeta написал(а):
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

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

Reply via email to