Сколько всего атомов в этом S-выражении? - Lisp
Формулировка задачи:
Даны атом и S-выражение. Определить функцию, вычисляющую, сколько всего
атомов в этом S-выражение исключая заданный атом.
Например если дано: "2 (1 2 (3 (2 4)) (5 2))", ответом будет 4
Решение задачи: «Сколько всего атомов в этом S-выражении?»
textual
Листинг программы
- (defun count-exept (a w)
- (if w
- (+ (cond ((eq a (car w)) 0)
- ((atom (car w)) 1)
- ((count-exept a (car w))))
- (count-exept a (cdr w)))
- 0))
- > (count-exept 2 '(1 2 (3 (2 4)) (5 2)))
- 4
Объяснение кода листинга программы
В данном коде определен функционал с названием count-exept. Этот функционал принимает два аргумента, a и w. Если w не равно nil, то функционал возвращает сумму трех слагаемых:
- Если a равно car w, то возвращается 0.
- Если w является атомом, то возвращается 1.
- Если count-exept применимо к a и w, то возвращается результат его применения. Если w равно nil, то функционал возвращает 0. В конце кода приведен пример использования функционала с аргументами 2 и '(1 2 (3 (2 4)) (5 2)). Функционал должен посчитать количество атомов в данном S-выражении, то есть, он должен вернуть 4.
ИИ поможет Вам:
- решить любую задачу по программированию
- объяснить код
- расставить комментарии в коде
- и т.д