Я хотел бы иметь возможность сделать что-то вроде этого:
(search data
list?
(fn [x] (and (list? x) (= 4 (first x))))
(fn [x] (and (set? x) (contains x 3))))
И заставьте его рекурсивно искать вложенную структуру данных data
:
- сначала для самых мелких списков (например, может быть в наборе наборов).
- затем в этих списках для самых мелких списков, первый элемент которых равен
4
. - затем в тех списках для самых мелких наборов, которые содержат 3.
- наконец, возвращает список элементов, найденных на шаге 3.
Прежде чем я изобрету велосипед, есть ли стандартный способ сделать это?