Форум программистов, компьютерный форум, киберфорум
Lisp
Войти
Регистрация
Восстановить пароль
Карта форума Темы раздела Блоги Сообщество Поиск Заказать работу  
 
Рейтинг 5.00/13: Рейтинг темы: голосов - 13, средняя оценка - 5.00
7 / 7 / 1
Регистрация: 16.10.2012
Сообщений: 34
1

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

30.11.2015, 13:24. Показов 2350. Ответов 3

Author24 — интернет-сервис помощи студентам
Здравствуйте.
Нужно решить следующую задачу:
Напишите функцию (f L), которая считает количество различных элементов списка L
что уже есть:
Lisp
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
;;считаем количество элементов в списке, с заходом в подсписки
(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)))
    )
)
Суть проблемы в том, что я не знаю как нормально написать функцию поиска повторяющихся элементов.
Заранее спасибо.
1
Лучшие ответы (1)
Programming
Эксперт
94731 / 64177 / 26122
Регистрация: 12.04.2006
Сообщений: 116,782
30.11.2015, 13:24
Ответы с готовыми решениями:

Найти количество элементов списка
задан многоуровневый список, найти количество элементов списка, находящихся на нижних уровнях.

Создать программу, вычисляющую количество элементов введенного списка
помогите пожалуйста!

Почему не считает количество элементов списка x, не превосходящих элемент а?
Почему не считает количество элементов списка x не превосходящих элемент а.И как изменить код что...

Найти количество отрицательных элементов после максимального элемента списка
Доброго времени суток, форумчане. Хотел бы попросить помощи по одному вопросу. Дан список(возможен...

3
Модератор
Эксперт функциональных языков программированияЭксперт Python
37295 / 20729 / 4272
Регистрация: 12.02.2012
Сообщений: 34,116
Записей в блоге: 14
30.11.2015, 13:59 2
Лучший ответ Сообщение было отмечено AranSe как решение

Решение

Самое простое - это сначала сделать список одноуровневым, потом построить из его элементов множество (удалив повторения) и от результата взять длину:

Lisp
1
2
3
4
5
6
7
8
(defun task (lst)
  (length (setof (flatten lst))))
 
==> task
 
(task '(1 2 3 (((4) (1 2 3)))))
 
==> 4
Добавлено через 3 минуты
Подробности ниже:

Lisp
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
(defun flatten (lst) 
  (cond ((null lst) nil)
        ((atom (car lst)) (cons (car lst) (flatten (cdr lst))))
        (t (append (flatten (car lst)) (flatten (cdr lst))))))
 
==> flatten
 
(flatten '(1 2 3 (((1 2 3)))))
 
==> (1 2 3 1 2 3)
 
(defun setof (lst)
  (cond ((null lst) nil)
        (t (cons (car lst) (setof (remove (car lst) (cdr lst)))))))
 
==> setof
 
(setof '(1 2 3 1 2 3))
 
==> (1 2 3)
3
7 / 7 / 1
Регистрация: 16.10.2012
Сообщений: 34
30.11.2015, 14:13  [ТС] 3
Спасибо большое.
0
4699 / 4394 / 380
Регистрация: 12.05.2012
Сообщений: 3,096
30.11.2015, 18:07 4
как вариант:
Lisp
1
2
3
4
5
6
7
8
9
(defun count-exclusive (w) (length (exclusive w)))
 
(defun exclusive (w &optional ac)
  (cond ((null w) ac)
        ((atom w) (adjoin w ac))
        ((exclusive (car w) (exclusive (cdr w) ac)))))
 
> (count-exclusive '(1 2 3 (((4) (1 2 3)))))
4
3
30.11.2015, 18:07
IT_Exp
Эксперт
87844 / 49110 / 22898
Регистрация: 17.06.2006
Сообщений: 92,604
30.11.2015, 18:07
Помогаю со студенческими работами здесь

Определить функцию, которая выдает количество элементов списка x, не превосходящих a
Помогите пожалуйста решить Используя функцию DEFUN определить функцию f (a x), где a -...

Функция: найти количество троек подряд идущих одинаковых элементов списка
написать функцию, вычисляющую количество троек подряд идущих элементов числового списка, в каждой...

Определите функцию, определяющую количество элементов, равных минимальному элементу числового списка
Здравствуйте! Помогите, пожалуйста, решить задачу: Определите функцию, определяющую количество...

Определить функцию, возвращающую количество элементов, равных максимальному элементу числового списка
(DEFUN MAX_XY (X Y) (COND ((> X Y) X) (T Y))) (DEFUN MAX_LIST (LST) (COND ((NULL LST) NIL) ((EQ...


Искать еще темы с ответами

Или воспользуйтесь поиском по форуму:
4
Ответ Создать тему
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin
Copyright ©2000 - 2024, CyberForum.ru