Thank you and Linda for clarification and explanation -I can see the reasoning behind the use of capped forks. It is what the 13: gives. Also, while @: works in this case- it does so only because mean is monadic. In other cases- problems.
I will go over the references that you gave me.

Don

On 16/11/2013 5:56 PM, Pascal Jasmin wrote:
Yes.  All tacit expressions are trains (forks or hooks or a single verb phrase).

Yes to this too:
%:(+/%#)*:  y where y is explicitly entered is treated as 3:  or  13:  ' 
%:(+/%#)*::y '

(explicitly in that the *:y is the argument for mean(+/%#) whose value is the 
argument for %:

The technique you used with @: made the entire expression into a single verb 
phrase.  It is a fairly straightforward but can force extra parentheses, and it 
requires that all verbs to the left of the rightmost @: be monadic.

The [: technique is worth understanding.

rms=:[:%:[:(+/%#)*:


There is a 5 element fork.  The right most 3 are evaluated first.
The 3rd verb [: makes the 2nd (mean) which would normally be evaluated 
dyadically in its position (and so not work as intended) be evoked monadically 
instead.
the 5th verb is needed to prevent the whole expression of being interpreted as 
a hook (with %: 4th verb as the dyad pivot), and to apply the 4th verb 
monadically to the result of the first 3.

these pages may be useful:
http://www.jsoftware.com/jwiki/PascalJasmin/Use%20Forks%20Instead%20of%20Hooks

http://www.jsoftware.com/jwiki/PascalJasmin/Advanced%20forks%20and%20grammar



----- Original Message -----
From: Don Kelly <[email protected]>
To: "[email protected]" <[email protected]>
Cc:
Sent: Saturday, November 16, 2013 8:20:04 PM
Subject: [Jprogramming] Novice problem

This is a novice problem  (which arose from reading  "Easy J" by Linda
Alvort
I think that I have it worked out but this is something (IMHO) that
possibly should be in a primer.
I have occasion to use what is called rms or root mean square (usually
applied to a wave form).
I can define root, mean and square and can do something like:
root mean square 1 2 1 2
or
     %:(+/%#)*: 1 2 1 2                                   NB. in
immediate execution
1.58114                                 OK

A natural tendency equivalent to saying mean=: +/%#
is to try
rms=: %:(+/%#)*:
But rms 1 2 1 2 fails.
However rms=: 3: ' %:(+/%#)*:y'  or rms=: 13: ' %:(+/%#)*:y'
    is OK
and the latter is equivalent to
rms=:[:%:[:(+/%#)*:  which works

Alternatively  rms=:%:@:(+/%#)@:*:    also works

It is obvious that either the capped fork (from use of 13: or use of @:
work and I see
the reasoning behind this- forcing a sequential " root after mean after
square".

Am I right in assuming that immediate execution of
%:(+/%#)*:   y where y is explicitly entered
is treated as 3:   or  13:   ' %:(+/%#)*::y '  (explicitly in that the
*:y is the argument for mean(+/%#) whose value is the argument for %:
i.e. as in APL for which 'tacit' doesn't exist)
and rms=: %:(+/%#)*:  as a tacit verb with no argument  is parsed as a
fork rather than sequentially as desired and runs into never never land?

The classic example of 'mean=:+/%# as a verb is misleading in that the
example is a single fork, but trying to extend it
does need a flag as to the need to emphasize the parsing.
(+/%#) *:  1 2 1 2 works but msg =:(+/%#)*: doesn't work but
msg=:(+/%#)@:*:   or msg=:[:(+/%#)*: do work


Don Kelly


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

Reply via email to