Я создаю рекурсивную функцию, которая подсчитывает количество атомов в списке. Он должен быть в состоянии сосчитать атомы списков, которые вложены. Например: (a (bc) ed) или (a (bc (ge)) ed), он должен считать b и c отдельно или b, c, e и d отдельно, а не как единое целое.
Это функция, которую я создал:
(defun count-atoms (mylist)
(cond
((null mylist) 0)
((listp (car mylist)) (count-atoms (car mylist)))
((atom (car mylist)) (+ 1 (count-atoms (rest mylist))))
)
)
Выходное значение, которое я получаю, равно 3, но оно должно быть 5 (основано на (a (bc) ed)). Я предполагаю, что функция останавливается в тот момент, когда она достигает c. Как заставить функцию не останавливаться на c и вернуть ее к самому внешнему списку.