Clojure在宏内排序

时间:2017-12-12 21:05:33

标签: sorting clojure macros

我需要在宏内部进行排序, 我有这样的地图集:

(def persons '({:id 1 :name "olle"} {:id 2 :name "anna"} {:id 3 :name "isak"} {:id 4 :name "beatrice"}))

如果我尝试(sort-by :name persons)它可以正常工作并将其排序

但在宏中:

(defmacro select
  [columns _ map _ where _ order]
  `(sort-by ~order ~@map))

它没有排序。

REPL(clojure.core / sort-by:name persons)

1 个答案:

答案 0 :(得分:0)

~@map子句中有错误。您在此处不需要@。该符号扩展了一个序列,例如, [1 2 3] -> 1 2 3

工作代码:

(defmacro select
  [columns _ map _ where _ order]
  `(sort-by ~order ~map))

检查扩展宏:

(macroexpand '(select nil nil persons nil nil nil :id))
(clojure.core/sort-by :id persons)