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