Функции в Lisp
Формулировка задачи:
Решение задачи: «Функции в Lisp»
(defun counter (lst a) (cond ((null lst) 0) ((eq a (car lst)) (+ 1 (counter (cdr lst) a))) (t (counter (cdr lst) a)))) ==> counter (counter '(1 2 3 1 2 3 1 2 1 2) 2) ==> 4
Объяснение кода листинга программы
В данном коде определена функция с именем counter. Она принимает два аргумента: lst и a. Если lst равно null, то функция возвращает 0. Если a равно car lst, то функция возвращает 1, иначе функция вызывает саму себя, передавая в качестве аргументов cdr lst и a. В примере использования функции передаётся список '(1 2 3 1 2 3 1 2 1 2) и число 2. Так как первый элемент списка равен 2, то в первый раз функция вызывается с аргументами (cdr '(1 2 3 1 2 3 1 2 1 2)) и 2. (cdr '(1 2 3 1 2 3 1 2 1 2)) равно (2 3 1 2 3 1 2 1 2), и функция возвращает 1. Во второй раз функция вызывается с аргументами (cdr (cdr '(1 2 3 1 2 3 1 2 1 2))) и 2. (cdr (cdr '(1 2 3 1 2 3 1 2 1 2))) равно (3 1 2 3 1 2 1 2), и функция возвращает 1. В третий раз функция вызывается с аргументами (cdr (cdr (cdr '(1 2 3 1 2 3 1 2 1 2)))) и 2. (cdr (cdr (cdr '(1 2 3 1 2 3 1 2 1 2)))) равно (null '(1 2 3 1 2 3 1 2 1 2)), и функция возвращает 0. В итоге функция counter возвращает 4.
ИИ поможет Вам:
- решить любую задачу по программированию
- объяснить код
- расставить комментарии в коде
- и т.д