【问题标题】:Clojure functions for Emacs?Emacs 的 Clojure 函数?
【发布时间】:2010-10-08 02:51:36
【问题描述】:

我想知道是否有一组 Emacs Lisp 代码实现了 Clojure 的某些功能。例如 -> 和 ->> 和 comp 和 partial 等等?

谢谢。

【问题讨论】:

    标签: emacs clojure


    【解决方案1】:

    不久前,我已将 ->->> 宏移植到 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)))
    

    【讨论】:

      【解决方案2】:

      你一定要看看dash.el。它提供了许多受 Clojure 启发的函数,例如:

      • -地图(fn list)
      • -减少-来自(fn initial-value list)
      • -reduce-r-来自(fn initial-value list)
      • -减少(fn list)
      • -reduce-r (fn list)
      • -过滤器(pred list)
      • -删除(pred list)
      • -保持(fn list)
      • -map-when (pred rep list)
      • -地图索引(fn list)
      • -扁平化(l)
      • -连接(&rest lists)
      • -mapcat (fn list)
      • -缺点* (&rest args)
      • -计数(pred list)
      • -有吗? (pred list)
      • -全部? (pred list)
      • -没有? (pred list)
      • -只有-一些? (pred list)
      • -每个(list fn)
      • -每次(list pred fn)
      • -dotimes (num fn)
      • -重复(n x)
      • -切片(list from &optional to)
      • -取(n list)
      • -丢弃(n list)
      • -趁着(pred list)
      • -drop-while (pred list)
      • -拆分-(n list)
      • -插入-(n x list)
      • -拆分-与(pred list)
      • -单独的(pred list)
      • -分区(n list)
      • -partition-all-in-steps (n step list)
      • -分步(n step list)
      • -partition-all (n list)
      • -partition-by (fn list)
      • -按头分区(fn list)
      • -group-by (fn list)
      • -插入(sep list)
      • -交错(&rest lists)
      • -zip-with (fn list1 list2)
      • -压缩(list1 list2)
      • -第一(pred list)
      • -最后一个(pred list)
      • -联合(list list2)
      • -差异(list list2)
      • -交叉口(list list2)
      • -区别(list)
      • -包含? (list element)
      • -排序(predicate list)
      • -部分(fn &rest args)
      • -rpartial (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)
      • -if-let* (vars-vals then &optional else)
      • !cons (car cdr)
      • !cdr (list)

      我发现这个库非常有用。

      【讨论】:

        【解决方案3】:

        不确定其他的,但部分在 Emacs 的 lexbind 分支中实现为“curry”。

        【讨论】:

          【解决方案4】:

          我最近编写了这些宏。 它们不是递归的,也不那么冗长。 但我还没有对它们进行广泛的测试。

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

          【讨论】:

            猜你喜欢
            • 1970-01-01
            • 1970-01-01
            • 2011-01-23
            • 1970-01-01
            • 1970-01-01
            • 1970-01-01
            • 1970-01-01
            • 2011-01-18
            • 2015-10-04
            相关资源
            最近更新 更多