Не могу дописать код - Lisp
Формулировка задачи:
- (defun poisk (n k)
- (cond ((= n (car k)) (+ 1 (poisk n (cdr k))))
- (t (poisk n (cdr k)))))
- (defun poisk (n k)
- (cond ((ATOM k)
- (cond
- ((= n k) (+ 1 (poisk n(cdr k))))
- (t (poisk n (cdr k)))
- ))
- (t (poisk n (cdr k)))
- )
- )
Решение задачи: «Не могу дописать код»
- (defun count-atom (a w)
- (cond ((null w) 0)
- ((atom w) (if (= w a) 1 0))
- (t (+ (count-atom a (car w))
- (count-atom a (cdr w))))))
- > (count-atom 5 ' (4 5 ((3 5 (4)) 2) 2 5 6))
- 3
Объяснение кода листинга программы
В данном коде представлена функция count-atom
, которая принимает два аргумента: a
и w
.
В первой ветке условия cond
проверяется, является ли w
null. Если это так, то возвращается 0.
Во второй ветке условия cond
проверяется, является ли w
атомом. Если это так, то проверяется, равно ли значение w
переменной a
. Если это так, то возвращается 1, иначе возвращается 0.
В третьей ветке условия cond
проверяется, является ли w
списком. Если это так, то рекурсивно вызывается функция count-atom
с аргументами a
и car w
, затем результат складывается с результатом вызова функции count-atom
с аргументами a
и cdr w
.
Значение переменной a
равно 5, значение переменной w
равно (4 5 ((3 5 (4)) 2) 2 5 6)
.
Поскольку w
является списком, то функция рекурсивно вызывается с аргументами a
и car w
, затем с аргументами a
и cdr w
.
Первый вызов: count-atom(a=5, w=(4 5 ((3 5 (4)) 2) 2 5 6)
count-atom(a=5, w=(3 5 (4)))
count-atom(a=5, w=4)
Второй вызов: count-atom(a=5, w=2)
Третий вызов: count-atom(a=5, w=6)
В итоге, результат вызовов функции count-atom
равен 3.
ИИ поможет Вам:
- решить любую задачу по программированию
- объяснить код
- расставить комментарии в коде
- и т.д