Also, )( is unmatched. Thanks,
-- Raul On Thu, Dec 29, 2016 at 7:57 AM, 'Pascal Jasmin' via Programming <[email protected]> wrote: > The core idea, > > +/\ ')(' (2 (] * >) 2 <:@* i.) '(((asdf))' > 1 2 3 3 3 3 3 2 1 > > if total doesn't end in 0 its unmatched. above 0 too many (, below 0 too > many ). > > +/\ ')(' (2 (] * >) 2 <:@* i.) '(fff )(asdf)))' > 1 1 1 1 1 0 1 1 1 1 1 0 _1 _2 > > behead to last 0, if last token below 0, first unmatched is last _1 position. > > if last token > 0, first unmatched is, in beheaded list, first position equal > to last token. > > um =: ')('&$: : (#`(i:&0 + {: i.~ ] }.~ i:&0)`(_1 i:~ ])@.(*@{:)@:(+/\)@:(2 > (] * >) 2 <:@* i.)) > > um '(fff )(asdf' > 6 > um '(fff )(asdf)' NB. return length > 12 > um '(fff )(asdf)))' > 12 > > ----- Original Message ----- > From: bill lam <[email protected]> > To: Programming forum <[email protected]> > Sent: Wednesday, December 28, 2016 8:11 PM > Subject: Re: [Jprogramming] unmatched parenthesis > > just an idea (untested) using iterations > 1. starting from left (or right as Linda) > 2. find the first (innermost) matched pair > 3. eliminate the pair > 4. repeat from 1 until no more match. > > rremaining parentheses are umatched ones. > > > On 28 Dec, 2016 12:54 pm, "Raul Miller" <[email protected]> wrote: > >> I'm not sure if it's even easy to to in J, I'll have to think about it. >> >> Or maybe someone else can come up with an implementation? >> >> Thanks, >> >> -- >> Raul >> >> >> On Tue, Dec 27, 2016 at 8:59 PM, bill lam <[email protected]> wrote: >> >> ... instead implement "all >> >> unmatched parenthesis", at least hypothetically. >> > >> > this is a good idea, time taken at runtime should be the same >> > as first unmatched, is it easy to do in C? >> > >> > Вт, 27 дек 2016, Raul Miller написал(а): >> >> I think we would call that the "last unmatched parenthesis". >> >> >> >> Certainly implementable, but it's not the only J-like approach. We do >> >> have left-to-right concepts in J (for example, NB. appears on the left >> >> of its comment, and conjunction arguments get bound left-to-right -- >> >> with nouns a, b and c, a@b@c is a@(b@c) and not (a@b)@c even though >> >> a-b-c is a-(b-c)). For that matter, we could instead implement "all >> >> unmatched parenthesis", at least hypothetically. >> >> >> >> Anyways, I do see what you are saying, but I don't know what >> >> importance to attach to it. >> >> >> >> Thanks, >> >> >> >> -- >> >> Raul >> >> >> >> >> >> On Tue, Dec 27, 2016 at 12:06 PM, Linda A Alvord >> >> <[email protected]> wrote: >> >> > It seems to me that this is in the spirit o J. Many uses of @ and >> other symbols indicate to me that the writer is "thinking" from left to >> right. If the coding of J is essentially from right to left your order >> feels right to me. >> >> > >> >> > Linda >> >> > >> >> > -----Original Message----- >> >> > From: Programming [mailto:[email protected]] >> On Behalf Of bill lam >> >> > Sent: Monday, December 26, 2016 7:39 PM >> >> > To: Programming forum >> >> > Subject: Re: [Jprogramming] unmatched parenthesis >> >> > >> >> > '((()' >> >> > shouldn't the first unmatched at index 1 instead of 0? ie use i: >> instead of i. for unmatched (. >> >> > >> >> > >> >> > >> >> > >> >> > On 27 Dec, 2016 8:31 am, "Raul Miller" <[email protected]> wrote: >> >> > >> >> > Ah, good point - I was not properly handling the case where the first >> unmatched parenthesis was the first character on the line. >> >> > >> >> > Also, the close script line is something of a special case, but it's >> easy enough to check for: >> >> > >> >> > With that fix and this change, I'd do something like this: >> >> > >> >> > firstunmatched=:3 :0 >> >> > if. ')' -:&(-.&' ') y do. #y return. end. >> >> > q=. unquoted=. -.~:/\y='''' >> >> > c=. uncommented=. -. +./\ q * 'NB.' E. y >> >> > n=. parendepth=. +/\q*c*-/'()'=/y >> >> > if. 0 < {: n do. >> >> > (n i. _1) <. 1 i:~0 1 E. 0,n >> >> > else. >> >> > n i. _1 >> >> > end. >> >> > ) >> >> > >> >> > Thanks, >> >> > >> >> > -- >> >> > Raul >> >> > >> >> > >> >> > On Mon, Dec 26, 2016 at 7:05 PM, bill lam <[email protected]> >> wrote: >> >> >> your verb seemed to find unmatched ) only, e.g. failed for '(()' or >> >> >> '(()(' >> >> >> also a line of ) and whitespace belongs to class 'close definition' >> >> >> and should not be flagged as mismatch. >> >> >> >> >> >> >> >> >> On 27 Dec, 2016 2:42 am, "Raul Miller" <[email protected]> >> wrote: >> >> >> >> >> >>> I'm not sure what you mean by "containing control words" but code >> >> >>> readability issues are usually a call for better code. >> >> >>> >> >> >>> For this, perhaps (warning: lightly tested code): >> >> >>> >> >> >>> firstunmatched=:3 :0 >> >> >>> q=. unquoted=. -.~:/\y='''' >> >> >>> c=. uncommented=. -. +./\ q * 'NB.' E. y >> >> >>> n=. parendepth=. +/\q*c*-/'()'=/y >> >> >>> if. 0 < {: n do. >> >> >>> (n i. _1) <. 1+1 i:~0 1 E. n >> >> >>> else. >> >> >>> n i. _1 >> >> >>> end. >> >> >>> ) >> >> >>> >> >> >>> In other words: ignoring quoted and commented parenthesis, look for >> >> >>> the first occurrence of either an unbalanced right parenthesis or an >> >> >>> unbalanced left parenthesis. >> >> >>> >> >> >>> Let me know, though, if you see any flaws in this implementation. >> >> >>> >> >> >>> Thanks, >> >> >>> >> >> >>> -- >> >> >>> Raul >> >> >>> >> >> >>> >> >> >>> On Mon, Dec 26, 2016 at 12:57 PM, Henry Rich <[email protected]> >> >> > wrote: >> >> >>> > I don't think it is reasonable to treat ')' and 'NB.' as >> containing >> >> >>> control >> >> >>> > words. It makes the code very hard to read. >> >> >>> > >> >> >>> > Showing the mismatched parenthesis is important enough that it >> >> >>> > might be better to have it even with this deficiency, but it IS a >> >> >>> > deficiency and should be treated as a bug to be fixed someday. >> >> >>> > >> >> >>> > Henry Rich >> >> >>> > >> >> >>> > On 12/26/2016 11:48 AM, bill lam wrote: >> >> >>> >> >> >> >>> >> I double checked with j602, it has no problem in high lighting >> the >> >> >>> >> unmatched )( in >> >> >>> >> >> >> >>> >> a '+' ((mno - rst) % b NB. )unmatched paren >> >> >>> >> ^ >> >> >>> >> a '+' ((mno - rst) % b ')' NB. )unmatched paren >> >> >>> >> ^ >> >> >>> >> and >> >> >>> >> >> >> >>> >> '(' (=:)) >> >> >>> >> ^ >> >> >>> >> But this is matched and is correct a '+' ((mno - rst) % b ')') >> NB. >> >> >>> >> )unmatched paren >> >> >>> >> >> >> >>> >> I think it is reasonable to omit this pattern for syntax >> >> >>> >> high-lighting. >> >> >>> >> >> >> >>> > >> >> >>> > ------------------------------------------------------------ >> ------- >> >> >>> > --- 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 >> > >> > -- >> > regards, >> > ==================================================== >> > GPG key 1024D/4434BAB3 2008-08-24 >> > gpg --keyserver subkeys.pgp.net --recv-keys 4434BAB3 >> > gpg --keyserver subkeys.pgp.net --armor --export 4434BAB3 > >> > ---------------------------------------------------------------------- >> > 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
