Форум программистов, компьютерный форум, киберфорум
Lisp
Войти
Регистрация
Восстановить пароль
Карта форума Темы раздела Блоги Сообщество Поиск Заказать работу  
 
Рейтинг 4.55/11: Рейтинг темы: голосов - 11, средняя оценка - 4.55
806 / 533 / 158
Регистрация: 27.01.2015
Сообщений: 3,017
Записей в блоге: 1
1

Преобразовать список во множество

27.02.2016, 17:54. Показов 2112. Ответов 11
Метки нет (Все метки)

Author24 — интернет-сервис помощи студентам
Добрый вечер, можете пожалуйста решить такое задание?
Определить функцию, которая получает на вход одноуровневый список и преобразует его в множество (удаляет все повторяющиеся элементы).
0
Programming
Эксперт
94731 / 64177 / 26122
Регистрация: 12.04.2006
Сообщений: 116,782
27.02.2016, 17:54
Ответы с готовыми решениями:

Функция работы со списками: преобразовать список во множество
Всем доброго времени суток! Очень прошу подсказать реализацию на языке LISP следующего задания: ...

Определить функцию "Множество", преобразующую список в множество
Определить функцию МНОЖЕСТВО, преобразующую список в множество в ЛИСП,помогите пожалуйста?

Дан список (a b) (b c) (c d) .). Преобразовать его в ассоциативной список
Дан список ((a b) (b c) (c d) ...). Преобразовать его в ассоциативной список. В качестве ключей...

Вложение словаря в множество - почему нельзя? Альтернативы: список словарей или множество кортежей(списков)
Первое. И словарь, и множество хранят данные на основе хэш-таблиц, как я понял. Не могу понять...

11
1017 / 963 / 151
Регистрация: 10.08.2015
Сообщений: 5,160
27.02.2016, 18:07 2
Цитата Сообщение от Ferrari F1 Посмотреть сообщение
можете пожалуйста решить такое задание?
А что мешает найти его самому через поиск?
0
43 / 15 / 2
Регистрация: 27.02.2016
Сообщений: 36
27.02.2016, 18:55 3
Я бы так написал. Получается новый список без повторяющихся элементов.

Lisp
1
2
3
4
5
(defun преобразовать_список (список)
        (let ((новый_список nil))
            (dolist (элемент список)
                 (setf новый_список (pushnew элемент новый_список)))
         новый_список))
Но я лисп 3 недели назад изучать начал, так что не обессудь.
0
4699 / 4394 / 380
Регистрация: 12.05.2012
Сообщений: 3,096
27.02.2016, 19:34 4
Lisp
1
2
3
4
5
6
(defun -remove-duplicates (w &aux (a (car w)) (d (cdr w)))
  (when w (if (member a d) (-remove-duplicates d)
              (cons a (-remove-duplicates d)))))
 
> (-remove-duplicates '(a a 1 1))
(A 1)
2
Модератор
Эксперт функциональных языков программированияЭксперт Python
37291 / 20725 / 4272
Регистрация: 12.02.2012
Сообщений: 34,111
Записей в блоге: 14
27.02.2016, 20:04 5
Lisp
1
2
3
4
5
6
7
8
9
10
(defun make-set (lst &optional (r nil))
  (cond ((null lst) r)
        ((member (car lst) r) (make-set (cdr lst) r))
        (t (make-set (cdr lst) (cons (car lst) r)))))
 
==> make-set
 
(make-set '(a b c c c a a b))
 
==> (c b a)
2
4527 / 3521 / 358
Регистрация: 12.03.2013
Сообщений: 6,038
27.02.2016, 20:08 6
Цитата Сообщение от 4_d4 Посмотреть сообщение
(setf новый_список (pushnew элемент новый_список))
setf лишний. Макрос pushnew сам выполняет присваивание — для этого он, собственно, говоря, и нужен. При этом он возвращает значение — список, полученный после присвоения, и вы его второй раз присваиваете.

Есть и функция adjoin, которая для данного списка и объекта добавляет объект в список, если его там нет. Как пишет CLHS, (pushnew item place), грубо говоря, эквивалентно (setf place (adjoin item place)). То есть pushnew относится к adjoin как push относится к cons.
3
84 / 83 / 8
Регистрация: 31.03.2015
Сообщений: 447
27.02.2016, 20:43 7
Помоему есть встроенное решение
Lisp
1
2
(PRINT (REMOVE-DUPLICATES '(1 2 3 4 32 4 3 3 3 3 ф ф ф ф в в в в)))
* (1 2 32 4 3 Ф В)
Добавлено через 2 минуты
Туповато віглядит почитайте о коллекциях http://lisper.ru/pcl/collections
Lisp
1
2
3
4
(DEFUN REMOVE-DUPLCATES-AGAIN (LST)
       (REMOVE-DUPLICATES LST))
 
(PRINT (REMOVE-DUPLCATES-AGAIN '(1 1 1 1 1 2 2 2 3 3 3 )))
1
4527 / 3521 / 358
Регистрация: 12.03.2013
Сообщений: 6,038
27.02.2016, 20:45 8
Lisp
1
(setf (symbol-function 'remove-duplicates-again) (symbol-functions 'remove-duplicates))
1
Модератор
Эксперт функциональных языков программированияЭксперт Python
37291 / 20725 / 4272
Регистрация: 12.02.2012
Сообщений: 34,111
Записей в блоге: 14
27.02.2016, 21:17 9
Vaderkos, в который раз вопрошаю: чему учат - писать программы или вызывать библиотечные?
0
84 / 83 / 8
Регистрация: 31.03.2015
Сообщений: 447
27.02.2016, 21:33 10
Catstail, Именно поэтому сейчас копаюсь в соурсцах sbcl в поисках этой функции
0
Модератор
Эксперт функциональных языков программированияЭксперт Python
37291 / 20725 / 4272
Регистрация: 12.02.2012
Сообщений: 34,111
Записей в блоге: 14
27.02.2016, 21:41 11
Vaderkos, так ее нетрудно и самому реализовать...
0
84 / 83 / 8
Регистрация: 31.03.2015
Сообщений: 447
27.02.2016, 22:46 12
Catstail, Согласен, просто интересн как там было сделано)
0
27.02.2016, 22:46
IT_Exp
Эксперт
87844 / 49110 / 22898
Регистрация: 17.06.2006
Сообщений: 92,604
27.02.2016, 22:46
Помогаю со студенческими работами здесь

Преобразовать множество
Доброе время суток! Делаю пример по алгебре множеств. Не могу преобразовать данное выражение....

Список: Преобразовать список так, чтобы сначала шли нечетные элементы, а потом четные
Преобразовать список таким образом, чтобы в первой его половине располагались элементы, стоявшие на...

Преобразовать формулу во множество дизъюнктов
Ребята, требуется преобразовать формулу во множество дизъюнктов. Заранее огромное спасибо за...

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


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

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