User talk:Cameron Chandoke

From J Wiki
Jump to navigation Jump to search

Hi Cameron,

Thanks for helping out with the wiki. We really appreciate it. Just wondering if the "at least one of which is a modifier" is accurate? Three verbs create a fork which is a verb. Modifier is a term that refers to adverbs and conjunctions, but not verbs. Modifiers can take verbs as arguments, but verbs can only take nouns are arguments. Thoughts? https://code.jsoftware.com/wiki/Vocabulary/fork Bob Therriault (talk) 18:48, 1 October 2023 (UTC)


Sorry Cameron I should have been more clear. The issue I had with the line:

(p q [r]) makes a single new modifier (adverb or conjunction) out of the two [or three] words: p q [r], at least one of which is a modifier.

I read this to mean that one of p q [r] must be a modifier, but in the case of a verb fork, which is in the modifier table, we have the pattern (N V V) or (V V V) and there are no modifiers.

I now see that you are correct that inclusion in the table does not necessarily mean that the sequence is a modifier train, only that it can be used within one. Thank you for enlightening me. Bob Therriault (talk) 17:31, 2 October 2023 (UTC)


When you take into the information that Pascal Jasmin has included as a link to the invisible modifiers page, you can also understand why many will steer clear of them even when documented. Vocabulary/ModifierTrains By the way, I had not noticed the colour coding of that page's table and I think I like it. Thanks again for your well thought out contribution. Bob Therriault (talk) 05:09, 3 October 2023 (UTC)

My bad, I had got part way through the editing and didn't include the link in time for you to see. It is here: Vocabulary/ModifierTrains

Some subtle distinctions

You'll probably notice this on your own, when you review and test your work, but:

Currently, on Vocabulary/ModifierTrains you introduce a distinction between modifier trains and non-modifier trains, indicating that hooks and forks are the non-modifier trains. At first this seems to make sense (though, personally, I'd use the phrase "verb trains" rather than "non-modifier trains" -- "modifier" being shorthand for "adverb or conjunction").

However, further down, you start talking about hooks and forks containing adverbs and conjunctions. This has several problems, one of which is a conflict with the earlier distinction you made. Changing terminology in that earlier distinction would help here, I think.

Also, though, it's worth thinking through how a reader is going to understand the presentation here.

Let's consider this phrase as an example: "...`A0`...`A1`...`:6 resolves to ACACN" -- in that example, you do not explain the "..." parts nor why they vanish. I have an idea of what you're getting at, but I think that you should provide executed examples here.

Or, earlier, "The AC train is akin to (u v) y or generalized u~ y" -- here, a beginner (the person who needs this documentation the most) would likely be baffled by the implicit but unstated order swap.

As I see it, the basic approaches to consider here are concise reference documentation accompanied by example, or longer tutorial documentation (which would also benefit from examples). I guess J's labs fall into the tutorial category.

And that brings us back to the issue of why I think these modifier trains had been removed from the language for an extended period of time. J's initial focus was on labs -- content authored to teach both J and some other interesting topic with larger applications. We haven't found use cases where we could be teaching trains in that kind of context.

This (finding useful use cases to illustrate language concepts) is a difficult issue, and maybe we'll eventually come up with some great lab-like contexts. But, for now, ... I guess we just do the best we can; ideally with examples which are as useful as we can make them. (And, thanks for putting time and attention into this.) --Raul Miller (talk) 13:55, 7 October 2023 (UTC)


Thank you for the feedback. These are all astute issues to point out, and I agree with each one. I will be sure to address each in turn shortly. Please feel free to make suggestions in the form of edits in the meantime. The current version is just polished enough to where I wanted to put it out there so those with an interest can explore the topic. I really had not even thought about beginners yet as I was in pure “at least have it documented” mode.
Any modifiers can be used as examples since all can be written tacitly. The issue is merely that I haven’t found the need to write many adverbs/conjunctions (explicit or tacit) in the short time I’ve been using J, and thus have few practical, non-trivial examples at the ready. But I think that with a bit of time I’ll fill in the examples easily enough. And, as you say, we’ll make them better as we go along.
Some non-obvious and not particularly important ideas in my article, like why "...`A0`...`A1`...`:6 resolves to ACACN", would be better off in personal essay which is the appropriate place for detailed explanation/proof of axioms, etc. So that easily takes care of some of this.

--Cameron Chandoke (talk) 22:08, 7 October 2023 (UTC)

If I replace ... with arbitrary verbs, the verbs remain:
   +`/`-`/`*`:6
((((+ ` /) ` -) ` /) ` *) `: 6
--Raul Miller (talk) 22:40, 7 October 2023 (UTC)
I hadn’t considered how ambiguous my statement was. I didn’t mean to imply that the verbs disappear, but rather that ACACN is an intermediate result of the evaluation process, and that the resulting entity is a conjunction. (This statement wasn’t quite right though; I should’ve more generally said “resolves to a conjunction” rather than showing an intermediate step). The idea was to give some reason why it must give a conjunction but to really show this adequately would be too involved for that page. So it should instead just flatly say “it can be shown that this must give a conjunction”. Or just not mention at all that AC is needed for completeness and maybe put that in an essay.

