(btw I threw this together just before bed, so it's not perfect. One thing that's wrong is it assumes (name x) can be called on any x; but it can't be called on lots of things, like numbers. So you'd need to filter those out, and also fix a couple other bugs.
On Dec 1, 2:12 am, Alan Malloy <a...@malloys.org> wrote: > LoL lets you write: > > (with-cxrs > (blah (foo (bar (cadddar x))))) > > ie, it looks in your source, sees what you need defined, and makes a > letfn. > > This looked fun, so I banged out an implementation: > > (defn cxr-impl [name] > (when-let [op (second (re-matches #"c([ad]+)r" name))] > `(comp ~@(map {\a `first \d `rest} op)))) > > (defmacro with-cxrs [& body] > (let [symbols (remove coll? (tree-seq coll? seq body))] > `(let [~@(for [sym symbols > :let [impl (cxr-impl (name sym))] > :when impl > thing [sym impl]] > thing)] > ~@body))) > > user> (macroexpand-1 '(with-cxrs (inc (caadaaddadr x)))) > (let [caadaaddadr (comp first first rest first first rest rest first > rest)] > (inc (caadaaddadr x))) > > On Nov 30, 11:27 pm, Tassilo Horn <tass...@member.fsf.org> wrote: > > > > > > > > > Peter Danenberg <pe...@factual.com> writes: > > > Hi Peter, > > > > Try as I might, I can't purge these anachronisms; so here are `car' to > > > `cddddr' in all their glory: > > > > http://clojars.org/cadr > > > Nice. :-) > > > > This implementation uses a Kleene-closure around the alphabet {a, d} > > > to generate the names; and a macro to define them: > > > > https://github.com/klutometis/cadr/blob/master/src/cadr/core.clj > > > Is that inspired by the `cxr' macro (I think, that was its name) in Let > > Over Lambda? One nice feature that seems missing from your version is a > > macro for defining local functions on demand. I don't remember the > > exact LoL syntax, but probably it would look something like that: > > > (with-cxrs [foo caaaddddddaddr, > > bar caddddddddaaaaaaaar] > > (cons (foo myseq) (bar mysec))) > > > Bye, > > Tassilo -- You received this message because you are subscribed to the Google Groups "Clojure" group. To post to this group, send email to clojure@googlegroups.com Note that posts from new members are moderated - please be patient with your first post. To unsubscribe from this group, send email to clojure+unsubscr...@googlegroups.com For more options, visit this group at http://groups.google.com/group/clojure?hl=en