Я хочу создать функцию, которая проверяет, является ли элемент членом списка. Список может содержать другие списки. Это то, что я пришел с до сих пор:Common Lisp: Функция, которая проверяет, является ли элемент членом списка
(defun subl(l)
(if (numberp l)
(if (= l 10)
(princ "Found"))
(mapcar 'subl l)))
Сейчас число Я ищу жестко закодировано и это 10
. Я хотел бы написать это как-то так, что функция принимает другой параметр (число, которое я ищу), и возвращает true
или 1
, когда он его найдет. Основная проблема заключается в том, что я не вижу способа управления mapcar
. mapcar
выполняет subl
на каждый элемент l
, если l
si список. Но как я могу контролировать возвращаемые значения каждого вызова?
Я хотел бы, чтобы проверить возвращаемое значение каждого subl
вызова, и если одна из него является true
или 1
вернуть true
или 1
до последнего рекурсивного вызова. Поэтому в конце subl
возвращает true
или one
, если элемент содержится в списке или nil
в противном случае.
Любая идея?
Основной проблемой при решении задач, требующих такого мышления и написания алгоритмов, является исчерпание повторяющегося в «машине» первого столкновения вложенный вложенный элемент вложенного элемента ... и т. д. управление копается в нем, и вы заканчиваете с терминатором nil первого вложенного элемента первого вложенного элемента ... и так далее. nil терминатор-I. Чтобы преодолеть это, я применил «или». аналогично делается и приходит в голову быстрее, поскольку «cons», поскольку это более естественная функция, в алгоритмах написания говорят о встречах «равных» элементов или конкретных подсписках исходного. –