Just adding the definition of your <dv> (was f in one of your replies below 
Raul)…

   dv=: {{(],(>:x) dv >@[)/ |. x ;`(<@[)@.(0=#@]) }.y}}

Works fine, glad you found and resolved the tree construction to match, nice.


> On 24 May 2021, at 10:35 pm, Raul Miller <rauldmil...@gmail.com> wrote:
> 
> Thank you, that makes sense.
> 
> And, I also see that I built a faulty value for ast.
> 
> Here's a fixed ast and a working depth vector verb:
> 
>   t=:'.'
> 
>   ast=:t;(t;t);(t;(t;t);t);<(t;(t;t;t);(t;t;t);t)
> 
>   ast
> 
> +-+-----+-----------+---------------------+
> 
> |.|+-+-+|+-+-----+-+|+-+-------+-------+-+|
> 
> | ||.|.|||.|+-+-+|.|||.|+-+-+-+|+-+-+-+|.||
> 
> | |+-+-+|| ||.|.|| ||| ||.|.|.|||.|.|.|| ||
> 
> | |     || |+-+-+| ||| |+-+-+-+|+-+-+-+| ||
> 
> | |     |+-+-----+-+|+-+-------+-------+-+|
> 
> +-+-----+-----------+---------------------+
> 
>   dv ast
> 
> 0 1 2 1 2 3 2 1 2 3 3 2 3 3 2
> 
> 
> (Apologies for any wonky formatting -- I am on a phone right now.)
> 
> 
> Thanks,
> 
> 
> -- 
> 
> Raul
> 
> On Mon, May 24, 2021 at 2:47 AM ethiejiesa via Programming <
> programm...@jsoftware.com> wrote:
> 
>> Raoul Schorer <raoul.scho...@gmail.com> wrote:
>>> Dear all,
>>> 
>>> I am struggling with the translation of the following APL dyad to J:
>>> 
>>> ∊ 0 {(⊢,(⍺+1)∇⊣)/⌽⍺,1↓⍵} y
>>> 
>>> which is the expression to yield a depth vector from a tree in record
>>> format (drawn from Dr. Hsu's thesis). Demo:
>> 
>> Oh cool! I have been (very sparingly) messing about with Hsu's tree
>> representation. For purely selfish reasons, I haven't looked at the thesis,
>> trying to figure out the representation myself. However, I have only got
>> so far
>> as figuring out an algorithm for non-recursively generating random depth
>> vectors.
>> 
>>> t ← '∘'
>>> ast ← t (t t) (t (t t) t) (t (t t t) (t t t) t)
>>> ∊ 0 {(⊢,(⍺+1)∇⊣)/⌽⍺,1↓⍵} ast
>>> 0 1 2 1 2 3 2 1 2 3 3 2 3 3 2
>>> 
>>> In particular, I don't understand the control flow and termination
>>> condition for the recursion. Dr. Hsu says that this uses tree reduction
>>> with no base case.
>> 
>> Anyway, my APL is pretty sketchy, but it looks like the ast representation
>> there is something like this:
>> 
>> 1) First element of list is node content,
>> 2) Following nodes are child subtrees.
>> 
>> So the algorithm should be conceptually simple. Replace the head atom with
>> the
>> current depth, bump current depth, and then recurse over the child
>> subtrees. I
>> believe that the "base case" is taken care of by (/), since at the leaves
>> it
>> should be operating on atoms.
>> 
>>> dv =. {{ (];(>:x) dv [)/\ |.x;}.y }}
>>> 
>>> results in an infinite loop. What am I missing? Is there some kind of
>>> implicit termination condition in the ∇ primitive?
>> 
>> The main problem is the (x;}.y) part. The recursion depends on the fact
>> that
>> (⍺,1↓⍵) equals ⍺ at the leaves, but (x;}.<'anything') is the same thing as
>> (x;a:). Thus when y is a leaf, (x;}.y) turns into a tree!
>> 
>> We can brute for a fix by replacing the (;) in (x;}.y) with
>> (;`(<@[)@.(0=#@])):
>> 
>>       t=: '.'
>>       ast=: t;(t;t);(t;(t;t);t);<(t;(t;t;t);(t;t;t);t)
>>       f=: {{(],(>:x) f >@[)/ |. x ;`(<@[)@.(0=#@]) }.y}}
>>       0 ;@f ast
>>    0 1 2 1 2 3 2 1 2 3 3 2 3 3 2
>> 
>> Hope that's somewhat comprehensible.
>> ----------------------------------------------------------------------
>> 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