Oh, I see.. you arbitrarily introduce an extra box, so you always have an
odd number.

Thanks,

-- 
Raul


On Wednesday, December 7, 2016, 'Pascal Jasmin' via Programming <
[email protected]> wrote:

> cutP 'a(b)'
> ┌─┬─┬┐
> │a│b││
> └─┴─┴┘
> the even (index 0) boxes are the contents of what is outside the brackets
> if anything.
>
> there is no requirement that start or end be bracket symbols.
>
>
>
>
>
> ----- Original Message -----
> From: Raul Miller <[email protected] <javascript:;>>
> To: Programming forum <[email protected] <javascript:;>>
> Sent: Wednesday, December 7, 2016 4:59 PM
> Subject: Re: [Jprogramming] parentheses matching
>
> I'm not sure that a balanced parsing always has an odd number of boxes.
>
> For example, 'a(b)'
>
> Or, if we require that the first character always be a '(' then '(b)a'
>
> If there's a requirement that the first and last characters always be
> '(' and ')' then that would give the "balanced parsing always has an
> odd number of boxes" constraint.
>
> Thanks,
>
> --
> Raul
>
>
> On Wed, Dec 7, 2016 at 3:34 PM, 'Pascal Jasmin' via Programming
> <[email protected] <javascript:;>> wrote:
> > the requirement is to cut based on outer parentheses level.  For inner
> parentheses, if you want those also cut, then you would repeat the function
> on odd indexes.  Yes you got this right
> >
> >
> > "My guess is you are asking for: each time boxing changes between level 0
> > and 1 you want a box fret. Box levels beyond 1 are ignored."
> >
> > Your solution seems beautiful
> >
> >
> > F=: (]~:0,}:)@:(1<.])
> >
> > with change to depth to make it ambivalent (and so paren characters a
> parameter)
> >
> > depth =: ([: +/\ =/\@(''''&~:) * 1 _1 0 {~ '()' i. ]) :  ([: +/\
> =/\@(''''&~:)@] * 1 _1 0 {~  i.)cutP =: ({:@] ,~ ]) <;._2~ 1 ,~ (] ~: 0 ,
> }:)@:(1 <. ])@:depth
> >
> > cutP '(a(bdc)g)gg(ffff)'
> > ┌┬───────┬──┬────┬┐
> > ││a(bdc)g│gg│ffff││
> > └┴───────┴──┴────┴┘
> >
> > '()' cutP 'qq((a(bdc)g)gg(ffff))g'
> > ┌──┬─────────────────┬─┐
> > │qq│(a(bdc)g)gg(ffff)│g│
> > └──┴─────────────────┴─┘
> >
> > I agree that you may often/always want to tunnel down into the paren
> group, and this is accomplished by repeating the function for odd indexes.
> >
> >
> > Assert =: 1 : '] [ [ 13!:8^:((0 e. ])`(12"_)) u@]'
> > cutP2 =: 'Paren mismatch' (2 |#) Assert cutP
> >
> > one of the neat features of the layout is that a balanced parsing has
> odd number of boxes.  cutP2 raises an error, though off by 2 errors are not
> caught so not completely useful.
> >
> >
> >
> > invoke =: 4 : 'x `:0 y'"_1
> > altM =: ($~ #) invoke ]
> >
> >
> > ]`(cutP each) altM cutP 'qq((a(bdc)g)gg(ffff))g'
> >
> > ┌──┬───────────────────┬─┐
> > │qq│┌┬───────┬──┬────┬┐│g│
> > │  │││a(bdc)g│gg│ffff│││ │
> > │  │└┴───────┴──┴────┴┘│ │
> > └──┴───────────────────┴─┘
> >
> > which tunnels one level, but I am having difficulty with an elegant
> solution to tunnel through all levels.
> >
> >
> >
> >
> > ----- Original Message -----
> > From: Raul Miller <[email protected] <javascript:;>>
> > To: Programming forum <[email protected] <javascript:;>>
> > Sent: Wednesday, December 7, 2016 1:31 PM
> > Subject: Re: [Jprogramming] parentheses matching
> >
> > I am trying to make sense of your requirements.
> >
> > Your final example includes some parenthesis, but not others. It also
> > includes at the same boxing level content from different parenthesis
> > depths. How does this make sense?
> >
> > My guess is you are asking for: each time boxing changes between level 0
> > and 1 you want a box fret. Box levels beyond 1 are ignored.
> >
> > With that specification, here's my F:
> >
> > F=: (]~:0,}:)@:(1<.])
> >
> > Note, of course, that this definition (and the use of <;._2) assumes that
> > the first character of the argument to depth is a '('. But I think if you
> > could change your specification such that it boxes level 1 content deeper
> > than level 0 content that that would solve this one also.
> >
> > Basically, I think you need to start from what your final result looks
> > like, and J's boxed type requires that everything be in boxes, so you
> > should probably want a final result that looks like this:
> >
> >    ('a';(<'bdc');'g');'gg';(<<'ffff')
> > ┌───────────┬──┬──────┐
> > │┌─┬─────┬─┐│gg│┌────┐│
> > ││a│┌───┐│g││  ││ffff││
> > ││ ││bdc││ ││  │└────┘│
> > ││ │└───┘│ ││  │      │
> > │└─┴─────┴─┘│  │      │
> > └───────────┴──┴──────┘
> >
> > In other words:
> >
> > *  Boxing level for characters is 1+depth.
> >
> > *  Box boundaries are increment boundaries.
> >
> > * All adjacent content at a given increment level (or higher) gets
> > contained in one box.
> >
> > *  All parenthesis get removed.
> >
> > Do you agree with this specification? (Why or why not?)
> >
> > Thanks,
> >
> > --
> > Raul
> >
> > On Wed, Dec 7, 2016 at 11:56 AM, 'Pascal Jasmin' via Programming <
> > [email protected] <javascript:;>> wrote:
> >
> >> There is this useful essay
> >>
> >> http://code.jsoftware.com/wiki/Essays/Parentheses_Matching
> >>
> >> but consider,
> >>
> >> depth =: [: +/\ =/\@(''''&~:) * 1 _1 0 {~ '()' i. ]
> >>
> >>     depth '(a(bdc)g)gg(ffff)'
> >> 1 1 2 2 2 2 1 1 0 0 0 1 1 1 1 1 0
> >>
> >> my goal is to box an expression such that at the "top level", at least 3
> >> boxes are generated
> >>
> >>
> >> 'outside (' ; 'inside outer ()' ; 'outside ) and outside next top level
> ('
> >>
> >>
> >> optionally followed by even number of boxes corresponding to last 2
> >> conditions.
> >>
> >> the most straightforward path I see is to create an argument to <;._2
> >> sucht that:
> >>
> >>  F depth '(a(bdc)g)gg(ffff)'
> >> 1 0 0 0 0 0 0 0 1 0 0 1 0 0 0 0 1
> >>
> >>
> >> and where,
> >>
> >>
> >> 1 0 0 0 0 0 0 0 1 0 0 1 0 0 0 0 1 1 ((<;._2) ' ' ,~ ])
> '(a(bdc)g)gg(ffff)'
> >> ┌┬───────┬──┬────┬┐
> >> ││a(bdc)g│gg│ffff││
> >> └┴───────┴──┴────┴┘
> >>
> >> what is F?
> >> ----------------------------------------------------------------------
> >> 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

Reply via email to