an adverb that will produce a string of is verb argument bound to its x and/or
y arguments.
the string can be executed with ". timex, dissect, or any other function that
takes a linear expression as a parameter.
lrX =: 1 : ('''('', u lrA , '') '' , lr y';':';'''('', (lr x) , '') ('' , u lrA
, '') '' , lr y')
(2;3;4) + each lrX < 3 4 NB. returns string.
(2;3;4) (+&.>) <3 4
this is convenient in that once you have a working expression, you can make a
string of it by simply placing lrX to the right of the verb phrase. While
quote at begining and end doesn't seem an afront to laziness, you don't have to
double quote strings.
to time the expression (note dyadic use of timex),
(2;3;4) + each lrX(10×pacex@:) < 3 4
3.36e_6 3200
or make a shorthand with your favorite timing formattings.
tsA =: lrX((,&'/sec '@":@%@(6!:2) , ,&'MB'@":@(%&1000000)@(7!:2)@:])@:)
(2;3;4) + each tsA < 3 4
240385/sec 0.0032MB
Here is a tool that creates timings as a side effect which means that you can
time just part of an expression, or multiple parts:
tsfX =: 1 : 'u [ [: 1!:2&2@:timespacex u lrX'
'x' ,~ tsfX each (;: 'ap b c') ,&": each tsfX (2;3;4) + each tsfX < 3 4
4.8e_6 3200
1.056e_5 5888
1.92e_6 2176
1.92e_6 2176
1.92e_6 2176
┌──────┬─────┬─────┐
│ap5 6x│b6 7x│c7 8x│
└──────┴─────┴─────┘
timing printouts are from right to left invocations. The last one produces 3
timings because it was placed inside the each adverb. Memory use tends to be
overstated compared to traditional timespacex if very large data inputs are
used (the data is fully linearized and then parsed). Time I believe includes
the parsing time of a noun, but not the calculation time of building that noun.
tsfX executes expressions twice (once by timex, and once to get result)
lrX (dissect @:) is an adverb that can also more easily apply dissect to part
of an expression to avoid quoting and cursor movements.
----------------------------------------------------------------------
For information about J forums see http://www.jsoftware.com/forums.htm