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