возвращать этот же список content='наличие элемента в списке => возвращать этот же список' />
← Архив: Common Lisp

наличие элемента в списке => возвращать этот же список

Author: · 22.01.2016 15:51
· original author: anaumov
Всем привет.
Казалось бы простой вопрос, но хотелось бы найти самое элегантное решение.
Я прохожусь по списку и на основе его элементов генерирую новый список. Полученные списки, в свою очередь, складываются в новый список.
(dolist (i list_s)
        (nconc L (list (make-str-service i)))
)

Все просто, но мне нужно проверить элементы полученного (из make-str-service) списка и добавлять в список L только те списки, которые не имеют NIL.
Я не хочу вводить дополнительную переменную и не хочу вызвать make-str-service повторно. Я хочу пропустить её вывод через какую-нибудь member, т.е. мне нужна функция, на вход которой поступает список, а на выходе либо NIL, если в списке есть NIL, либо этот же список, если NIL'а нет.
Нагуглил немало похожего, но либо входной список обрезается (member), либо возвращается позиция NIL (position), либо просто T...
· original author: EO
Нагененировать сначала все списки. Полученному списку сказать remove-if/delete-if. Предикатом сделать (reduce #'(lambda (x y) (and x y)) <список>). После зачистки слить оставшиеся списки в L. Критерии элегантности в студию )
· original author: den73
> мне нужна функция, на вход которой поступает список, а на выходе либо NIL, если в списке есть NIL, либо этот же список, если NIL'а нет.
(defun f (x) (if (member nil x) nil x))
Всю задачу понять не осилил, но вот функция, которая вроде делает то, что ты хочешь
· original author: anaumov
> Всю задачу понять не осилил, но вот функция, которая вроде делает то, что ты хочешь
Спасибо. Да, я написал уже свою функцию. Просто думал, что в CL точто должно быть что-то подобное.