this seems to be behaving much better:
      foo ← {⍺,{((1+1↑⍵) foo 1↓⍵)}⍣(~0=⍴⍵)⊢⍵}
      ⍬ foo 1 2 3
2 3 4
      5 4 3 foo 1 2 3
5 4 3 2 3 4

On Wed, Oct 9, 2019 at 3:40 PM Rowan Cannaday <cannad...@gmail.com> wrote:

> somebody pointed out that the previous fn was failing because i wasn't
> calling 'foo' w/ dyadic arguments in the inner dfn
>
> On Wed, Oct 9, 2019 at 2:16 PM Rowan Cannaday <cannad...@gmail.com> wrote:
>
>> interestingly enough this is ok:
>>       foo ← {⍬{⍺,(1+1↑⍵),(foo 1↓⍵)}⍣(~0=⍴⍵)⍵}
>>       foo 1 2 3
>> 2 3 4
>>
>> but this isnt:
>>       foo ← {⍺{⍺,(1+1↑⍵),(foo 1↓⍵)}⍣(~0=⍴⍵)⍵}
>>       ⍬ foo 1 2 3
>> VALUE ERROR
>> foo[1]  λ←⍺ λ1⍣(∼0=⍴⍵)⍵
>>           ^
>>       ⎕CR 'foo'
>> λ←⍺ λ1 ⍵
>> λ←⍺{⍺,(1+1↑⍵),(foo 1↓⍵)}⍣(~0=⍴⍵)⍵
>>
>> On Wed, Oct 9, 2019 at 1:29 PM Rowan Cannaday <cannad...@gmail.com>
>> wrote:
>>
>>> making progress...
>>>
>>>       foo ← {{(1+1↑⍵),(foo 1↓⍵)}⍣(~0=⍴⍵)⍵}
>>>       foo 1 2 3
>>> 2 3 4
>>>
>>> On Wed, Oct 9, 2019 at 12:47 PM Rowan Cannaday <cannad...@gmail.com>
>>> wrote:
>>>
>>>> this is a slightly better way of writing my (still broken) accumulator:
>>>> acc←{⍺{⍺ acc 1↑⍵}⍣(0=⍴⍵)⊢⍵}
>>>>
>>>> On Wed, Oct 9, 2019 at 12:40 PM Rowan Cannaday <cannad...@gmail.com>
>>>> wrote:
>>>>
>>>>> Given a recursive factorial definition:
>>>>> fact←{{⍵ × fact ⍵-1}⍣(⍵>2)⊢1⌈⍵}
>>>>>
>>>>> [written by Kacper Gutowski in the 'Recursive Lambda' thread]
>>>>>
>>>>> I am attempting to write a basic accumulator. This should take an
>>>>> empty vector as the left value argument, and a rank 1 array as the right
>>>>> value argument.
>>>>> Every iteration it should drop a value from the right value, and
>>>>> append it to the left, until the right value is an empty vector.
>>>>>
>>>>> I thought I'd be able to do something like the following:
>>>>> acc←{⍺,{acc 1↑⍵}⍣(0=⍴⍵)⊢⍵}
>>>>> ⍬ acc 1 2 3
>>>>>
>>>>> But modifying this to say, add a 1 to every number, still returns the
>>>>> input vector ⍵.
>>>>>
>>>>> Thoughts?
>>>>>
>>>>>
>>>>> On Fri, Sep 27, 2019 at 3:44 PM Rowan Cannaday <cannad...@gmail.com>
>>>>> wrote:
>>>>>
>>>>>> Hello y'all.
>>>>>>
>>>>>> I have been attempting to learn function composition & higher-order
>>>>>> functions in gnu-apl, and how to use it to perform tree traversal.
>>>>>>
>>>>>>
>>>>>> https://en.wikipedia.org/wiki/Function_composition_(computer_science)#APL
>>>>>> https://en.wikipedia.org/wiki/Higher-order_function#APL
>>>>>> https://rosettacode.org/wiki/Tree_traversal#APL
>>>>>>
>>>>>> Unfortunately a lot of the syntax used is dyalog & dfn specific, so
>>>>>> working out some of the examples is a bit tricky for myself.
>>>>>> (the main inconsistencies are '∇' as a recursive function definition,
>>>>>> ⍺⍺ & ⍵⍵ to refer to left and right operands, '@' as the 'at' operator, 
>>>>>> '⍣'
>>>>>> operator differences, as well as possibly others).
>>>>>>
>>>>>> Has anybody done 'idiomatic' tree traversal in gnu-apl? Does anybody
>>>>>> use primitive composition functions in their code?
>>>>>>
>>>>>> Trying to figure out what works and feels natural in the language.
>>>>>> Any examples or guidance would be appreciated.
>>>>>>
>>>>>> Examples:
>>>>>>
>>>>>> Higher order fns in gnu-apl:
>>>>>> ∇Z ← (L twice) B
>>>>>>     Z ← L L B
>>>>>> ∇
>>>>>>
>>>>>> ∇Z ← plusthree B
>>>>>>     Z ← B + 3
>>>>>> ∇
>>>>>>
>>>>>> ∇Z ← g B
>>>>>>     Z ← plusthree twice B
>>>>>> ∇
>>>>>>
>>>>>

Reply via email to