Linda,

It does not seem to me that rephrasing to avoid @ (rank-zero composition)
makes expressions simpler, either in this specific case or in general.

If you'd like to elaborate on why that seems simpler to you, I'd like to
hear your perspective.

--Tracy


On Sat, Nov 26, 2011 at 9:46 AM, Linda Alvord <lindaalv...@verizon.net>wrote:

> A function that works.  It is not simple. Remove the @
>
> Linda
>
> -----Original Message-----
> From: programming-boun...@jsoftware.com
> [mailto:programming-boun...@jsoftware.com] On Behalf Of EelVex
> Sent: Saturday, November 26, 2011 9:15 AM
> To: matxinle...@hotmail.com
> Cc: Programming forum
> Subject: Re: [Jprogramming] FW: A simple function
>
> On Sat, Nov 26, 2011 at 11:29 AM, m l <matxinle...@hotmail.com> wrote:
>
> >
> > I`m a beginner in J programming.
> > I need writing a simple function:
> >
> > round ( x * sqrt (x*y))
> >
> > Thanks in advance.
> >
> > Matxin
> >
> >
> Among the gazillion ways to do this:
>
> f =: [: <.0.5+ {. * %:@*/
> f 15 30
> 318
> ------
> 1. If you have a list of two numbers: x,y, you multiply them with `*/`:
> */ 15 30
> 450
>
> 2. You then take the square root (`%:`) of (`@`) that:
> (%: @ */) 15 30
> 21.2132
>
> 3. and multiply that by the first term of your list (`{.`)
> ({.  * (%: @ */)) 15 30
> 318.198
>
> 4. You then "apply" (`[:`) rounding (`<.0.5+`) to that:
> ([: <.0.5+ {. * (%:@*/)) 15 30
> 318
>
> Note that the construct in step 3 is a train of 3 verbs (see:
> http://www.jsoftware.com/help/learning/09.htm).
> (f g h) y  == (f y) g (h y)
> where
> y = 15 30
> f = {.  (take first)
> g = *  (multiply)
> h = %:@*/  (square root of product)
>
> Also, you round a number n by taking the floor of (n + 0.5).
>
----------------------------------------------------------------------
For information about J forums see http://www.jsoftware.com/forums.htm

Reply via email to