Не могу дописать код - 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.
ИИ поможет Вам:
- решить любую задачу по программированию
- объяснить код
- расставить комментарии в коде
- и т.д