remembering eval

eval =: 1 : ' a: 1 :  m' 
evalassign =: 4 : ('(x) =: y eval';'1')

evalassign turns eval into a verb (so we can use rank or each on it), and 
discards the result (would be a domain error to not return a noun from a verb), 
but in the process assign what y evals to (x).

so:
cols=: 'FName';'LName';'Age';'Company'

    ( (') # ]',~ '(= ' ,]) evalassign~ '_eq' ,~ ]) each cols 
┌─┬─┬─┬─┐ 
│1│1│1│1│ 
└─┴─┴─┴─┘ 
   FName_eq 
(= FName) # ] 


it could be prettier with a templating verb (that substitutes into an x 
argument), but still not bad?


----- Original Message -----
From: Joe Bogner <joebog...@gmail.com>
To: programm...@jsoftware.com
Cc: 
Sent: Friday, April 25, 2014 9:02:46 PM
Subject: Re: [Jprogramming] J in 5 minutes

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

Reply via email to