▲ | skrishnamurthi 3 days ago | ||||||||||||||||||||||||||||||||||||||||||||||||||||
This isn't meant to be a good programming mechanism, it's meant to be an illustration of how to use the macro system. But also, if you're processing non-linear data, you're going to want to do with a recursive function anyway. E.g., when dealing with a tree. Code below; can't seem to get multi-line code-formatting so it looks hideous: #lang racket (require "anon-rec.rkt") (require rackunit) (struct mt ()) (struct node (v l r)) (define sum-tree (lam/anon (t) (cond [(mt? t) 0] [(node? t) (+ (node-v t) ($MyInvocation (node-l t)) ($MyInvocation (node-r t)))]))) (define t (node 5 (node 3 (mt) (mt)) (node 7 (node 9 (mt) (mt)) (mt)))) (check-equal? (sum-tree t) 24) | |||||||||||||||||||||||||||||||||||||||||||||||||||||
▲ | neilv 3 days ago | parent | next [-] | ||||||||||||||||||||||||||||||||||||||||||||||||||||
For formatting code blocks on HN, prefixing each line with 4+ leading spaces works:
| |||||||||||||||||||||||||||||||||||||||||||||||||||||
| |||||||||||||||||||||||||||||||||||||||||||||||||||||
▲ | CyberDildonics 3 days ago | parent | prev [-] | ||||||||||||||||||||||||||||||||||||||||||||||||||||
Recursion just ends up using the call stack as a stack data structure. I would much rather use an actual stack data structure, that will be easier to debug and have better locality since there isn't an entire call frame overhead to put one value into the stack. | |||||||||||||||||||||||||||||||||||||||||||||||||||||
|