Further to Louis’ comment Skip, I think you might be confusing how the parens (
) affect the “verb train”.
A simple example:
x=:3 5 8 12
+/ % # x
0.25
NB. The above line without parens is just +/ (sum) of the % (reciprocal) of the
# (tally) of x … so reduces as follows
+/ % 4
+/ 0.25
0.25 NB. Hence the answer above
However if you want to treat the verb expression as a “train” then you need to
enclose in parentheses and the result is quite different;
(+/ % #) x
7
NB. The above is equivalent to (+/ x) % (#x), which is the average of 7 [this
is from the dictionary where (f g h) x is executed as (f x) g (h x) …]
If the verb train is assigned by name, with no data arguments in line, then the
verb train does not require parens ( ) …
avg =: +/ % #
avg x
7
HTH, but I recommend reviewing a more complete coverage of verb trains in both
of these references;
http://www.jsoftware.com/help/learning/03.htm
<http://www.jsoftware.com/help/learning/03.htm> (see 3.8)
http://www.jsoftware.com/help/learning/09.htm
<http://www.jsoftware.com/help/learning/09.htm>
Regards Rob
> On 29 Aug 2017, at 7:33 pm, Skip Cave <[email protected]> wrote:
>
> Louis:
>
> This works:
>
> +/(#~[:-.2&|)i.43
>
> 462
>
>
> This doesn't:
>
> +/#~ -.@:(2&|)i.43
>
> 22
>
> Skip Cave
> Cave Consulting LLC
>
> On Tue, Aug 29, 2017 at 4:17 AM, Louis de Forcrand <[email protected]> wrote:
>
>> Also count the verbs in
>>
>> #~ -. 2&|
>>
>> With three verbs this evaluates to a fork, so
>>
>> (#~ -. 2&|) v
>> (#~v) -. 2&|v
>>
>> which signals a length error because #~ changes the shape of its argument.
>>
>> What you want is to apply -. mondadically to 2&|, not apply it between #~
>> and 2&|; to do so use a cap [: like so:
>>
>> #~ [: -. 2&|. (which is a hook with 4 verbs)
>>
>> This is equivalent to
>>
>> #~ -.@:(2&|)
>>
>> Cheers,
>> Louis
>>
>>> On 29 Aug 2017, at 10:29, Raul Miller <[email protected]> wrote:
>>>
>>> You should be using #~ instead of #
>>>
>>> If you look at your intermediate result without the +/ you will see why.
>>>
>>> Thanks,
>>>
>>> --
>>> Raul
>>>
>>>
>>>> On Tue, Aug 29, 2017 at 4:04 AM, Skip Cave <[email protected]>
>> wrote:
>>>> There seems to be two basic approaches to this problem:
>>>>
>>>> 1. Generate the even numbers between 1 & 42, and add them up.
>>>> 2. Use the formula for the sum of an arithmetic progression - e.g.:
>>>>
>>>> Sum=n(a+b)/2
>>>> *n* = number of numbers in the sequence (here 21)
>>>> *a* = the first number in the sequence (here 2)
>>>>
>>>> *b* = the last number in the sequence (here 42)
>>>>
>>>> Generally, I like to approach these kinds of Quora sequence problems
>> using
>>>> a "brute force" approach, and ignore simplifying formulas. In the days
>>>> before modern computers, formulas were developed to make computations on
>>>> sequences like this Quora problem more tractable, particularly when the
>>>> number of terms got large.
>>>>
>>>> Today, with powerful modern computers and languages, it is often easier
>> to
>>>> simply generate a sequence in it's entirety, and then compute some
>> property
>>>> of that sequence such as it's limit, sum, etc. to get the final result.
>>>> This is particularly true when you have at your fingertips a powerful
>>>> matrix language such as APL or J.
>>>>
>>>> For me, the obvious approach to this problem is to simply generate the
>>>> sequence of even integers and then sum them, instead of trying to find a
>>>> formula that relates to that specific sequence (in any case, I didn't
>> have
>>>> a clue where to look for such formulas).
>>>>
>>>> So the plan was: Generate the numbers from 0 to 42, throw out the odd
>>>> numbers (zero doesn't matter in this problem), and then add up what's
>> left:
>>>>
>>>> a =:i.43
>>>>
>>>> +/(-.2|a)#a
>>>>
>>>> 462
>>>>
>>>>
>>>> My main dissatisfaction was that I was sure that this could be done in a
>>>> single line, but I didn't know how to get the integer sequence on both
>>>> sides of the tally/copy verb, which i wanted to use as a binary selector
>>>> mask.
>>>>
>>>> Yes, thanks to Raul and others, I now realize that I could have just
>>>> multiplied the first 21 integers by 2 to get all the even integers and
>> then
>>>> sum them, but I wanted to learn how to get the same vector of integers
>> in
>>>> two places in the formula without having to assign that vector to a
>>>> variable.
>>>>
>>>> Raul showed me how to do that, though he used equality & multiplication
>> to
>>>> generate the selector mask and make the selections.
>>>>
>>>> +/(*0=2&|)i.43
>>>>
>>>> 462
>>>>
>>>>
>>>> Raul's multiply by zero trick was cool, but my purist sensibilities
>> still
>>>> wanted to use selection of the even numbers as the most straightforward
>> way
>>>> to implement the sum of evens.
>>>>
>>>> However, Raul's approach did show me the way. I could use the copy
>> operator
>>>> to implement the selector mask, instead of multiplication
>>>>
>>>> +/(#0=2&|)i.43
>>>>
>>>> 462
>>>>
>>>>
>>>> That worked, So we should also be able to get the sum of the odd
>> numbers:
>>>>
>>>>
>>>> +/(#2&|)i.43
>>>>
>>>> 441
>>>>
>>>>
>>>> Yep. That worked too. So i should also be able use the NOT verb ".-" to
>>>> invert the selection mask to get the sum of evens like I did in my
>> original
>>>> attempt:
>>>>
>>>>
>>>> +/(#-.2&|)i.43
>>>>
>>>> 43
>>>>
>>>>
>>>> AAAAK! What happened? I tried to negate the selection mask, and
>> something
>>>> went terribly wrong! Maybe I need to isolate the negation:
>>>>
>>>>
>>>> +/(#(-.2&|))i.43
>>>>
>>>> |length error
>>>>
>>>> | +/ (#(-.2&|))i.43
>>>>
>>>>
>>>> Nope! What am I doing wrong? How can I simply negate the selection
>> mask,
>>>> just like I did in my original explicit example?
>>>>
>>>>
>>>>
>>>> Skip Cave
>>>> ----------------------------------------------------------------------
>>>> For information about J forums see http://www.jsoftware.com/forums.htm
>>> ----------------------------------------------------------------------
>>> For information about J forums see http://www.jsoftware.com/forums.htm
>>
>> ----------------------------------------------------------------------
>> For information about J forums see http://www.jsoftware.com/forums.htm
>>
> ----------------------------------------------------------------------
> For information about J forums see http://www.jsoftware.com/forums.htm
----------------------------------------------------------------------
For information about J forums see http://www.jsoftware.com/forums.htm