Hmm...

Would something like this fit what you are looking for?

mktree=:1 :0
  (0#a:) m mktree y
:
  for_p. m do. path=.;p [ leaf=.p_index{::y
    x=.path x insertnode leaf
  end.x
)

insertnode=:1 :0
:
  len=. (#m)>.1+ndx=. {.x
  if.1<#x do.
    node=. (}.x) (ndx{::len{.m) insertnode y
  else.
    node=. y
  end.
  (<node) ({.x)} len{.m,a:
)

   leaves =. 'g';1
   paths =. (,0);1 0
   tree =. paths mktree leaves
   tree -: 'g';<,<1
1

That's not quite the same as your original specification, but I can't
see any good reason to require that non-leaf nodes of the tree be rank
zero.

Also, this isn't going to be all that efficient -- but (if this is
what you are looking for) there are some minor improvements available.

Thanks,

-- 
Raul

On Sat, Sep 19, 2020 at 11:51 AM Raoul Schorer <raoul.scho...@gmail.com> wrote:
>
> Dear all,
>
> I am attempting to recover trees from a varying length path encoding. Chapter
> 32: Trees <https://www.jsoftware.com/help/learning/32.htm> shows how to do
> it for fixed-length paths, but I wasn't able to find a suitable solution to
> the varying length case. To illustrate:
>
> leaves =. 'g';1
> paths =. (,0);1 0
> tree =. paths mktree leaves
> tree -: 'g';<<1
> 1
>
> What would be the definition of 'mktree'? Is there a "common idiom" APL
> solution to that?
>
> Thanks a bunch,
> Raoul
> ----------------------------------------------------------------------
> 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