Tôi tự hỏi nếu có một bộ mã Emacs Lisp thực hiện một số chức năng của Clojure. Ví dụ, -> và - >> và comp và một phần, và những thứ khác?Chức năng Clojure cho Emacs?
Cảm ơn bạn.
Tôi tự hỏi nếu có một bộ mã Emacs Lisp thực hiện một số chức năng của Clojure. Ví dụ, -> và - >> và comp và một phần, và những thứ khác?Chức năng Clojure cho Emacs?
Cảm ơn bạn.
Tôi đã chuyển các macro ->
và ->>
tới Emacs Lisp một thời gian trước đây. Tôi thỉnh thoảng sử dụng chúng trong mã cấu hình của mình và chúng dường như hoạt động tốt.
(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)))
Không chắc chắn về những người khác, nhưng một phần được triển khai trong nhánh lexbind của Emacs là "cà ri".
Gần đây tôi đã viết các macro này. Chúng không đệ quy và ít chi tiết hơn. Nhưng tôi chưa thử nghiệm chúng rộng rãi.
(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)
Bạn chắc chắn nên xem dash.el. Nó cung cấp rất nhiều chức năng Clojure lấy cảm hứng từ như:
(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)
Tôi tìm thấy thư viện này cực kỳ hữu ích .