【发布时间】:2010-10-08 02:51:36
【问题描述】:
我想知道是否有一组 Emacs Lisp 代码实现了 Clojure 的某些功能。例如 -> 和 ->> 和 comp 和 partial 等等?
谢谢。
【问题讨论】:
我想知道是否有一组 Emacs Lisp 代码实现了 Clojure 的某些功能。例如 -> 和 ->> 和 comp 和 partial 等等?
谢谢。
【问题讨论】:
不久前,我已将 -> 和 ->> 宏移植到 Emacs Lisp。我偶尔在我的配置代码中使用它们,它们似乎工作正常。
(defmacro -> (e &rest es)
(if (and (consp es) (not (consp (cdr es))))
(if (consp (car es))
`(,(caar es) ,e ,@(cdar es))
`(,(car es) ,e))
(if (consp es)
`(-> (-> ,e ,(car es)) ,@(cdr es))
e)))
(defmacro ->> (e &rest es)
(if (and (consp es) (not (consp (cdr es))))
(if (consp (car es))
`(,@(car es) ,e)
`(,(car es) ,e))
(if (consp es)
`(->> (->> ,e ,(car es)) ,@(cdr es))
e)))
【讨论】:
你一定要看看dash.el。它提供了许多受 Clojure 启发的函数,例如:
(fn list)
(fn initial-value list)
(fn initial-value list)
(fn list)
(fn list)
(pred list)
(pred list)
(fn list)
(pred rep list)
(fn list)
(l)
(&rest lists)
(fn list)
(&rest args)
(pred list)
(pred list)
(pred list)
(pred list)
(pred list)
(list fn)
(list pred fn)
(num fn)
(n x)
(list from &optional to)
(n list)
(n list)
(pred list)
(pred list)
(n list)
(n x list)
(pred list)
(pred list)
(n list)
(n step list)
(n step list)
(n list)
(fn list)
(fn list)
(fn list)
(sep list)
(&rest lists)
(fn list1 list2)
(list1 list2)
(pred list)
(pred list)
(list list2)
(list list2)
(list list2)
(list)
(list element)
(predicate list)
(fn &rest args)
(fn &rest args)
(fn)
(x &optional form &rest more)
(x form &rest more)
(x form &rest more)
(var-val &rest body)
(vars-vals &rest body)
(var-val then &optional else)
(vars-vals then &optional else)
(car cdr)
(list)
我发现这个库非常有用。
【讨论】:
不确定其他的,但部分在 Emacs 的 lexbind 分支中实现为“curry”。
【讨论】:
我最近编写了这些宏。 它们不是递归的,也不那么冗长。 但我还没有对它们进行广泛的测试。
(defmacro ->> (x &rest forms)
(while forms
(setq x (append (pop forms) (list x))))
x)
(defmacro -> (x &rest forms)
(while forms
(let ((form (pop forms)))
(push x (cdr form))
(setq x form)))
x)
【讨论】: