Note that verbs, adverbs and conjunctions are all functions. This includes both the primitive, derived tacit and explicit variants. Also, gerunds represent functions.
That said, the definition of a first class citizen at https://en.wikipedia.org/wiki/First-class_citizen seems hostile to some concepts of pure functional languages. In particular, the requirement that first class citizens be "modifiable". So I'd be a bit hesitant to rely on that conception. Thanks, -- Raul On Thu, Nov 23, 2017 at 10:25 AM, Erling Hellenäs <[email protected]> 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
