I'm rather new to the J programming language and I have a question about equivalent tacit expressions in J.
I found two lines of J that were equivalent, but the conjunction in the code (^:
)'s arguments were switched using the bracket operators.
I was mainly wondering how this expression:
u ^: x y
is equivalent to this expression:
x u @] ^: [ y
I would appreciate any J programmers to explain how the two are equivalent.
I think that the way to look at this is to look at the tacit expression u@] ^: [
as a verb formed by the conjunction ^:
between the two verbs u@]
and [
. u@]
is going to take the right argument y
(to the exclusion of the left argument) and apply the monadic form of u
to y
. [
is going to use the left argument x
as the value that will provide the number of repetitions of u
as an operator of ^:
.
For the explicit version, u ^: x y
replaces the [
and ]
verbs with their associated left and right arguments and since x
is an operator of ^:
, u ^: x
is effectively a monadic verb with y
as its argument.
Let's set
a=. 3
b=. 4
vb =. +: NB. double
vb ^: a b
32
a vb @] ^: [ b
32
a (vb @] ^: [) b NB. expression within parenthesis is clearly a verb
32