ĵaŭ, 04 Feb 2010, Alex Gian skribis:
> Hi - complete newbie to J here. Though I like what I've seen so far.
> 
> Here's my starter question:
> I'd like to code the function that gives the inverse of a sum of
> inverses (eg. like when calculating resistors in parallel)
> 
> It works fine if I just write it out as
>       % +/ % 10 20 40            (ans 5.71429)
> 
> However, if I try to make a function of it, 
>       invsuminv =. % +/ %
> it becomes a fork (I guess that _does_ make sense), and just computes
> the "cross-sum" of the inverses, as if I'd typed
>          (% +/ %) 10 20 40
>         0.2  0.15 0.125
>        0.15   0.1 0.075
>       0.125 0.075  0.05
> 
> How can I avoid this? I've tried all sorts of combinations, using @ and
> & but can't seem to crack it.  Obviously something fundamental I'm not
> grasping. Any help appreciated.

The reason why @ failed is the rank of % is 0. That means
  % 10 20 40
can give result you expected but % itself can only see each atom one
by one, something like this, (do not worry, actual calculation will not
be that inefficient)
  (% 10) , (% 20) , (% 40)

now rank of % is inherent by @ so inside the verb 
  (+/ @ %) 
the rank of +/ become rank 0, meaning the summation is not over the
entire array but over individual atom, produce something like
  (+/ % 10) , (+/ % 20) , (+/ % 40)

Rank of _verb_ is a fundamental concept in J, and the ranks (note
plural) of every primitive verb is clearly written on the top of page
(for that verb) in the dictionary of J.

also %@:+/@:% does not work because it is interpreted as
(%@:+)/@:% so you have to parenthesis +/

-- 
regards,
====================================================
GPG key 1024D/4434BAB3 2008-08-24
gpg --keyserver subkeys.pgp.net --recv-keys 4434BAB3
----------------------------------------------------------------------
For information about J forums see http://www.jsoftware.com/forums.htm

Reply via email to