2015-11-30 2 views
0

У меня есть список таких как:Удалить список из списка списков Clojure

(def lst '((a b c) (d e) (f g h))) 

Мне нужно создать новый список убрав один из внутренних списков, Я попытался

(remove '(d e) lst) 

который возвращает

java.lang.ClassCastException: clojure.lang.PersistentList cannot be cast to clojure.lang.IFn 

Я также попытался

(filter (not= '(d e)) lst) 

который возвращает

java.lang.ClassCastException: null 
+1

Пожалуйста, ознакомьтесь документами Clojure; вы можете сделать шаг назад, чтобы ознакомиться с тем, как изучать язык. Документы для обоих состояний они ожидают, что функция, например, передача цитируемого списка 'remove' нарушает это. –

ответ

4

Если вы хотите использовать filter, обратите внимание, что первый аргумент должен быть функцией, так что вы можете использовать

(filter #(not= '(d e) %) lst) 

Вот почему вы получите ClassCastException.

То же самое верно для remove. Вы можете также использовать partial вместо анонимной функции:

(remove (partial = '(d e)) lst) 
4

Оба filter и remove функции ожидать первый аргумент функции предиката. Вы можете использовать partial функции для преобразования оператора = в предикат:

(remove (partial = '(d e)) lst) 
Смежные вопросы