A common goal of the Jx trains and many of the Jx primitives and foreign
conjunction entities is to lift J's draconian (tacit) function-level
restrictions. Jx facilitates tacit verbs, adverbs, and conjunctions to act
on nouns, verbs, adverbs and, conjunctions and
produce nouns, verbs, adverbs and, conjunctions. That is, almost any type
entity can act on any type entity to produce any type entity.
The Jx trains are either completely new or extended implementations of
current or former trains. The Jx trains conform to the general scheme of
the Parse Table shown on page 2 of the Cheatsheet and the only difference
vs the current J Parse Table is the Trident parsing entry.
This extra entry might have a potential negative effect in Jx's performance
vs J; after all, that was one of the reasons given for dropping the Trains
of the Golden Age (for reference I am including, at the end of this post, a
text version which most likely matches the one in the link that Bill
provided earlier). How important is the performance penalty? I would be
surprised if it is significant; one could try to quantify it although the
usual caveats would apply (e.g., repeat the experiments several times to
confirm results).
First, a few useful definitions follow to facilitate the discussion,
o=. @:
'adv conj ver'=. _1 _2 _3 <@?: 0
fix=. f. ver NB. (a v) form
a v <-> v(a)
This form is non-compliant; thus, it is intrinsic only to Jx. One can use
this form, for instance, to produce easily arrays with single or multiple
boxed adverb arguments and verbs (or adverbs or conjunctions) can act on
the array. For example, a single boxed adverb,
/<
┌─┐
│/│
└─┘
and multiple boxed adverbs,
[:(/\<) (items < o fix o ":) (table < o fix o ":)]:
┌──┬───┬──────────────────────────────────────────────────────────────┐
│/\│"_1│1 : (':'; '(((#~LF-.@e.])5!:5<''u'');,.y),.({.;}.)":x,y u/x')~│
└──┴───┴──────────────────────────────────────────────────────────────┘
This form also helps to avoid quoting adverbs. Apart from aesthetical
effects (my aesthetics anyway), it allows the verb xi, which I have
mentioned before, to refer directly to an adverb (or adverbs) within a
sentence.
x (a a) <-> (x a) a
This form corresponds to the entry
A0 A1 adv (x A0) A1
of the Parse Table of the Golden Age. To my knowledge, it has not been
fully implemented before. Currently, J only works if the product of (x a)
is a noun or a verb (there have been discussions about producing the train
if the product of (x a) is an adverb. Jx implements that and also the case
when the product of (x a) is a conjunction. This is very useful when
writing tacit adverbs as a train of adverbs: if ((x a) a) produces the
desired product then the adverb (a a) would work because (x (a a) <-> (x a)
a). For example,
'items' ((~ver) adv) /
items/
'items' (((~ver) adv) /)
items/
'items' ('x~' (adverb :)) /
items/
'items' (('x~' (adverb :)) \)
items\
The last line produces instead a syntax error in J.
a c <-> (c)a
This form is non-compliant; thus, it is also intrinsic only to Jx. Its
motivation parallels the one for the form (a v <-> v(a)). For example, a
single boxed conjunction,
<adv (`/)
┌───┐
│` /│
└───┘
and multiple boxed conjunctions,
[:(<adv") (< o fix o ": adv bind)]:
┌─┬─────────────┐
│"│2 : 'x@(y"_)'│
└─┴─────────────┘
The Jx extensions of the corresponding Golden age entries,
x (c a) y <-> x c y a : C0 A1 conj (x C0 y) A1
x (a c a) y <-> (x a) c (y a) : A0 C1 A2 conj (x A0) C1 (y A2)
deserve, in my opinion, a separate thread. I will try to start one during
the weekend (time permitting). Succinctly, the two trains (the first one,
in particular) are powerful enough that if they were restored in official J
interpreters then conjunctional tacit programming would be virtually
complete as opposed to impossible.
I hope it helps,
PS. I wish I had more time to read and respond to posts more frequently;
however, most of the time, I eventually respond if I feel I can still
contribute. Thank you for your patience.
Train Table of the Golden Age
(see,
http://www.jsoftware.com/pipermail/programming/2009-December/017146.html
and http://www.jsoftware.com/pipermail/programming/2009-December/017145.html
)
The following tables define all possible tridents and bidents, using
italics to denote the optional left arguments of (ambivalent) verbs:
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
On Thu, Oct 12, 2017 at 3:51 AM, Erling Hellenäs <[email protected]>
wrote:
> Hi all !
>
> I have a hard time finding the new rules among these old rules.
>
> While in the Jx description x and y denotes verbs, in Ken Iversons
> description they denote nouns?
>
> Take the bident a0 v1. According to Ken Iverson it should be parsed as (x
> a0) v1, while in Jx, using the same notation, it is parsed as (v1 a0) y ?
>
> Does Jx represent a new way of thinking about how these trains should be
> parsed, which Ken Iverson did not have?
>
> Cheers,
>
> Erling Hellenäs
>
>
>
> Den 2017-10-12 kl. 04:09, skrev bill lam:
>
>> As mentioned earlier, ancient J had a more complete set of
>> rules for tridents and bidents. This is what availbale in
>> J circa 1994 (23 years ago)
>>
>> https://i.imgur.com/OtBZZq1.jpg
>>
>> In the good old days, adverbs and conjunctions can be
>> written without explicit definitions, albeit only very
>> few can manage to do that.
>>
>> Ср, 11 окт 2017, Erling Hellenäs написал(а):
>>
>>> Hi all!
>>>
>>> I finally managed to understand Cloak. I then with interest studied these
>>> new syntax rules:
>>>
>>> av ↔ v(a)
>>> x(a a) ↔ (x a) a
>>> ac ↔ (c)a
>>> x(c a) y ↔ x c y a
>>> x(a c a) y ↔ (x a) c (y a)
>>>
>>> It all seemed logical and nice. I just wonder about the thoughts behind.
>>> What is the logic behind these rules?
>>>
>>> I also wonder if there are any negative effects of having these rules.
>>>
>>> Cheers,
>>>
>>> Erling Hellenäs
>>>
>>>
>>>
>>> On 2017-09-30 23:27, Jose Mario Quintana wrote:
>>>
>>>> Jx 1.1 Release
>>>>
>>>> A Jx v1.1 Extensions Guide, a J/Jx Cheatsheet, a Jx Assertions script
>>>> together with links to a Windows 64 bit dll, a Unix 64 bit so binaries
>>>> (without avx support) and the patch corresponding to the J806 source
>>>> (beta-6) can be found at the link [0].
>>>>
>>>> Summary
>>>>
>>>> - Primitives
>>>> Added =.. =:: $:: [. ]. ]: ".. `. &:.(*) ?:(*) i.. O.
>>>> Extended ~ $.
>>>> Modified " (*)
>>>>
>>>> - Foreign
>>>> Added 104!:5 Unnamed Execution 102!:0/1 In-place
>>>> Amend/Append (*)
>>>>
>>>> - Trains
>>>> a v Added
>>>> a a Extended
>>>> c a Resurrected and extended (*)
>>>> a c a Resurrected and extended (*)
>>>>
>>>> - Spelling
>>>> Names with Unicode characters
>>>>
>>>> (*) New Jx 1.1 feature
>>>>
>>>> This release introduces a modified primitive (") and, in theory, for the
>>>> first time an incompatibility vs the official J counterpart (J806
>>>> beta-6) ;
>>>> however, in practice, it is highly unlikely to break any existent code
>>>> and
>>>> doubters have an opportunity to test their code.
>>>>
>>>> This is a simple 1-decade-old example [1],
>>>>
>>>> ]`|."1 i.5 6
>>>> 0 1 2 3 4 5
>>>> 11 10 9 8 7 6
>>>> 12 13 14 15 16 17
>>>> 23 22 21 20 19 18
>>>> 24 25 26 27 28 29
>>>>
>>>> See also the threads [2, 3] for recent discussions.
>>>>
>>>> The rank of the verb ?: has been changed to 0 0 0 to make it easier to
>>>> use.
>>>>
>>>> Three venerable facilities are released:
>>>>
>>>> - The conjunction (&:.), for the motivation, see the post [4] (see also
>>>> the
>>>> post [5] both, its reference and the embedded discussion for similar
>>>> more
>>>> recent ideas).
>>>>
>>>> - 102!:0/1 In-place Amend/Append, be very careful (see [6]); if you do
>>>> not
>>>> know what to expect, play with their corresponding models instead.
>>>>
>>>> PS. There are a couple of other goodies which will be documented later.
>>>>
>>>>
>>>> References
>>>>
>>>> [0] Jx 1.1 Release
>>>> http://www.2bestsystems.com/foundation/j/jx1.1
>>>>
>>>> [1] [Jprogramming] zig-zag order Oleg Kobchenko
>>>> http://www.jsoftware.com/pipermail/programming/2006-November
>>>> /004188.htm
>>>>
>>>> [2] [Jprogramming] How m"n shoulda been defined Henry Rich
>>>> http://www.jsoftware.com/pipermail/programming/2015-August/0
>>>> 42512.html
>>>>
>>>> [3] [Jprogramming] Jx version 1.0 release Henry Rich
>>>> http://www.jsoftware.com/pipermail/programming/2017-August/0
>>>> 48124.html
>>>>
>>>> [4] [Jforum] Wasted intermediate values Jose Mario Quintana
>>>> http://www.jsoftware.com/pipermail/general/2003-March/014488.html
>>>>
>>>> [5] [Jprogramming] Fold/reduce with initial value? R.E. Boss
>>>> http://www.jsoftware.com/pipermail/programming/2015-February
>>>> /041015.html
>>>>
>>>> [6] [Jprogramming] Tacit J and indexed replacement Jose Mario Quintana
>>>> http://www.jsoftware.com/pipermail/programming/2014-July/038
>>>> 515.html
>>>> ----------------------------------------------------------------------
>>>> 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