good post, Raul thank you.

I just want to rant on a pet peave about hooks.

sel=:2 :0 
  (v u) # ] 
)

is better defined as:

sel=:2 : '(u v ]) # ]'

for one, its needed to allow u to be a noun.

The point relating to my pet peave about hooks, is that it also allows u to be 
dyadic.  Not that I have a great use case for it, in this example.

  1 2: sel < i.5
3 4


----- Original Message -----
From: Raul Miller <rauldmil...@gmail.com>
To: Programming forum <programm...@jsoftware.com>
Cc: 
Sent: Friday, April 25, 2014 9:35:02 PM
Subject: Re: [Jprogramming] J in 5 minutes

Ah, I see...

I'd like to draw your attention to something in my code here:

colN=:3 : 0
  {.y&{"1`''
)
'`FName LName Age Company'=: colN"0 i.4

Notice that the expression on the far right is: colN"0 i. 4

That ("0) means that colN is running independently for each value in i.4

Also, I already knew what my column names were, so I did not bother
abstracting them.

Now it looks like you want to have the name list as an argument and build
up operations based on those names. Personally, I tend to shy away from
abstractions unless I feel they will help (J gives a lot of abstraction
already). Still, let's look at some alternatives for the way you currently
have things expressed:

   cols=: 'FName';'LName';'Age';'Company'
   vars=:('`',(, > (],&'_eq ') each cols))
   verbs=:". }. ,> ('`',[) each ('((= ' , ') # ])' ,~ ]) each cols

Here's how I might express those two first two lines:
   cols=: ;:'FName LName Age Company'
   vars=: '`',;:inv cols,L:0 '_eq'

But verbs is a bit different. I'd be tempted to not bother with names of
the form FName_eq and instead use an adverb:
eq=:1 :0
  (= u) # ]
)

Then, instead of FName_eq, I would use FName eq

Or, (contradicting my earlier statement about avoiding abstraction - but
what I really meant was that I like simple, direct abstractions, but mostly
it's hard for me to describe "how I think" in a meaningful fashion):

sel=:2 :0
  (v u) # ]
)

Now, instead of FName_eq or FName eq, I would use = sel FName

