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

Reply via email to