Макрос Clojure для поиска в списках карт с использованием SQL-подобного синтаксиса

Jacob спросил: 14 ноября 2017 в 07:31 в: clojure
=> (def persons '({:id 1 :name "olle"} {:id 2 :name "anna"} {:id 3 :name
"isak"} {:id 4 :name "beatrice"}))=> (select [:id :name] from persons where [:id > 2] orderby :name)

({:id 4 :name "beatrice"} {:id 3 :name "isak"})

Формат запроса должен быть следующим:

(select [columns]
from #{table}
where [:column op value]
orderby :column)

где 'op' равно одному из '=' ' & л;" '& GT;' или '< >'

(defmacro select
    [vara _ coll _ wherearg _ orderarg]
    '(map [~vara]
        (filter [~wherearg]
            (sort-by ~orderarg) ~coll)
        )
    ) 

Что еще нужно моему решению? Я не понимаю, что означают ошибки, поэтому я даже не знаю, что мне нужно искать найти решение.

IllegalArgumentException Don't know how to create ISeq from: clojure.lang.Symbol  clojure.lang.RT.seqFrom (RT.java:542)

0 ответов