Количество различных элементов списка - Lisp

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

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

Здравствуйте. Нужно решить следующую задачу: Напишите функцию (f L), которая считает количество различных элементов списка L что уже есть:
;;считаем количество элементов в списке, с заходом в подсписки
(defun count (s)
    (cond ((null s) 0)
          ((listp (car s))(+ (count (car s)) (count (cdr s))))
          (t (1+ (count (cdr s))))
    )
)
 
;;ищем повторения
(defun rep (x s)
    (cond ((null s) 0)
          ((listp (car s)) (+ (rep x (car s)) (rep x (cdr s))))
          ((eql x (car s)) (1+ (rep x (cdr s))))
          (t (rep x (cdr s)))
    )
)
Суть проблемы в том, что я не знаю как нормально написать функцию поиска повторяющихся элементов. Заранее спасибо.

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

textual
Листинг программы
(defun task (lst)
  (length (setof (flatten lst))))
 
==> task
 
(task '(1 2 3 (((4) (1 2 3)))))
 
==> 4

Объяснение кода листинга программы

В коде определена функция task, которая принимает один аргумент lst. Внутри функции происходит следующее:

  1. Вычисляется длина списка lst с помощью функции length.
  2. Получается множество элементов списка lst с помощью функции setof.
  3. Функция flatten применяется к списку lst, чтобы получить одномерный список.
  4. Результат вычисления функции length и результат применения функции flatten сохраняются в переменной result.
  5. Результат вычисления функции task (который является числом) возвращается из функции. Когда функция task вызывается с аргументом '(1 2 3 (((4) (1 2 3)))))', она возвращает число 4, потому что в этом списке есть четыре различных элемента.

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


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

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

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