The 'do' verb is one of a variety of tools for building and using executable J dynamically at run time. (Which can be valuable for development and testing tools.)
Other ways include: * the explicit conjunction ( : ) * gerunds * 0!:n * 128!:2 Also, worth considering, in this context, are locales (which can serve as objects, classes, stack frames, and so on) and/or indirect assignment ( (leftexpression)=: rightexpression ) and/or the debugging tools ( 13!:n ). Thanks, -- Raul On Thu, Nov 23, 2017 at 11:01 PM, Erling Hellenäs <[email protected]> wrote: > Hi all! > > Another way to do the same thing. This function reads an explicit function > definition from terminal input. > > Scan =: 3 : 0 > a=.1!:1 [1 > ". a > f/\y > ) > Scan 2 3 4 > f=.4 : 'x*y' > 2 6 24 > > I just use terminal input to demonstrate that this really happens at what we > can feel is runtime. It means you can manipulate ascii data at runtime and > produce functions which you then execute, and which can be input to other > already-defined functions. > I guess using Do(".) is the 'normal' way to do it in explicit code. > > Cheers, > Erling Hellenäs > > > > On 2017-11-23 16:25, Erling Hellenäs wrote: >> >> Hi all! >> >> >> https://en.wikipedia.org/wiki/Scope_(computer_science)#Lexical_scope_vs._dynamic_scope >> >> AddScan =: 3 : 0 >> add=.4 : 'x + y' >> add/\y >> ) >> AddScan 2 3 4 >> 2 5 9 >> >> I don't understand how your example shows lexically scoped functions, but >> as far as I understand, "add" in the example above is an explicit definition >> of a lexically scoped function. >> >> I don't think functions are first class citizens in J according to this >> definition. https://en.wikipedia.org/wiki/First-class_citizen >> >> Functions can not return functions. They can take functions as arguments, >> but resolution is normally done in some pre-interpretation stage, like with >> macros in other languages. >> >> There are ways in explicit code to establish functions from from ascii >> representation in runtime. Here is an example: >> >> Scan =: 3 : 0 >> a=.1!:1 [1 >> f=. a 5!:0 >> f/\y >> ) >> Scan 2 3 4 >> * >> 2 6 24 >> Scan 2 3 4 >> + >> 2 5 9 >> >> This function establishes a function from terminal ascii input. >> >> So, with explicit code you can manipulate ascii representations of >> functions and create new functions at what is similar to "runtime". You can >> pass these ascii representations as variables. The functions you create can >> be used as parameters to functions, as the example shows. >> >> Cheers, >> >> Erling Hellenäs >> >> Den 2017-11-21 kl. 19:56, skrev Alex Shroyer: >>> >>> @AndrewD: I've been using J casually for about 2 years, and consider >>> myself >>> an "intermediate beginner". I also use Python, and my impression is that >>> Python makes it easy to see what the author *wanted* the program to do, >>> but >>> J makes it easier to see what the program *actually does*. >>> >>> However, one frustration I still have is regarding explicit definitions. >>> IMO they should be replaced with something more like what the K language >>> provides, namely first-class, lexically-scoped functions: >>> >>> add: {x+y} >>> scan: {x\y} >>> scan [add; 2 3 4] >>> 2 5 9 >>> >>> Perhaps J's syntax could be extended someday, to recognize this type of >>> function in an explicit definition, for example: >>> >>> add =: dyad def 'x+y' >>> scan =: HOF def 'x\y' NB. in this scheme, HOF stands for >>> 'higher-order >>> function' and tells interpreter to not evaluate x or y until both >>> arguments >>> are bound >>> add scan 2 3 4 >>> 2 5 9 >>> >>> There are a few other things I'd like J to take from K, but that's the >>> big >>> one. >>> >>> On Mon, Nov 20, 2017 at 11:16 AM, chris burke <[email protected]> >>> wrote: >>> >>>> Dear All >>>> >>>> My attempt to move this thread over to programming failed, but please >>>> note >>>> for future use that discussions like this on the language are much >>>> better >>>> addressed to the programming forum. Not least, they will then reach all >>>> J >>>> forum readers, not just those subscribed to general. See http://code. >>>> jsoftware.com/wiki/System/Forums . >>>> >>>> Thanks. >>>> >>>> Chris >>>> ---------------------------------------------------------------------- >>>> 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
