У меня есть базовая функция clisp, которую я делаю, которая просто возвращает количество атомов в списке.У меня проблема в том, что мне нужно увеличивать атомы в списке, который находится в списке, вместо того, чтобы видеть список как 1 элемент в списке.
Реальный вопрос, который я предполагаю, - какВы различаете в своем коде, является ли элемент списком или атомом ?Если я могу сделать это, я могу отправить списки другой функции, чтобы сложить и вернуть количество атомов, которые они содержат.
Очистить как грязь?:)
У меня есть пример:
(defun list_length (a)
(cond ((null a) 0)
(t (+ 1 (list_length (cdr a))))))
Это прекрасно работает, если в родительском списке нет встроенных списков, например, '(1 2 3 (4 5) 6)
вернет 5. Мне нужновключить 4 и 5 вместо списка (4 5) как один.
Спасибо за вашу помощь.
Джон
РЕДАКТИРОВАТЬ:
(defun list_length (a)
(cond ((null a) 0)
((listp (car a)) (list_length (car a)))
(t (+ 1 (list_length (cdr a))))))
[18]> (list_length '(1 2 3 (4 5) 6))
1. Trace: (LIST_LENGTH '(1 2 3 (4 5) 6))
2. Trace: (LIST_LENGTH '(2 3 (4 5) 6))
3. Trace: (LIST_LENGTH '(3 (4 5) 6))
4. Trace: (LIST_LENGTH '((4 5) 6))
5. Trace: (LIST_LENGTH '(4 5))
6. Trace: (LIST_LENGTH '(5))
7. Trace: (LIST_LENGTH 'NIL)
7. Trace: LIST_LENGTH ==> 0
6. Trace: LIST_LENGTH ==> 1
5. Trace: LIST_LENGTH ==> 2
4. Trace: LIST_LENGTH ==> 2
3. Trace: LIST_LENGTH ==> 3
2. Trace: LIST_LENGTH ==> 4
1. Trace: LIST_LENGTH ==> 5
5
[19]> (dribble)