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 >> ∇ >> >
