If you read the phrases they have short names for easy use and good comments.
I like to use clear names for global nouns but short local names. Good to use locales to separate names. On Jul 14, 2014 8:49 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
