Я думаю, что вы пытаетесь удалить определенные символы (+ - / *) из списка и все списки в этом списке, рекурсивно.
(remove #{'+ '- '* '/} '(= a (* b c)))
Это использует набор #{'+ '- '* '/ '=}
в качестве функции предиката с remove
.Если какой-либо элемент в списке находится в этом наборе, он получает remove
d.
Но чтобы соответствовать вашему примеру вывода, мы должны добавить '=
к набору символов, и список (ы) должентакже выровняйте:
(remove #{'+ '- '* '/ '=} (flatten '(= a (* b c))))
=> (a b c)
Если вы хотите сохранить вложенные списки, вы можете сделать что-то похожее с clojure.walk
:
(clojure.walk/postwalk
(fn [v]
(if (list? v)
(remove #{'+ '- '* '/ '=} v)
v))
'(= a (* b c)))
=> (a (b c))