Количество различных элементов списка - 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
. Внутри функции происходит следующее:
- Вычисляется длина списка
lst
с помощью функцииlength
. - Получается множество элементов списка
lst
с помощью функцииsetof
. - Функция
flatten
применяется к спискуlst
, чтобы получить одномерный список. - Результат вычисления функции
length
и результат применения функцииflatten
сохраняются в переменнойresult
. - Результат вычисления функции
task
(который является числом) возвращается из функции. Когда функцияtask
вызывается с аргументом'(1 2 3 (((4) (1 2 3)))))'
, она возвращает число4
, потому что в этом списке есть четыре различных элемента.
ИИ поможет Вам:
- решить любую задачу по программированию
- объяснить код
- расставить комментарии в коде
- и т.д