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

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

06.11.2010, 08:24. Показов 3946. Ответов 8
Метки нет (Все метки)

Author24 — интернет-сервис помощи студентам
Опpеделите на языке ЛИСП и проверьте работу функции, пpеобpазующей список в множество.
Например, для списка (a b a a c c) функция должна вернуть (a b c).

Если можно ,то пожалуйста с комментариями.
P.S. диалект MuLisp
0
Programming
Эксперт
94731 / 64177 / 26122
Регистрация: 12.04.2006
Сообщений: 116,782
06.11.2010, 08:24
Ответы с готовыми решениями:

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

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

Преобразовать список во множество
Добрый вечер, можете пожалуйста решить такое задание?

G - открытое множество в топологическом векторном пространстве Х. Тогда для любого множество А из Х множество A+G - открыто
G - открытое множество в топологическом векторном пространстве Х. Тогда для любого множество А из Х...

8
Эксперт С++
5828 / 3479 / 358
Регистрация: 08.02.2010
Сообщений: 7,448
06.11.2010, 09:59 2
Lisp
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
;;; Представим множество через список
;;; множество будет упорядоченно по возрастанию
;;; для упрощения операции добавления
(defun add-to-set (item set)
    (if (null set)
      (cons item nil)
      (let ((c (car set)))
        (cond ((< item c)
           (cons item set))
          ((= item c)
           set)
          (t
           (cons c
             (add-to-set item (cdr set))))))))
 
;;; Функция list->set будет использовать вышеописанную
;;; функцию add-to-set
(defun list->set (list)
  (labels ((iter (lst set)
         (if (null lst)
         set
         (iter (cdr lst)
               (add-to-set (car lst)
                   set)))))
    (iter list nil)))
 
CL-USER> (list->set '(1 34 -3 8 -3 1 1 32 1 9 8 7 5 4 5))
 
(-3 1 4 5 7 8 9 32 34)
CL-USER>
Добавлено через 4 минуты
PS. Когда я писал "множество будет упорядочено по возрастанию", я имел в виду, что элементы будут добавляться в множество так, чтобы получившееся множество было упорядочено
1
32 / 7 / 1
Регистрация: 07.06.2010
Сообщений: 75
06.11.2010, 10:08  [ТС] 3
Спасибо огромное, я только начал изучать Лисп.
Подскажите ,что я делаю не так.
Сохранил ваш код как lab2.lsp
Потом перенес на mulisp.com и появилась ошибка.
Посмотрите пожалуйста , что не так делаю.
Миниатюры
Пpеобpазовать список во множество  
0
Эксперт С++
5828 / 3479 / 358
Регистрация: 08.02.2010
Сообщений: 7,448
06.11.2010, 10:21 4
Дело в том, что эту программу я писал на Common Lisp (а muLisp я и в глаза не видел).
Судя по сообщению, в muLisp макрос labels - неопределен. Тогда нужно сделать как в одном из следующих вариантов:
  1. Заменить макрос labels на соответствующую конструкцию muLisp, которая объявляет локальные функции, которые могут ссылаться на самих себя;
  2. объявить глобальную функцию iter;
  3. переписать функцию list->set в виде обычной, а не хвостовой рекурсии.

Попробуй с таким вариантом list->set:
Lisp
1
2
3
4
5
(defun list->set (list)
  (if (null list)
      nil
      (add-to-set (car list)
          (list->set (cdr list)))))
1
32 / 7 / 1
Регистрация: 07.06.2010
Сообщений: 75
15.11.2010, 19:12  [ТС] 5
Вот код программы , но не могу прокомпилировать.
Lisp
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
(DEFUN MEMBER (X L)
    (COND
        ((ATOM L) NIL)
        ((EQUAL X (CAR L)) T)
        (T (MEMBER X (CDR L)))))
 
(DEFUN CREATE SET (L R)
    (COND 
        ((ATOM L) NIL)
        ((NOT (MEMBER (CAR L) R)) (CONS (CAR L) (CREATE (CDR L) (CONS (CAR L) R))))
        (T (CREATE (CDR L) R))))
 
 
(PRINT '_)
(SETQ L '(a b a a c c))
(PRINT (CREATESET L NIL))
Мжет кто-нибудь обЪяснить в чем дело и выложить скриншот работы программы
Миниатюры
Пpеобpазовать список во множество  
0
32 / 7 / 1
Регистрация: 07.06.2010
Сообщений: 75
15.11.2010, 19:13  [ТС] 6
Задание:
Опpеделите на языке ЛИСП и проверьте работу функции, пpеобpазующей список в множество.
Например, для списка (a b a a c c) функция должна вернуть (a b c).
0
Эксперт С++
5828 / 3479 / 358
Регистрация: 08.02.2010
Сообщений: 7,448
16.11.2010, 03:33 7
Цитата Сообщение от m9c1k Посмотреть сообщение
Мжет кто-нибудь обЪяснить в чем дело и выложить скриншот работы программы
У тебя объявлена функция (кстати, неправильно, т.к. идентификаторы не могут содержать пробелы) CREATE SET, а вызываешь ты CREATESET
1
32 / 7 / 1
Регистрация: 07.06.2010
Сообщений: 75
16.11.2010, 16:02  [ТС] 8
Исправил,все равно пишет ошибку.
Выложите пожалуйста скриншот работы программы.
Миниатюры
Пpеобpазовать список во множество  
0
Эксперт С++
5828 / 3479 / 358
Регистрация: 08.02.2010
Сообщений: 7,448
16.11.2010, 16:11 9
Скриншот? Пожалуйста:
Пpеобpазовать список во множество
1
16.11.2010, 16:11
IT_Exp
Эксперт
87844 / 49110 / 22898
Регистрация: 17.06.2006
Сообщений: 92,604
16.11.2010, 16:11
Помогаю со студенческими работами здесь

Пусть заданы множество А и множество В целых чисел, вывести напечатать все элементы множества В которые не входят в множество А.
Пусть заданы множество А и множество В целых чисел, вывести напечатать все элементы множества В...

Пусть заданы множество А и множество В целых чисел, вывести (напечатать) все элементы множества В которые не входят в множество А.
Решите Пожалуйста !!!

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

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


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

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