shanghai=.(`]) (`(;:'`@.')) (@.(0 2 1 3)) (0=L.) < shanghai 2 2 (0=L.) < shanghai <2 ┌───┐ │┌─┐│ ││2││ │└─┘│ └───┘
Shanghai=. (]`) (`(;:'`@.')) (@.(0 2 1 3)) (0=L.) < Shanghai 2 ┌─┐ │2│ └─┘ (0=L.) < Shanghai <2 ┌─┐ │2│ └─┘ :) On Mon, Oct 7, 2013 at 4:23 PM, Dan Bron <[email protected]> wrote: > Pascal asked: > > How to make this conjunction tacit > > coerce =: 2 : ']`[email protected]' > > > coerce =: ^: > > < coerce (0=L.) 2 > +-+ > |2| > +-+ > < coerce (0=L.) <2 > +-+ > |2| > +-+ > > This particular coercion is also available as a ready-made utility in the > standard library as "boxopen" and its cousin "boxxopen" (which is the same > except it leaves empty arguments unboxed). > > Note that it was trivial to write coerce tacitly because we have a > primitive conjunction that fits the bill (obviating the need for a > user-defined conjunction). In the general case, it is not possible to write > tacit conjunctions. To understand why, read through section §II.F in the > DoJ, and note that while there are rules for producing tacit verbs (e.g. > "fork" for +/ # %) and adverbs (e.g. "adverb train" for /\) there are no > rules which produce conjunctions. > > That said, it may be possible to synthesize or simulate a tacit > conjunction through a series of tacit adverbs, e.g.: > > shanghai=.(`]) (`(;:'`@.')) (@.(0 2 1 3)) > > (0=L.) < yyy > <`]@.(0 = L.) > > But these tend to be very convoluted, difficult to both write and > understand, and will commonly involve some degree of quoted code anyway, so > it is just as well (actually, better) to write them explicitly in the first > place. > > One more note: depending on your needs, you might prefer (0<L.) to (0=L.) > . The former boxes only unboxed nouns; the latter boxes unboxed nouns as > well as anything with a depth _greater_ than one (e.g. try <<2, <<<2, etc). > > -Dan > > PS: In the good old days, §II.F contained a long and rich table of > interpretations for various trains (i.e. sequences of words/word-classes) > which made it possible, among other things, to write conjunctions tacitly. > > Again, these turned out to be convoluted and difficult, and consequently > infrequently used in practice. In turn, it was decided that the cost of > supporting the trains table (i.e. scanning all the possibilities for every > single sentence of J executed) was worth less than they were worth, so the > decision was made to remove it and simplify both the language and the > interpreter. > > That happened in J5, I believe. Anyway, for those interested in > archaeology, or simply in what the language used to permit, check out the > old trains table available at [1] and reproduced below. The rows having > product="conj" were all the ways a J programmer could express conjunctions > tacitly. > > [1] Cache of J4 Dictionary §II.F: > http://www.cs.trinity.edu/About/The_Courses/cs2322/jdoc/dict/dictf.htm > > Train Product Interpretation > -------- ------- --------------------- > N0 V1 N2 noun x V1 y > V0 V1 V2 verb (x V0 y) V1 (x V2 y) > V0 V1 C2 conj V0 V1 (x C2 y) > A0 V1 V2 adv (x A0) V1 V2 > C0 V1 V2 conj (x C0 y) V1 V2 > C0 V1 C2 conj (x C0 y) V1 (x C2 y) > A0 A1 V2 conj (x A0) (y A1) V2 > A0 A1 A2 adv ((x A0) A1) A2 > C0 A1 A2 conj ((x C0 y) A1) A2 > N0 C1 N2 verb x (N0 C1 N2) y > N0 C1 V2 verb x (N0 C1 V2) y > N0 C1 A2 adv N0 C1 (x A2) > N0 C1 C2 conj N0 C1 (x C2 y) > V0 C1 N2 verb x (V0 C1 N2) y > V0 C1 V2 verb x (V0 C1 V2) y > V0 C1 A2 adv V0 C1 (x A2) > V0 C1 C2 conj V0 C1 (x C2 y) > A0 C1 N2 adv (x A0) C1 N2 > A0 C1 V2 adv (x A0) C1 V2 > A0 C1 A2 conj (x A0) C1 (y A2) > A0 C1 C2 conj (x A0) C1 (x C2 y) > C0 C1 N2 conj (x C0 y) C1 N2 > C0 C1 V2 conj (x C0 y) C1 V2 > C0 C1 A2 conj (x C0 y) C1 (y A2) > C0 C1 C2 conj (x C0 y) C1 (x C2 y) > N0 A1 verb x (N0 A1) y > N0 C1 adv N0 C1 x > V0 N1 noun V0 y > V0 V1 verb x (or y) V0 V1 y > V0 A1 verb x (V0 A1) y > V0 C1 adv V0 C1 x > A0 V1 adv (x A0) V1 > A0 A1 adv (x A0) A1 > A0 C1 adv (x A0) C1 x > C0 N1 adv x C0 N1 > C0 V1 adv x C0 V1 > C0 A1 conj (x C0 y) A1 > > > ---------------------------------------------------------------------- > For information about J forums see http://www.jsoftware.com/forums.htm > ---------------------------------------------------------------------- For information about J forums see http://www.jsoftware.com/forums.htm
