Игнорируя другие вопросы, поднятые в этом посте, я скажу, что mapcar
всегда будет возвращать что-то для каждой вещи, которую он отображает, поэтому вы не можете использовать другую mapcar
для очистки там NIL. Это то, что делает mapcar
- он просматривает элемент (или элементы, если отображается в нескольких списках, как ваша вторая попытка mapcar
) и собирает результат вызова некоторой функции с этими аргументами.
Вместо этого, в этой ситуации, если вам по какой-то причине пришлось использовать mapcar, и вы не хотели использовать NIL, вы могли бы использовать функцию remove
, т.е. (remove nil (mapcar ...))
Поскольку ответ @ stark опубликован выше, я скажу, что функция remove-if
- это, по сути, то, что вы пытаетесь реализовать здесь. (Вот где вопрос о том, подходит ли это для домашней работы или нет, становится наиболее актуальным.)