I suspect that at least one of us is or was quite confused. At any rate, the challenge was and still is to produce a tacit fixed conjunction counterpart of the explicit conjunction INTEGRATE using a j903 interpreter; see,
[Jprogramming] Evaluating a Gerund Array (jsoftware.com) <http://www.jsoftware.com/pipermail/programming/2015-April/041621.html> On Sun, Jan 22, 2023 at 2:50 PM Raul Miller <rauldmil...@gmail.com> wrote: > > Well.. hmm... > > First off, I have made mistakes in previous posts. I think that the > old t. primitive has yet to receive a library implementation. That's > on my personal "things I would like to do" list. This may be relevant > here, given your reference to past discussions. I vaguely remember > making incorrect statements about lack of library support for removed > primitives.. I have not dug far enough here to know whether that's > relevant in this context or not. > > Second, though, given your work with "cloaked verbs", hearing that the > interpreter shut down isn't surprising -- that has also been my > experience when working with such things. > > But I would be surprised if manipulating regular gerunds would shut > down the interpreter. (These sorts of bugs might exist, but with a > good bug report, they would get fixed. But, ... that might close the > "cloaked verb" loophole, I guess.) > > Anyways, this worked; > > ({{(x`:6)@:(y`:6)`''}}/20#?`'')`:6(1e8) > 0 > ({{(x`:6)@:(y`:6)`''}}/20#?`'')`:6(1e8) > 1542 > ({{(x`:6)@:(y`:6)`''}}/20#?`'')`:6(1e8) > 5 > ({{(x`:6)@:(y`:6)`''}}/20#?`'')`:6(1e8) > 0.184449 > > And, I guess I could elaborate on that by building larger trains. > > For example: > > ({{(x`:6)@:(y`:6)`''}}/200#(200$[`])`:6`'')`:6] 12345 > 12345 > > Or > > ({{(x`:6)@:(y`:6)`''}}/200#(200$+`%)`:6`'')`:6] 1 > 223.787 > > This was rather slow -- which should probably be expected from that > stepwise generation of a gerund containing 40000 verbs. But it did not > shut down J. > > FYI, > > -- > Raul > > On Sun, Jan 22, 2023 at 1:21 PM Jose Mario Quintana > <jose.mario.quint...@gmail.com> wrote: > > > > I am replying inline... > > > > On Sun, Jan 15, 2023 at 6:09 PM Raul Miller <rauldmil...@gmail.com> wrote: > > > > > > On Sun, Jan 15, 2023 at 3:38 PM Jose Mario Quintana > > > <jose.mario.quint...@gmail.com> wrote: > > > > I am aware that BQN has first-class functions. Is there any other array > > > > language that also has them? > > > > > > In this context, a mozilla page on "first class functions" is interesting: > > > > > > https://developer.mozilla.org/en-US/docs/Glossary/First-class_Function > > > > > > "A programming language is said to have First-class functions when > > > functions in that language are treated like any other variable. For > > > example, in such a language, a function can be passed as an argument > > > to other functions, can be returned by another function and can be > > > assigned as a value to a variable." > > > > > > --------- > > > > > > Here, BQN uses upper case vs. lower case to distinguish the role of a > > > function definition (roughly analogous to distinguishing between a > > > gerund and its verb form). > > > > Right, I personally do not like too much that convention; in general, I use > > lowercase names for functions and uppercase names for nouns (which I seldom > > use). > > > > > > > > From a user perspective this is largely a syntactic issue (though, of > > > course, there's also implementation issues). > > > > The key word is "largely." Any gerund still is a noun; thus, gerunds are > > just representations of their associated functions. > > > > > > > > --------- > > > > > > The K/Q approach is also interesting here. (K is a family of languages > > > rather than a single language -- it's intentionally undocumented with > > > large differences between releases, and Q is (somewhat more stably) > > > > There is a fair amount of q documentation here, > > > > Reference card | kdb+ and q documentation - Kdb+ and q documentation > > (kx.com) <https://code.kx.com/q/ref/> > > > > > implemented in K.) Here, arrays are themselves "first class functions" > > > -- specifically indexing a list has the same syntax as calling a > > > function. There's no rank (all arrays are rank 1, though they may > > > > Right, since there are list of lists of ... ;so, that does seem to be a big > > issue (although one would have to write, for example, verbs for matrix > > multiplication and inverse unless a suitable library is available). > > > > > contain arrays analogous to J's boxing) and K's monadic verbs support > > > a multi-argument sort of valence analogous to APL's multi-dimensional > > > indexing A[1 2 3; 4 5 6;7 8 9] for example. And you might get into > > > different operators when applying "functions" to values (though, > > > because of the many versions, it's difficult to describe this > > > comprehensively). > > > > Lo and behold, q verbs are genuinely first-class, they can take and produce > > verbs and, apparently, is the recommended way to program functionally in q. > > The following is a toy example to illustrate the method by calculating a > > sum of squares, > > > > q){x y z}[(+/);{x xexp 2}] > > {x y z}[+/;{x xexp 2}] > > q)({x y z}[(+/);{x xexp 2}]) 1 2 3 4 / redundant parentheses for clarity > > 30f > > > > or one could use the built-in keyword ' instead of {x y z}. In j, of > > course, one can do this, > > > > +/@:*: > > +/@:*: > > (+/@:*:) 1 2 3 4 > > 30 > > > > Yet, there is a subtle potentially critical difference, the q version {x y > > z} is dynamic, but the j version @: is not because @: is a conjunction (not > > surprisingly, tacit j8xx dynamic versions are possible when black cats are > > involved). > > > > > > > > --------- > > > > > > Anyways, ... I guess one of the things which makes J's gerunds be > > > considered as "not first class" is that they have a unique syntax > > > which must be used when we consider them as verb definitions -- more > > > specifically we can't use some of this syntax with actual verb > > > definitions. (Interestingly, in some contexts, this distinction > > > vanishes. So in those contexts we might consider verbs as first class > > > while thinking of adverbs and conjunctions as not first class.) > > > > > > > Some time ago we had a similar discussion, I mentioned that, in my opinion, > > the j9xx tacit tools were relatively weak and I proposed an exercise that > > was just beyond trivial, > > > > [Jchat] Was [Jprogramming] Tacit completeness (jsoftware.com) > > <http://www.jsoftware.com/pipermail/chat/2021-December/009017.html> > > > > Unfortunately, the j903 calculus add-on was unusable for that purpose. I > > wonder if some progress has been made. > > > > Perhaps, this thread should be moved to the Chat forum although I would > > like to see some j90x code here; but, I will let others decide. > > > > > Thanks, > > > > > > -- > > > Raul > > > ---------------------------------------------------------------------- > > > 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