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 <[email protected]> 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 <[email protected]>
> 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 <[email protected]>
>> 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