You have seen me escape from Simple J when the going got rough! But for
matrix multiplication you can do
mv =: ([: +/ *)"1 NB. matrix times vector
mm =: [: |: (mv"2 1 |:) NB. matrix time matrix
]a =: i. 2 3
0 1 2
3 4 5
]v =: i. 3
0 1 2
a mv v
5 14
]b =: i. 3 3
0 1 2
3 4 5
6 7 8
a mm b
15 18 21
42 54 66
a +/ . * b
15 18 21
42 54 66
To me it is always a pleasure to see how simply J can do complicated
things. And I am glad we have +/ . * .
On 12/7/2011 8:02 AM, Raul Miller wrote:
> Yes, that was intended to be a simple, meaningful example of f@g@h -- and a
> concise example of how the "Simple J" rules can make some things awkward.
>
> (But it's hardly the only thing made awkward -- consider inner product as
> another concise example.)
...
(THE EXAMPLE:)
> require 'strings' NB. require needed for j6, irrelevant for j7
>
> <@toupper@> 'this';'is';'a';'test'
> +----+--+-+----+
> |THIS|IS|A|TEST|
> +----+--+-+----+
>
> Here's an explicit equivalent that does not require rank and does not
use @
> a=: toupper 0 {:: 'this';'is';'a';'test'
> b=: toupper 1 {:: 'this';'is';'a';'test'
> c=: toupper 2 {:: 'this';'is';'a';'test'
> d=: toupper 3 {:: 'this';'is';'a';'test'
> a;b;c;d
> +----+--+-+----+
> |THIS|IS|A|TEST|
> +----+--+-+----+
----------------------------------------------------------------------
For information about J forums see http://www.jsoftware.com/forums.htm