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