簡體   English   中英

Emacs的Clojure功能?

[英]Clojure functions for Emacs?

我想知道是否有一組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靈感的功能,如:

  • -map (fn list)
  • -reduce-from (fn initial-value list)
  • -reduce-r-from (fn initial-value list)
  • -reduce (fn list)
  • -reduce-r (fn list)
  • -filter (pred list)
  • - 刪除(pred list)
  • -keep (fn list)
  • -map-when (pred rep list)
  • -map-indexed (fn list)
  • -flatten (l)
  • -concat (&rest lists)
  • -mapcat (fn list)
  • -cons * (&rest args)
  • -count (pred list)
  • -任何? (pred list)
  • -所有? (pred list)
  • -沒有? (pred list)
  • -只有一些? (pred list)
  • -each (list fn)
  • -each-while (list pred fn)
  • -dotimes (num fn)
  • -repeat (nx)
  • -slice (list from &optional to)
  • -take (n list)
  • -drop (n list)
  • -take-while (pred list)
  • -drop-while (pred list)
  • -split-at (n list)
  • -insert-at (nx list)
  • -split-with (pred list)
  • - 分離(pred list)
  • - 分區(n list)
  • -partition-all-in-steps (n step list)
  • - 分步(n step list)
  • -partition-all (n list)
  • -partition-by (fn list)
  • -partition-by-header (fn list)
  • -group-by (fn list)
  • -interpose (sep list)
  • -interleave (&rest lists)
  • -zip-with (fn list1 list2)
  • -zip (list1 list2)
  • - 第一個(pred list)
  • -last (pred list)
  • -union (list list2)
  • -difference (list list2)
  • -intersection (list list2)
  • -distinct (list)
  • -contains? (list element)
  • -sort (predicate list)
  • -partial (fn &rest args)
  • -rpartial (fn &rest args)
  • -applify (fn)
  • - > (x &optional form &rest more)
  • - >> (x form &rest more)
  • - > (x form &rest more)
  • -when-let (var-val &rest body)
  • -when-let * (vars-vals &rest body)
  • -if-let (var-val then &optional else)
  • -if-let * (vars-vals then &optional else)
  • !cons (car cdr)
  • !cdr (list)

我發現這個庫非常有用。

不確定其他人,但部分是在Emacs的lexbind分支中實現為“咖喱”。

我最近寫過這些宏。 它們不是遞歸的,而且不那么冗長。 但我還沒有廣泛測試它們。

(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)

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM