First of all, I suggest you promote your solution (also) to your 'heaven of
Jems' .
And I wouldn't be surprised if it will serve as an excellent example of $:
That said (...), my use case essentially came from representing (a forest
of) trees, n being connected to the last n-1 which precedes it.
(BTW, forget my statement about 2 ~:/\ ]={. It was wrong.)
If the argument starts with a higher level (x), add (the path to that level)
the levels (0,1,...,x-1) in front of the argument and delete the
appropriate boxes afterwards.
R.E. Boss
> -----Oorspronkelijk bericht-----
> Van: [email protected] [mailto:programming-
> [email protected]] Namens Dan Bron
> Verzonden: maandag 28 november 2011 16:15
> Aan: 'Programming forum'
> Onderwerp: Re: [Jprogramming] multiple boxing
>
> Now that I think about it, 2 f/\ y often represents a transition - from
> condition X to condition -.X and back again. So, I wouldn't be surprised
if
> (<@f`(<@g);.1~ 1 , 2 ~:/\ h) became a fairly standard idiom.
>
> To that point, REB: I'm interested in the use case here. Where did your 1
1
> 2 2 3 3 4 2 3 4 4 1 2 2 2 1 come from, what does it represent, and why do
> you need it boxed?
>
> BTW, I started packaging this concept up for re-use in
> http://www.jsoftware.com/svn/DanBron/trunk/general/nest2box.ijs . But I
> notice it's bug-ridden when the arguments don't start with level-0
nesting,
> as in '((level 2) level 1 (level 2)) level 0'. Anyone care to take a
whack
> at correcting that?
>
> -Dan
>
>
> -----Original Message-----
> From: [email protected]
> [mailto:[email protected]] On Behalf Of R.E. Boss
> Sent: Friday, November 25, 2011 5:59 AM
> To: Programming forum
> Subject: Re: [Jprogramming] multiple boxing
>
> Your solution is as elegant as brilliant in its simplicity. And your
> explanation is admirable.
>
> I noticed the similarity with nested parenthesized expressions and even
> remembered these were solved, but could not find the appropriate post(s).
> I did not however, realize that 'top level items' were the odd and 'nested
> items' were the even ones. Smart observation.
> Nor did I know (or was forgotten, but what's the difference?) about the
> gerundial form of cut.
>
> Even though I do not like $: , I see no way to improve your solution (be
it
> that I prefer 2 >/\ {.<] above 2 ~:/\ ]={. ).
>
> Thanks for jumping in when you are needed.
>
>
> R.E. Boss
>
>
> -----Oorspronkelijk bericht-----
> Van: [email protected]
> [mailto:[email protected]] Namens Dan Bron
> Verzonden: vrijdag 25 november 2011 4:43
> Aan: 'Programming forum'
> Onderwerp: Re: [Jprogramming] multiple boxing
>
> This looks similar to boxing a recursively nested parenthesized expression
> (or XML, or whatever). So, we can use recursion:
>
> foo =: ] <`(<@$:);.1~ 1 , 2 ~:/\ ]={.
> foo 1 1 2 2 3 3 4 2 3 4 4 1 2 2 2 1
> +---+---------------------------+-+-------+-+
> |1 1|+---+---------+-+---------+|1|+-----+|1|
> | ||2 2|+---+---+|2|+-+-----+|| ||2 2 2|| |
> | || ||3 3|+-+|| ||3|+---+||| |+-----+| |
> | || || ||4||| || ||4 4|||| | | |
> | || || |+-+|| || |+---+||| | | |
> | || |+---+---+| |+-+-----+|| | | |
> | |+---+---------+-+---------+| | | |
> +---+---------------------------+-+-------+-+
>
> We start by cutting the list into "top level" items, and "nested" items.
> Having done this, we only need to recurse into the nested items and
process
> them similarly.
>
> Of course, since series of top-level items are grouped together until
> interrupted a nested item, the list will end up alternating between groups
> (boxes) of top-level items and groups of nested items, like A B A B A B.
So
> we only need to recurse into the odd boxes, and leave the even boxes
> alone.
>
>
> The verb's relative simplicity arises from this observation, and the cute
> gerundial form of ;. which allows us to say f`g;.1 where f and g will be
> applied cyclically to the partitions of the argument (but if we didn't
have
> that feature, we could emulate it with ^: ).
>
> -Dan
>
> PS:
>
> This assumes you trust $: not to abort with a stack error, which it does
> sometimes. Though I'd only expect that with long and deeply-nested
> arguments.
>
> But if you wanted to be certain ab initio (or you just have time to kill
and
> find J amusing), you could try rewriting the verb using a bottom-up
approach
> based on ^: . You even could start with the code you (REB) provided to me
> in a similar thread back in 2009 [1].
>
> [1] Thread "Recursive nesting, avoiding recursion"
>
> http://www.jsoftware.com/pipermail/programming/2009-
> August/016181.html
>
> PPS: Happy Thanksgiving!
>
> -----Original Message-----
> From: [email protected]
> [mailto:[email protected]] On Behalf Of R.E. Boss
> Sent: Thursday, November 24, 2011 9:27 AM
> To: Programming forum
> Subject: [Jprogramming] multiple boxing
>
> Given an array of positive integers A starting with 1 and such that 2 >
>./
> 2 -~/\ A
>
> (a next atom in A is at most 1 larger than the preceding one).
>
>
>
> Now I want the items to be boxed according to this example
>
>
>
> foo 1 1 2 2 3 3 4 2 3 4 4 1 2 2 2 1
>
> +---+---------------------------+-+-------+-+
>
> |1 1|+---+---------+-+---------+|1|+-----+|1|
>
> | ||2 2|+---+---+|2|+-+-----+|| ||2 2 2|| |
>
> | || ||3 3|+-+|| ||3|+---+||| |+-----+| |
>
> | || || ||4||| || ||4 4|||| | | |
>
> | || || |+-+|| || |+---+||| | | |
>
> | || |+---+---+| |+-+-----+|| | | |
>
> | |+---+---------+-+---------+| | | |
>
> +---+---------------------------+-+-------+-+
>
>
>
>
>
> Any suggestions for foo?
>
>
>
>
>
> R.E. Boss
>
> ----------------------------------------------------------------------
> 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