2017-12-12 15 views
1

の内側に私は、このように設定されたマップを持って 、マクロ内でソートすることにより操作を行う必要があります。Clojureのは、ソート・バイマクロ

(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 [email protected])) 

それはソートをdoesntの。

REPL(clojure.core /ソート・バイ:名名)

+0

そして、あなたは 'SELECT'を呼んでいた方法を示しています。 – Carcigenicate

+0

私は答えを書こうとしましたが、あなたの質問は今では広すぎます。 「それはソートしない」とはどういう意味ですか?私がここに示したデータでは、これはアリティの例外を引き起こすことになると思います。それは事実ですか? – Carcigenicate

+0

私はそれをオンラインでコンパイルしようとしたが、私はその夜のコード問題だと思う。 ps。 https://repl.it/repls/AliceblueCloudySealion –

答えて

0

あなたは[email protected]句でエラーを持っています。ここに@は必要ありません。そのシンボルはシーケンスを所定の場所に展開します。 [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)