Подсчитать все пары элементов в списке - Lisp

Узнай цену своей работы

Формулировка задачи:

Помогите плиз решить эту задачу - Посчитать все пары элементов в списке

Решение задачи: «Подсчитать все пары элементов в списке»

textual
Листинг программы
(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 пар одинаковых элементов.

ИИ поможет Вам:


  • решить любую задачу по программированию
  • объяснить код
  • расставить комментарии в коде
  • и т.д
Попробуйте бесплатно

Оцени полезность:

13   голосов , оценка 3.385 из 5
Похожие ответы