> … and “Wicked J”, thanks to you. > ... > (si tacuisses philosophus mansisses)
... and Latin. :) (A former colleague, well versed in Latin, once told me that thinking in Latin compels one to think more clearly. I had not realized that this phenomenon was applicable not only to some artificial languages (or dialects) but also to certain natural languages.) On Thu, Sep 16, 2021 at 4:48 AM Hauke Rehr <hauke.r...@uni-jena.de> wrote: > > … and “Wicked J”, thanks to you. > > I had written a long reply but you’re right: > sometimes it’s better not to ask questions > (si tacuisses philosophus mansisses) > > Hauke > > > > [ > still I can’t help but write a comment: > > Let’s hope for both English and J not to share > the fate of German being “simplified” by crimes > such as the German “spelling reform” driving us > into an Orwellian society (yes, an exaggeration, > but not as much of one as you might think). > ] > > > > Am 16.09.21 um 00:03 schrieb Jose Mario Quintana: > > Neat! There are always opportunities to learn J (and English) in this > > forum. > > > > Thanks > > > > > > On Wed, Sep 15, 2021 at 5:40 PM Raul Miller <rauldmil...@gmail.com> wrote: > > > >> Belatedly, I realized that I could have shortened that to: > >> > >> mne=: {{)a > >> ".@(('{:]`',[,'=:',],'&{::'"_)&":&>i.@#);:'()'-.~5!:5 <'u' > >> }} > >> > >> Thanks, > >> > >> -- > >> Raul > >> > >> On Wed, Sep 15, 2021 at 5:38 PM Raul Miller <rauldmil...@gmail.com> wrote: > >>> > >>> I am not sure how you got your gerunds to display the linear rep of > >>> the verb. For me, the gerund display always shows the atomic rep of > >>> verbs. Is this a personal mod to your version of J? > >>> > >>> But, anyways, here's an explicit version of mne which returns the > >>> corresponding gerund: > >>> > >>> mne=: {{)a > >>> ,".@(('}.]`',[,'=:',],'&{::'"_)&":&>i.@#);:'()'-.~5!:5 <'u' > >>> }} > >>> > >>> Thanks, > >>> > >>> -- > >>> Raul > >>> > >>> On Wed, Sep 15, 2021 at 5:27 PM Jose Mario Quintana > >>> <jose.mario.quint...@gmail.com> wrote: > >>>> > >>>>> You might prefer your definitions to be > >>>>> > >>>>> 1&{::@] > >>>>> > >>>>> > >>>>> This allows intuitive dyadic use case for y, and allows B~ to access > >> x > >>>> argument fields. > >>>> > >>>> I seldom have to refer precisely to the left or right arguments when > >> using > >>>> pointer proverbs because I use them typically just to sequentially > >> update a > >>>> state when writing complex tacit verbs. However, sporadically I have > >> done > >>>> that and I just redefine the suitable pointer proverbs as I go using > >> the > >>>> result of mne (see my comment to Raul's post). For example, since > >>>> > >>>> (Y V N)mne > >>>> ┌───────┬───────┬───────┐ > >>>> │0&({::)│1&({::)│2&({::)│ > >>>> └───────┴───────┴───────┘ > >>>> > >>>> I can write, > >>>> > >>>> (Y`V`N)=. (Y V N)mne at&.> ]<adv > >>>> > >>>> Y > >>>> 0&({::)@:] > >>>> V > >>>> 1&({::)@:] > >>>> N > >>>> 2&({::)@:] > >>>> > >>>> Similarly, > >>>> > >>>> (X`U`M)=. (X U M)mne at&.> [<adv > >>>> > >>>> X > >>>> 0&({::)@:[ > >>>> M > >>>> 2&({::)@:[ > >>>> > >>>> (The functionality of adv and at is the same as those in the j807 Tacit > >>>> Toolkit; namely, <adv boxes its argument, even if it is a verb, and at > >> is > >>>> @: verbed) > >>>> > >>>> Something equivalent could be done legally if mne returns the > >> corresponding > >>>> gerund. Perhaps Raul, you, or someone else can show us how this can be > >>>> accomplished. (A long long time ago it would have been very very easy > >>>> (sometimes it is better not to ask questions ;) > >>>> > >>>> [Jprogramming] @'' (jsoftware.com) > >>>> < > >> http://www.jsoftware.com/pipermail/programming/2006-October/003568.html > > >>>> > >>>> nevertheless, Dan's DOOG [0], > >>>> > >>>> User:Dan Bron/Snippets/DOOG - J Wiki (jsoftware.com) > >>>> <https://code.jsoftware.com/wiki/User:Dan_Bron/Snippets/DOOG> > >>>> > >>>> or similar could become handy) > >>>> > >>>> > >>>> On Wed, Sep 15, 2021 at 8:25 AM 'Pascal Jasmin' via Programming < > >>>> programm...@jsoftware.com> wrote: > >>>>> > >>>>>> Perhaps one should consider that, rightly or otherwise, 0. > >> currently > >>>> has a > >>>>> meaning according to the interpreters (e.g., j902), > >>>>> > >>>>> Not that long ago, it used to give an error. Never noticed the > >> change. > >>>>> > >>>>> A problem that comes up enough to be annoying when defining 3.. or > >> other > >>>> . : inflections to numbers is that > >>>>> > >>>>> ;: '3.. 2' > >>>>> > >>>>> ┌─────┐ > >>>>> > >>>>> │3.. 2│ > >>>>> > >>>>> └─────┘ > >>>>> > >>>>> subsequent numbers is the same word. > >>>>> > >>>>> Avoiding this problem, is a pretty easy change to ;: parser, and > >> costs > >>>> "nothing" when 3. is a J error, but when 3. was previously valid code, > >> can > >>>> create new problems. Still worth the change for me (as a dsl) though. > >>>>> > >>>>> > >>>>> You might prefer your definitions to be > >>>>> > >>>>> 1&{::@] > >>>>> > >>>>> > >>>>> This allows intuitive dyadic use case for y, and allows B~ to access > >> x > >>>> argument fields. > >>>>> > >>>>> > >>>>> > >>>>> On Tuesday, September 14, 2021, 07:31:21 p.m. EDT, Jose Mario > >> Quintana < > >>>> jose.mario.quint...@gmail.com> wrote: > >>>>> > >>>>> > >>>>> > >>>>> > >>>>> > >>>>>> 0. to 9. and/or _9. would make good additions to language. > >>>>> > >>>>> Perhaps one should consider that, rightly or otherwise, 0. currently > >> has a > >>>>> meaning according to the interpreters (e.g., j902), > >>>>> > >>>>> 0. > >>>>> 0 > >>>>> > >>>>> > >>>>> Often I use an adverb (mne) to define undefined names, or redefine > >>>> existing > >>>>> proverbs, as pointers to fetch a corresponding content of a box > >> within a > >>>>> state consisting of a list of boxes. For example, > >>>>> > >>>>> (A B C D)mne > >>>>> > >>>>> would, as a side effect, define A as 0&({::), ... D as 3&({::). > >> Thus, > >>>>> > >>>>> C > >>>>> 2&({::) > >>>>> > >>>>> Another adverb (f) allows one to use the proverbs to get multiple > >> boxes > >>>>> from the state, > >>>>> > >>>>> (B C)f > >>>>> 1 2&{ > >>>>> > >>>>> and a conjunction (h) allows one to amend the contents of the state > >> in > >>>>> terms of the proverbs, > >>>>> > >>>>> (A B) h ((B C)f) > >>>>> 1 2&{ 0 1} ] > >>>>> > >>>>> or > >>>>> > >>>>> C h (B +/ .* D) > >>>>> <@:(B +/ .* D) 2} ] > >>>>> > >>>>> The following illustrates their use, > >>>>> > >>>>> ( S=. 0 ; 1 2 ; '...' ; 1j1*(i.2 3) ) > >>>>> ┌─┬───┬───┬───────────┐ > >>>>> │0│1 2│...│ 0 1j1 2j2│ > >>>>> │ │ │ │3j3 4j4 5j5│ > >>>>> └─┴───┴───┴───────────┘ > >>>>> > >>>>> C S > >>>>> ... > >>>>> > >>>>> (B C)f S > >>>>> ┌───┬───┐ > >>>>> │1 2│...│ > >>>>> └───┴───┘ > >>>>> > >>>>> (A B) h ((B C)f) S > >>>>> ┌───┬───┬───┬───────────┐ > >>>>> │1 2│...│...│ 0 1j1 2j2│ > >>>>> │ │ │ │3j3 4j4 5j5│ > >>>>> └───┴───┴───┴───────────┘ > >>>>> C h (B +/ .* D) S > >>>>> ┌─┬───┬─────────────┬───────────┐ > >>>>> │0│1 2│6j6 9j9 12j12│ 0 1j1 2j2│ > >>>>> │ │ │ │3j3 4j4 5j5│ > >>>>> └─┴───┴─────────────┴───────────┘ > >>>>> > >>>>> I define tacitly mne, f, and h (moreover, mne f and h themselves are > >> tacit > >>>>> entities) via the unorthodox methods using a fork of J which I have > >>>>> mentioned in the past. However, I cannot see any reason why mne, f, > >> and h > >>>>> could not be defined (explicitly, when necessary) using the latest > >> public > >>>>> interpreters. > >>>>> > >>>>> > >>>>> On Tue, Sep 14, 2021 at 1:18 PM 'Pascal Jasmin' via Programming < > >>>>> programm...@jsoftware.com> wrote: > >>>>>> > >>>>>> > >>>>>> in jpp project, > >>>>>> > >>>>>> I use 0. as shortcut for (0 {:: ]) and 1. as shortcut for (1 {:: ]) > >>>>>> > >>>>>> The adverb G =: 1 : 'u {:: ]' is the same. > >>>>>> > >>>>>> 0.~ or 0 G~ can be used to access fields of x argument. > >>>>>> > >>>>>> "State of something complicated" can simply be several boxed > >> fields in x > >>>>> or y argument. > >>>>>> > >>>>>> What easy accessors do is also permits "intermediate tacit > >> results" by > >>>>> prepending a calculated box to the y argument, with easy unpacking > >> later > >>>> in > >>>>> the verb. > >>>>>> > >>>>>> > >>>>>> 0. to 9. and/or _9. would make good additions to language. > >>>>>> > >>>>>> > >>>>>> > >>>>>> On Tuesday, September 14, 2021, 12:06:37 p.m. EDT, Michal Wallace < > >>>>> michal.wall...@gmail.com> wrote: > >>>>>> > >>>>>> > >>>>>> > >>>>>> > >>>>>> > >>>>>> Let me amend what I was just saying about name:: ... > >>>>>> > >>>>>> I have been experimenting with a tacit style where the y "argument" > >>>>>> represents the state of some big complicated object or system... > >> for > >>>>>> example, the state of a parser or a virtual machine. > >>>>>> > >>>>>> I've found that "accessor" verbs are really handy, and allow you to > >>>>>> decouple your tacit code from the actual implementation of the > >> object. > >>>>>> > >>>>>> An accessor 'gsn' (for "get/set 'n'") is a ambivalent verb that > >> works > >>>> like > >>>>>> this: > >>>>>> > >>>>>> gsn y -> ignore y and return S > >>>>>> x gsn y -> ignore y. sets n to x and return S > >>>>>> S here indicates whatever the "state of the whole system" is... > >>>>>> > >>>>>> 'gsn' here is a pronoun (proverb?) -- If you had three state > >> variables > >>>>>> n0,n1,n2, > >>>>>> you would make three such verbs, gsn0, gsn1, gsn2. > >>>>>> > >>>>>> This is quite flexible. If you want to store the state of your > >> system in > >>>>> an > >>>>>> object or namespace, > >>>>>> you can implement gsn like so: > >>>>>> > >>>>>> gsn0 =: {{ n0__state }} :: {{ n0__state =: x }} > >>>>>> > >>>>>> Then the y argument you pass is just '' or whatever you want, > >> since it's > >>>>>> ignored. > >>>>>> > >>>>>> Or you can choose to implement the state as some physical array > >>>> structure, > >>>>>> which gets accessed and modified in place: > >>>>>> > >>>>>> gsn1 =: {{ 1 { y }} :: {{ x 1 } y }} > >>>>>> > >>>>>> It would be nice if these accessors could be created automatically. > >>>>>> > >>>>>> For example, (if we weren't about to be using the syntax for 'self > >>>>> effacing > >>>>>> names', we might > >>>>>> use name:: to work as the accessor)... And then: > >>>>>> > >>>>>> name:: y could: > >>>>>> - invoke name__y if y is a reference > >>>>>> - extract they value for key 'name' from y if y is some kind of > >>>>> dictionary > >>>>>> - extract n { y if 'name' is defined as a constant number > >>>>>> > >>>>>> x name:: y would do the analagous things for setting the value to > >> x. > >>>>>> > >>>>>> Many object-oriented languages (python, C#, javascript) give you > >> the > >>>>>> ability to define such accessors either for specific names, *or* to > >>>> design > >>>>>> generic accessors that take the name as a parameter. > >>>>>> > >>>>>> For example, in python, you can arrange for y.x = n to do any of > >> the > >>>>>> following: > >>>>>> > >>>>>> 1. explicitly set the x attribute of object y to n (no accessor > >>>>> defined) > >>>>>> 2. call a specific y.set_x(n) method > >>>>>> 3. call a generic y.__setattr__(key='x', value=n) method > >>>>>> > >>>>>> My proposal is that x name:: y would have similar range of > >> features, > >>>>>> depending on the presence of certain handler verbs in the implicit > >>>> locale > >>>>>> (if y -: '') or on y itself. > >>>>>> > >>>>>> Likewise, 0:: 1:: _1:: etc could be recognized as 'index > >> accessors' > >>>>>> when y is an array. > >>>>>> > >>>>>> If you wanted to get really crazy, then ( index ):: could produce > >> an > >>>>>> explicit accessor function, where index is some noun that could be > >>>> passed > >>>>>> as m in m { y. > >>>>>> > >>>>>> This final form could perhaps even use the incredibly convenient > >>>> "subarray > >>>>>> notation" of x ;. 0 y , (which is an amazing "getter" but AFAICT, > >> has no > >>>>>> "setter" equivalent ) > >>>>>> https://code.jsoftware.com/wiki/Vocabulary/semidot0#dyadic > >>>>>> > >>>>>> Here is some example code (parser combinators) that uses the "y is > >> a > >>>>>> structure" concept, where the pattern makes it very handy to > >> implement > >>>>>> backtracking. > >>>>>> https://github.com/sabren/b4/blob/master/j/parseco.ijs > >>>>>> > >>>>>> Here is another example (virtual machine) using the "y is ignored" > >>>> style, > >>>>>> where the accessors get and set locale variables. > >>>>>> https://github.com/sabren/b4/blob/master/j/b4.ijs > >>>>>> > >>>>>> This one in particular uses the idea to partition the virtual > >> machine > >>>>>> instructions into two sections. > >>>>>> The "microcode" provides accessor functions that get and set > >> registers, > >>>>> and > >>>>>> then > >>>>>> the "instruction set" is defined in terms of these operations. > >>>>>> This way I can decouple the instruction set from the actual > >>>> implementation > >>>>>> of the virtual machine's internals. > >>>>>> > >>>>>> Right now it just stores registers and memory cells in separate > >>>> variables, > >>>>>> but an alternate implementation might instead store everything in > >> one > >>>> big > >>>>>> memory-mapped file, so the machine state could persist on disk or > >> be > >>>>> shared > >>>>>> between different processes, and this would only require swapping > >> out > >>>> the > >>>>>> "microcode" layer. > >>>>>> > >>>>>> Anyway, I know the syntax part of this is still a half-baked > >> proposal, > >>>> but > >>>>>> the actual idea is very usable now, and pretty fun to use. > >>>>>> > >> ---------------------------------------------------------------------- > >>>>>> 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 > >>>> ---------------------------------------------------------------------- > >>>> 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 > > > > -- > ---------------------- > mail written using NEO > neo-layout.org > > ---------------------------------------------------------------------- > For information about J forums see http://www.jsoftware.com/forums.htm ---------------------------------------------------------------------- For information about J forums see http://www.jsoftware.com/forums.htm