covering yet more cases,
um =: ')('&$: : (#`(i:&0 + {: i.~ ] }.~ i:&0)`(_1 i.~ ])@.(*@{:)`(_1 i.~
])@.(_1&e.)@:(+/\)@:(2 (] * >) 2 <:@* i.))
um ')(asdf))'0
----- Original Message -----
From: 'Pascal Jasmin' via Programming <[email protected]>
To: "[email protected]" <[email protected]>
Sent: Thursday, December 29, 2016 8:02 AM
Subject: Re: [Jprogramming] unmatched parenthesis
better def actually, finds first extra ')' instead of last.
um =: ')('&$: : (#`(i:&0 + {: i.~ ] }.~ i:&0)`(_1 i.~ ])@.(*@{:)@:(+/\)@:(2 (]
* >) 2 <:@* i.))
um '(fff ))(asdf)))'
6
----- Original Message -----
From: 'Pascal Jasmin' via Programming <[email protected]>
To: "[email protected]" <[email protected]>
Sent: Thursday, December 29, 2016 7:57 AM
Subject: Re: [Jprogramming] unmatched parenthesis
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
----------------------------------------------------------------------
For information about J forums see http://www.jsoftware.com/forums.htm