Функция,которая считает количество элементов в списке, больших 10 - Lisp
Формулировка задачи:
Помогите пожалуйста
Решение задачи: «Функция,которая считает количество элементов в списке, больших 10»
textual
Листинг программы
(defun count> (lst n) (if lst (if (> (car lst) n) (+ 1 (count> (cdr lst) n)) (count> (cdr lst) n)) 0)) ==> count> (count> '(1 2 3 1 2 3 4) 2) ==> 3
Объяснение кода листинга программы
В коде определена функция count>, которая принимает два аргумента: lst и n.
Функция выполняет следующие шаги:
- Если
lstне равноnil, то выполняется следующая последовательность действий: a. Еслиcar lstбольшеn, то значение1добавляется к результату рекурсивного вызова функцииcount>дляcdr lstиn. b. Еслиcar lstменьше или равноn, то выполняется рекурсивный вызов функцииcount>дляcdr lstиn. - Если
lstравноnil, то результат вызова функцииcount>дляcdr lstиnприсваивается переменнойcount. - Результат вызова функции
count>дляcdr lstиnвозвращается как результат выполнения функцииcount>. При вызове функцииcount> '(1 2 3 1 2 3 4) 2происходит следующее: - Первый элемент списка
1не больше2, поэтому выполняется рекурсивный вызов функцииcount>дляcdr lstиn. - Второй элемент списка
2не больше2, поэтому выполняется рекурсивный вызов функцииcount>дляcdr lstиn. - Третий элемент списка
3не больше2, поэтому выполняется рекурсивный вызов функцииcount>дляcdr lstиn. - Четвертый элемент списка
1не больше2, поэтому выполняется рекурсивный вызов функцииcount>дляcdr lstиn. - Пятый элемент списка
2не больше2, поэтому выполняется рекурсивный вызов функцииcount>дляcdr lstиn. - Шестой элемент списка
3не больше2, поэтому выполняется рекурсивный вызов функцииcount>дляcdr lstиn. - Седьмой элемент списка
4больше2, поэтому значение1добавляется к результату рекурсивного вызова функцииcount>дляcdr lstиn. - Результат рекурсивного вызова функции
count>дляcdr lstиnравен3, поэтому результат выполнения функцииcount>дляlstиnравен3.