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