3 ms·
My toy lisp interpreter from a couple of years ago had a pretty neat (in all modesty) implementation of infix operations that permitted Clojure's threading macr
by akkartik 11y ago
My toy lisp interpreter from a couple of years ago had a pretty neat (in all modesty) implementation of infix operations that permitted Clojure's threading macro[1] to be infix: http://akkartik.name/post/wart http://akkartik.name/post/wart
[1] OP is really about the threading macro rather than unix pipes, since the latter also does concurrency and flow-control really well.
- wging 11y agoRe: your [1], Clojure's threading macros came to mind first for me as well. (->> [(range 20 31) (range 490 501) (range 8120 8131)] (apply concat) (map classify) (reduce getCounts [0 0 0])) Expands as follows: user> (macroexpand '(->> [(range 20 31) (range 490 501) (range 8120 8131)] (apply concat) (map classify) (reduce getCounts [0 0 0]))) (reduce getCounts [0 0 0] (map classify (apply concat [(range 20 31) (range 490 501) (range 8120 8131)]))) Now that you mention concurrency and flow-control in the context of these macros, it seems a little weird to me that we have "threading macros" that really are about weaving expressions together rather than concurrency/threading.