But let's say that I wanted to define those verbs. First, notice something:

   cols-:FName`LName`Age`Company
1

A boxed list of names of verbs is equivalent to a gerund listing those
verbs by name. And that relates back to what colN was doing (forming a
gerund length one and taking the first and only box from that list). I can
perform a similar trick here:

('`',;:inv cols,L:0 '_eq')=: 3 :'{. = sel (y`:6)`'''''"0 cols

Does this make sense?

Thanks,

-- 
Raul



On Fri, Apr 25, 2014 at 9:02 PM, Joe Bogner <joebog...@gmail.com> wrote:

> On Fri, Apr 25, 2014 at 7:44 PM, Raul Miller <rauldmil...@gmail.com>
> wrote:
>
> > On Fri, Apr 25, 2014 at 5:31 PM, Joe Bogner <joebog...@gmail.com> wrote:
> >
> > > So I can generate a string and evaluate it, but is there a better way
> > than
> > > evaluating the string?
> > >
> >
> > Here are some options:
> >
> > ". (or do - the advantage of do being that it's a name so you can specify
> > which locale to use).
> >
> >
> My goal is to define a list of helper verbs for each column in the table.
>
> I used ". in my last version. It was somewhat cryptic, so here it is again
> with more details:
>
> cols=: 'FName';'LName';'Age';'Company'
>
> ] vars=:('`',(, > (],&'_eq ') each cols))
>
> `FName_eq LName_eq Age_eq Company_eq
>
>
>
> ] verbs=:". }. ,> ('`',[) each ('((= ' , ') # ])' ,~ ]) each cols
>
>
>
>
> ┌───────────────────────┬───────────────────────┬─────────────────────┬─────────────────────────┐
>
>
> │┌─┬───────────────────┐│┌─┬───────────────────┐│┌─┬─────────────────┐│┌─┬─────────────────────┐│
>
>
> ││3│┌─────────────┬─┬─┐│││3│┌─────────────┬─┬─┐│││3│┌───────────┬─┬─┐│││3│┌───────────────┬─┬─┐││
>
> ││ ││┌─┬─────────┐│#│]││││ ││┌─┬─────────┐│#│]││││ ││┌─┬───────┐│#│]││││
> ││┌─┬───────────┐│#│]│││
>
> ││ │││2│┌─┬─────┐││ │ ││││ │││2│┌─┬─────┐││ │ ││││ │││2│┌─┬───┐││ │ ││││
> │││2│┌─┬───────┐││ │ │││
>
> ││ │││ ││=│FName│││ │ ││││ │││ ││=│LName│││ │ ││││ │││ ││=│Age│││ │ ││││
> │││ ││=│Company│││ │ │││
>
> ││ │││ │└─┴─────┘││ │ ││││ │││ │└─┴─────┘││ │ ││││ │││ │└─┴───┘││ │ ││││
> │││ │└─┴───────┘││ │ │││
>
> ││ ││└─┴─────────┘│ │ ││││ ││└─┴─────────┘│ │ ││││ ││└─┴───────┘│ │ ││││
> ││└─┴───────────┘│ │ │││
>
> ││ │└─────────────┴─┴─┘│││ │└─────────────┴─┴─┘│││ │└───────────┴─┴─┘│││
> │└───────────────┴─┴─┘││
>
>
> │└─┴───────────────────┘│└─┴───────────────────┘│└─┴─────────────────┘│└─┴─────────────────────┘│
>
>
>
> └───────────────────────┴───────────────────────┴─────────────────────┴─────────────────────────┘
>
>
>
> (I don't know how to paste this better)
>
>
> (vars)=:verbs
>
>
> FName_eq
>
>
> (= FName) # ]
>
>
>
> I can now execute statements like this: (<'John') FName_eq (<'Acme')
> Company_eq data
>
>
> This works fine, but I wanted to get input on it vs other other approaches.
>
>
>
> More specifically, you used this:
>
>
> colN=:3 : 0
>   {.y&{"1`''
> )
> '`FName LName Age Company'=: colN"0 i.4
>
>
> I don't quite understand how it works and I was wondering if it's better
> than using Do. I don't know how to have a verb return a train of verbs for
> a gerund. I may be using the wrong terminology.
>
> [colN"0 i.1
>
> ┌─────────────────────────┐
>
> │┌─┬─────────────────────┐│
>
> ││"│┌─────────────┬─────┐││
>
> ││ ││┌─┬─────────┐│┌─┬─┐│││
>
> ││ │││&│┌─────┬─┐│││0│1││││
>
> ││ │││ ││┌─┬─┐│{│││└─┴─┘│││
>
> ││ │││ │││0│0││ │││ │││
>
> ││ │││ ││└─┴─┘│ │││ │││
>
> ││ │││ │└─────┴─┘││ │││
>
> ││ ││└─┴─────────┘│ │││
>
> ││ │└─────────────┴─────┘││
>
> │└─┴─────────────────────┘│
>
> └─────────────────────────┘
>
>
>
> I can come reasonable close, but not the final mile. No big deal if Do. is
> good enough, since it works
>
>
> '`FName_eq LName_eq' =: (3 : '=&y` '''' ' ) each 'FName';'LName'
>
>
> FName_eq
>
>
> =&'FName'
>
>
>
> I would ideally like something like this (I think), assuming this better
> than do:
>
>
> '`FName_eq LName_eq' =:(3 :'(= y) #]` '''' ')each'FName';'LName'
>
> |length error
>
> | (=y) #]`''
>
>
> But again, I don't really understand what it's doing with the verb
> returning a strange form that somewhat appears to be a gerund
> ----------------------------------------------------------------------
> 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

Reply via email to