--Cameron Chandoke (talk) 20:37, 8 October 2023 (UTC)


MT’s are just tacit modifiers after all, so their use is exactly that of modifiers in general: abstracting over u [and v]. The bigger factor in MT’s absence in the labs is that the benefit of more visually aesthetic / less syntax-oriented definitions (over {{…}} and N : 'definition') doesn’t warrant the explanation/memorization of 9 different train cases. Unless you’re both at an advanced stage of using J and highly driven by appreciation of elegance/beauty. So I agree for this reason that it wouldn’t make sense to mention MT’s in the labs.
Seperately, I suspect the biggest reason (although the former reason alone is big enough to explain it) for their removal was that almost no one understood how to use them because they likely were virtually undocumented in the first place. The Obsolete Language Features page mentions that very few ever understood MT’s before they were removed. And if little more than the sequence table existed to document them—which is almost a given considering how brief are the Dictionary treatments—then this is of no mystery.
For most of the time that I’ve been J-ing (a full year), I mistakenly thought they were only capable of constructing a small set of modifiers.

--Cameron Chandoke (talk) 22:09, 7 October 2023 (UTC)

My memory is that people were using modifier trains, but not to express ideas clearly - more in the form of presenting puzzles to be figured out.
That said, it would be interesting to recover the documentation we had back then. I'm not sure whether our current modifier trains match the previous implementation, but the presentation aspects of the documentation (not that it was printed booklets, but the organization and structure) might be useful for presenting what we have now --Raul Miller (talk) 22:33, 7 October 2023 (UTC)

Well, our wishes have been granted! Here’s a copy of the original dictionary section on trains which I found from this mailing list entry. Aaand it’s exactly as I imagined it: same as the current one, but with a minimally formatted version of the sequence table. Hahaha of course.
Here’s the corresponding page on Lev/Dex/Ident.
Reminds me of this moment from Zootopia.
Also you may be interested to look at the original parsing page as well.
This is also available through the Wayback Machine site; there one can see how all the primitives used to be displayed in columns the side. Pretty cool. --Cameron Chandoke (talk) 01:19, 17 October 2023 (UTC)

Ha, weird. Yes, I had the same thought about the original documentation. This also reminds me about requesting that we bring back the cases (11 :) and (12 :) for “translate adv/conj to tacit”—analogous to (13 :) for tacit verbs and mentioned in the j5.01 release notes—now that tacit modifiers are back. These would be a big help to curious beginners in understanding how to write them.

--Cameron Chandoke (talk) 23:11, 7 October 2023 (UTC)

The big issue with the tacit translator is maintenance. Right now, ISI doesn't have someone to maintain that part of the code base. --Raul Miller (talk) 04:09, 8 October 2023 (UTC)