Here's an excellent writeup that I think is relevant in the context of readability:
http://prog21.dadgum.com/87.html -- Raul On Tue, Jul 15, 2014 at 6:56 AM, Erling Hellenäs <[email protected]> wrote: > Can you explain that with arguments that we can discuss? /Erling > > > On 2014-07-15 05:12, Devon McCormick wrote: > >> No, if you want to code in Java, do that. Otherwise, no. >> >> >> On Mon, Jul 14, 2014 at 4:48 PM, Erling Hellenäs < >> [email protected]> >> wrote: >> >> Like this? >>> >>> BetweenConsecutiveAM=: 1 : '[: u/ }. ,: }:' >>> nonBlankM=:' ' ~: ] >>> nonBlankOrFirstInBlankGroupM=:$ {. 1 , [: +.BetweenConsecutiveAM >>> nonBlankM >>> DropLeadingBlankM=: (' ' = {.) }. ] >>> DropTrailingBlankM=: (_1 * ' ' = {:) }. ] >>> DropRedundantBlanksM=: [: DropLeadingBlankM [: DropTrailingBlankM >>> nonBlankOrFirstInBlankGroupM # ] >>> >>> a=:' ert t yyy yy ' >>> DropRedundantBlanksM a >>> >>> ert t yyy yy >>> >>> >>> /Erling >>> >>> On 2014-07-14 22:09, Erling Hellenäs wrote: >>> >>> Typo. Excuse me. Like this. >>>> debm=:[: ((' ' = {.) }. ]) ([: (] +. $ {. ([: >bc ]), 0:) (' ' ~: ])) >>>> # ] >>>> /Erling >>>> >>>> On 2014-07-14 21:10, Erling Hellenäs wrote: >>>> >>>> Another version without & och @. Now even without f~. Skipping leading >>>>> and trailing blanks. >>>>> >>>>> >>>>> bc=: 1 : '[: u/ }. ,: }:' >>>>> >>>>> debm=:[: ((' ' = {.) }. ]) ([: (] +. $ {. ([: >.bc ]), 0:) (' ' ~: ])) >>>>> # >>>>> ] >>>>> >>>>> debm a >>>>> >>>>> ert t yyy yy >>>>> >>>>> >>>>> /Erling >>>>> >>>>> On 2014-07-14 18:52, Ian Clark wrote: >>>>> >>>>> Thanks @Raul. As you discreetly point out, I was wrong to suggest r0 >>>>>> and s0 >>>>>> could be eliminated by simply replacing left rotate |. by left shift >>>>>> |.!.0 >>>>>> The resulting verb: >>>>>> >>>>>> debXA=: monad define >>>>>> ]Notspace=. (' ') ~: y >>>>>> ]LeftshiftedNotspace=. 1 |.!.0 Notspace >>>>>> or=. +. >>>>>> ]Keep=. Notspace or LeftshiftedNotspace >>>>>> ]Keep # y >>>>>> ) >>>>>> >>>>>> cannot remove a (residual) leading space. >>>>>> >>>>>> So LeftshiftedNotspace is strictly speaking misnamed. >>>>>> >>>>>> >>>>>> On Mon, Jul 14, 2014 at 5:29 PM, Raul Miller <[email protected]> >>>>>> wrote: >>>>>> >>>>>> I'd probably call s0 "Firstchar" (its actually the first non-blank >>>>>> >>>>>>> character but you have to allow a certain amount of ambiguity in >>>>>>> naming >>>>>>> conventions). >>>>>>> >>>>>>> I'd also probably call r0 "RelevantShadow" (since it's what's going >>>>>>> to >>>>>>> be >>>>>>> rotated left to catch the non-extraneous spaces). >>>>>>> >>>>>>> Thanks, >>>>>>> >>>>>>> -- >>>>>>> Raul >>>>>>> >>>>>>> >>>>>>> >>>>>>> >>>>>>> >>>>>>> On Mon, Jul 14, 2014 at 12:25 PM, Ian Clark <[email protected]> >>>>>>> wrote: >>>>>>> >>>>>>> Thanks Linda. Yes, there is a better explicit version than: >>>>>>> >>>>>>>> f=: 13 :'(#~[:(+. 1 |. (> </\)) '' ''~:])y' >>>>>>>> >>>>>>>> Addon: tte makes heavy weather of deb, but handles deb2 a lot >>>>>>>> better, >>>>>>>> now >>>>>>>> that you've replaced @ by a capped fork, since it breaks down the >>>>>>>> tacit >>>>>>>> phrase into intermediate pronouns only, avoiding intermediate >>>>>>>> proverbs. >>>>>>>> These work-pronouns can then be renamed meaningfully. >>>>>>>> >>>>>>>> Here's my "explication" (=deconstruction?) of your deb2 ... >>>>>>>> >>>>>>>> require 'debug/tte' >>>>>>>> deb2 tte >>>>>>>> 3 : 0 >>>>>>>> NB. (deb2): #~ ([: (+. (1 |. (> </\))) ' ' ~: ]) >>>>>>>> ] t0=: (' ') ~: y NB. fork: ' ' ~: ] >>>>>>>> ] s0=: </\ t0 NB. main: h-: ,'\' >>>>>>>> ] r0=: t0 > s0 NB. hook: > </\ >>>>>>>> ] q0=: 1 |. r0 NB. fork: 1 |. (> ((</)\)) >>>>>>>> ] p0=: t0 +. q0 NB. hook: +. (1 |. (> </\)) >>>>>>>> NB. atco: (+. (1 |. (> </\)))@:(' ' ~: ]) >>>>>>>> ] z0=: p0 # y NB. swap: #~ >>>>>>>> NB. hook: #~ ([: (+. (1 |. (> </\))) ' ' ~: ]) >>>>>>>> : >>>>>>>> NB. (dyad irrelevant, so I have omitted it here) >>>>>>>> ) >>>>>>>> >>>>>>>> Now all I have to do is set up a test value of y and re-execute >>>>>>>> lines >>>>>>>> one-by-one ... >>>>>>>> >>>>>>>> y=: ' able baker ' >>>>>>>> ] t0=: (' ') ~: y NB. Notspace >>>>>>>> 0 1 1 1 1 0 0 0 1 1 1 1 1 0 0 >>>>>>>> ] s0=: </\ t0 >>>>>>>> 0 1 0 0 0 0 0 0 0 0 0 0 0 0 0 >>>>>>>> ] r0=: t0 > s0 >>>>>>>> 0 0 1 1 1 0 0 0 1 1 1 1 1 0 0 >>>>>>>> ] q0=: 1 |. r0 NB. LeftshiftedNotspace >>>>>>>> 0 1 1 1 0 0 0 1 1 1 1 1 0 0 0 >>>>>>>> ] p0=: t0 +. q0 NB. Notspace or LeftshiftedNotspace >>>>>>>> 0 1 1 1 1 0 0 1 1 1 1 1 1 0 0 >>>>>>>> ] z0=: p0 # y NB. KeepOnes >>>>>>>> able baker >>>>>>>> >>>>>>>> I've replaced the comments with suggested names on the basis of what >>>>>>>> each >>>>>>>> line appears to do. I haven't bothered with names for s0 and r0 >>>>>>>> because >>>>>>>> >>>>>>>> the >>>>>>> >>>>>>> 3 lines concerned seem to be an elaborate way of turning rotate-left >>>>>>>> into >>>>>>>> shift-left, which could have been done using (!.) as shown in >>>>>>>> http://www.jsoftware.com/jwiki/Vocabulary/bardot#monadicfit >>>>>>>> >>>>>>>> This lets me rewrite (deb2 tte) as follows: >>>>>>>> >>>>>>>> debX=: monad define >>>>>>>> Notspace=. (' ') ~: y >>>>>>>> s0=. </\ Notspace >>>>>>>> r0=. Notspace > s0 >>>>>>>> LeftshiftedNotspace=. 1 |. r0 >>>>>>>> or=. +. >>>>>>>> Keep=. Notspace or LeftshiftedNotspace >>>>>>>> Keep # y >>>>>>>> ) >>>>>>>> >>>>>>>> ... which is more in the spirit of >>>>>>>> http://www.jsoftware.com/jwiki/Vocabulary/Unreadability . >>>>>>>> >>>>>>>> As you see, the above is a largely automatic procedure well within >>>>>>>> the >>>>>>>> capability of a typical beginner. >>>>>>>> >>>>>>>> IanClark >>>>>>>> >>>>>>>> >>>>>>>> >>>>>>>> On Mon, Jul 14, 2014 at 7:18 AM, Linda Alvord < >>>>>>>> [email protected]> >>>>>>>> wrote: >>>>>>>> >>>>>>>> Here's deb without @ and & >>>>>>>> >>>>>>>>> deb >>>>>>>>> #~ (+. (1: |. (> </\)))@(' '&~:) >>>>>>>>> deb2 >>>>>>>>> #~ ([: (+. (1 |. (> </\))) ' ' ~: ]) >>>>>>>>> >>>>>>>>> However it seems as though there should be a better explicit >>>>>>>>> version >>>>>>>>> >>>>>>>>> than: >>>>>>>> >>>>>>>> f=: 13 :'(#~[:(+. 1 |. (> </\)) '' ''~:])y' >>>>>>>>> >>>>>>>>> Linda >>>>>>>>> >>>>>>>>> >>>>>>>>> -----Original Message----- >>>>>>>>> From: [email protected] [mailto: >>>>>>>>> [email protected]] On Behalf Of Linda >>>>>>>>> Alvord >>>>>>>>> Sent: Sunday, July 13, 2014 11:43 PM >>>>>>>>> To: [email protected] >>>>>>>>> Subject: Re: [Jprogramming] Design goals readability and >>>>>>>>> writeability? >>>>>>>>> >>>>>>>>> I enjoyed your article: >>>>>>>>> >>>>>>>>> <"1 toupper"0>"0;:'alpha beta gamma' >>>>>>>>> ┌─────┬─────┬─────┐ >>>>>>>>> │ALPHA│BETA │GAMMA│ >>>>>>>>> └─────┴─────┴─────┘ >>>>>>>>> >>>>>>>>> Linda >>>>>>>>> >>>>>>>>> -----Original Message----- >>>>>>>>> From: [email protected] [mailto: >>>>>>>>> [email protected]] On Behalf Of Ian Clark >>>>>>>>> Sent: Sunday, July 13, 2014 9:40 PM >>>>>>>>> To: [email protected] >>>>>>>>> Subject: Re: [Jprogramming] Design goals readability and >>>>>>>>> writeability? >>>>>>>>> >>>>>>>>> "The alleged unreadability of J - and what to do about it" >>>>>>>>> http://www.jsoftware.com/jwiki/Vocabulary/Unreadability >>>>>>>>> >>>>>>>>> >>>>>>>>> On Sun, Jul 13, 2014 at 11:43 PM, Don Kelly <[email protected]> wrote: >>>>>>>>> >>>>>>>>> Absolutely!! >>>>>>>>> >>>>>>>>>> J suffers from the same problem as its precurser APL- in spades.. >>>>>>>>>> One >>>>>>>>>> >>>>>>>>>> can >>>>>>>>> write very terse code because of its power. Often, 6 moths later >>>>>>>>> the >>>>>>>>> >>>>>>>>>> original writer has to spend time interpreting what was written. I >>>>>>>>>> >>>>>>>>>> have >>>>>>>>> >>>>>>>> come up with some terse code and , more often terse code from >>>>>>>> others- >>>>>>>> >>>>>>>>> all >>>>>>>>> of which has been put in a utility script wrapped in comments so >>>>>>>>> that >>>>>>>>> >>>>>>>> when >>>>>>>> >>>>>>>>> I want to use it-I do have such guidance. This is something one has >>>>>>>>>> >>>>>>>>>> to >>>>>>>>> >>>>>>>> do >>>>>>>> >>>>>>>> to a great extent with any programming language. It is even more >>>>>>>>> important >>>>>>>>> >>>>>>>>> with J tacit. >>>>>>>>>> >>>>>>>>>> Don Kelly >>>>>>>>>> >>>>>>>>>> >>>>>>>>>> On 12/07/2014 11:44 AM, Don Guinn wrote: >>>>>>>>>> >>>>>>>>>> Readability depends on a person's background. I can't read >>>>>>>>>> Chinese. >>>>>>>>>> Does >>>>>>>>>> >>>>>>>>> that mean it's not a readable language? >>>>>>>>> >>>>>>>>>> When writing a program or a document one must assume some level of >>>>>>>>>>> knowledge of the reader. J tends to assume readers have a greater >>>>>>>>>>> knowledge >>>>>>>>>>> of mathematics than most other programming languages require. >>>>>>>>>>> >>>>>>>>>>> But readability is a real problem. What is usually missing from >>>>>>>>>>> many >>>>>>>>>>> programs, especially J tacit, is the intent of something. Say I >>>>>>>>>>> see >>>>>>>>>>> something like this: >>>>>>>>>>> >>>>>>>>>>> < @ (({. + i.@{:)@[ { ] ) >>>>>>>>>>> >>>>>>>>>>> It would certainly help to have some idea what this is supposed >>>>>>>>>>> to >>>>>>>>>>> >>>>>>>>>>> do. >>>>>>>>>> >>>>>>>>> What >>>>>>>> >>>>>>>>> its arguments are and what it returns. Documentation really helps. >>>>>>>>>>> >>>>>>>>>>> But J expressions can be intimidating. It has always bothered me >>>>>>>>>>> >>>>>>>>>>> that >>>>>>>>>> >>>>>>>>> I >>>>>>>> >>>>>>>> could attack a FORTRAN program spanning several pages comfortably. >>>>>>>>> >>>>>>>>>> But >>>>>>>>>> >>>>>>>>> a J >>>>>>>> >>>>>>>>> program of just a few lines which do exactly the same thing is hard >>>>>>>>>> for >>>>>>>>>> >>>>>>>>> me >>>>>>>>> >>>>>>>>> to get into. >>>>>>>>>> >>>>>>>>>>> >>>>>>>>>>> On Sat, Jul 12, 2014 at 12:23 PM, Erling Hellenäs < >>>>>>>>>>> [email protected]> >>>>>>>>>>> wrote: >>>>>>>>>>> >>>>>>>>>>> Hi all ! >>>>>>>>>>> >>>>>>>>>>> Yes, maybe we should all be concerned about writing readable >>>>>>>>>>>> code >>>>>>>>>>>> >>>>>>>>>>>> instead >>>>>>>>>>> >>>>>>>>>> of the shortest and most cryptic code? Maybe we should also write >>>>>>>>>> >>>>>>>>>>> writeable >>>>>>>>>>>> code? Find a way to write that allows us to get the expressions >>>>>>>>>>>> >>>>>>>>>>>> right >>>>>>>>>>> >>>>>>>>>> the >>>>>>>> >>>>>>>>> first time? >>>>>>>>>> >>>>>>>>>>> J is more of a notation than a language? The value of a notation >>>>>>>>>>>> is >>>>>>>>>>>> determined by clarity, but also readability? Maybe readability >>>>>>>>>>>> and >>>>>>>>>>>> writeability, in the sense I explained above, should get higher >>>>>>>>>>>> >>>>>>>>>>>> priority >>>>>>>>>>> >>>>>>>>>> as >>>>>>>>>> >>>>>>>>>>> design goals for our future J? >>>>>>>>>>>> >>>>>>>>>>>> Cheers, >>>>>>>>>>>> >>>>>>>>>>>> Erling Hellenäs >>>>>>>>>>>> >>>>>>>>>>>> >>>>>>>>>>>> >>>>>>>>>>>> On 2014-07-12 07:40, Raul Miller wrote: >>>>>>>>>>>> >>>>>>>>>>>> I would not generalize to higher rank arrays without a model >>>>>>>>>>>> of >>>>>>>>>>>> >>>>>>>>>>>> why >>>>>>>>>>> >>>>>>>>>> I'd >>>>>>>> >>>>>>>>> be >>>>>>>>>> >>>>>>>>>>> using them. >>>>>>>>>>>>> >>>>>>>>>>>>> In other words, v=: {"_1 |:~&0 2 is probably good enough. >>>>>>>>>>>>> >>>>>>>>>>>>> There are some interesting contradictions here - while one >>>>>>>>>>>>> needs >>>>>>>>>>>>> >>>>>>>>>>>>> to >>>>>>>>>>>> >>>>>>>>>>> be >>>>>>>> >>>>>>>> comfortable thinking mathematically to get decent performance out >>>>>>>>> >>>>>>>>>> of a >>>>>>>>>>>> >>>>>>>>>>> system, usually what we are building is a mix of instant and >>>>>>>>> >>>>>>>>>> delayed >>>>>>>>>>>> >>>>>>>>>>> gratification and we usually assume our audience has no direct >>>>>>>> >>>>>>>>> interest >>>>>>>>>>>> >>>>>>>>>>> in >>>>>>>>>> >>>>>>>>>>> the math we are performing (indirect interest, yes - sometimes). >>>>>>>>>>>>> >>>>>>>>>>>>> Often I think we go overboard, and we should throw back in some >>>>>>>>>>>>> >>>>>>>>>>>>> exposure >>>>>>>>>>>> >>>>>>>>>>> to >>>>>>>>>> >>>>>>>>>>> some of the more robust concepts (especially for the kids, so >>>>>>>>>>>>> they >>>>>>>>>>>>> >>>>>>>>>>>>> have >>>>>>>>>>>> >>>>>>>>>>> something interesting to play with). But professional adults >>>>>>>>>> tend >>>>>>>>>> >>>>>>>>>>> to >>>>>>>>>>>> >>>>>>>>>>> be >>>>>>>> >>>>>>>>> under a lot of time pressure, and as a result their needs often >>>>>>>>>> >>>>>>>>>>> seem >>>>>>>>>>>> >>>>>>>>>>> to >>>>>>>> >>>>>>>>> be >>>>>>>>>> >>>>>>>>>>> a mix of the very basic and the childish. >>>>>>>>>>>>> >>>>>>>>>>>>> Meanwhile, it seems like anything worthwhile takes time and >>>>>>>>>>>>> >>>>>>>>>>>>> effort. >>>>>>>>>>>> >>>>>>>>>>> Anyways, professional software design often centers around use >>>>>>>> >>>>>>>>> cases >>>>>>>>>>>> >>>>>>>>>>> and >>>>>>>> >>>>>>>>> similar models which are aimed at extracting the important >>>>>>>>>> >>>>>>>>>>> concepts >>>>>>>>>>>> >>>>>>>>>>> about >>>>>>>> >>>>>>>>> what people need to get done and how they want to work. And that >>>>>>>>>>>>> >>>>>>>>>>>>> kind >>>>>>>>>>>> >>>>>>>>>>> of >>>>>>>>> >>>>>>>>> information is what you need if you are going to properly >>>>>>>>>> >>>>>>>>>>> generalize >>>>>>>>>>>> >>>>>>>>>>> application code. >>>>>>>> >>>>>>>>> Thanks, >>>>>>>>>>>>> >>>>>>>>>>>>> >>>>>>>>>>>>> >>>>>>>>>>>>> ------------------------------------------------------------ >>>>>>>>>>>>> ---------- >>>>>>>>>>>>> >>>>>>>>>>>> >>>>>>>>> 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 >>>>>>>> >>>>>>>> ------------------------------------------------------------ >>>>>>>> >>>>>>> ---------- >>>>>>> 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
