|
From: | Rowan Cannaday |
Subject: | Re: [Bug-apl] Tree Traversal in gnu-apl |
Date: | Wed, 9 Oct 2019 15:40:32 -0400 |
interestingly enough this is ok:but this isnt:
foo ← {⍬{⍺,(1+1↑⍵),(foo 1↓⍵)}⍣(~0=⍴⍵)⍵}
foo 1 2 3
2 3 4
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 <address@hidden> wrote:making progress...
foo ← {{(1+1↑⍵),(foo 1↓⍵)}⍣(~0=⍴⍵)⍵}
foo 1 2 3
2 3 4On Wed, Oct 9, 2019 at 12:47 PM Rowan Cannaday <address@hidden> 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 <address@hidden> wrote:Given a recursive factorial definition:[written by Kacper Gutowski in the 'Recursive Lambda' thread]
fact←{{⍵ × fact ⍵-1}⍣(⍵>2)⊢1⌈⍵}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 3But 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 <address@hidden> wrote:Hello y'all.(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).
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.
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
∇
[Prev in Thread] | Current Thread | [Next in Thread] |