Mic*_*zyk 12
我刚才将这些->和->>宏移植到了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)))
Run Code Online (Sandbox Code Playgroud)
你绝对应该看看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)我发现这个库非常有用。