Форум программистов, компьютерный форум, киберфорум
Haskell
Войти
Регистрация
Восстановить пароль
Блоги Сообщество Поиск Заказать работу  
 
Рейтинг 4.84/50: Рейтинг темы: голосов - 50, средняя оценка - 4.84
0 / 0 / 0
Регистрация: 05.03.2011
Сообщений: 30

Список: реализовать объединение, пересечение и разность списков

24.04.2012, 14:42. Показов 10106. Ответов 10
Метки нет (Все метки)

Студворк — интернет-сервис помощи студентам
Писали на прологе, и сегодня на паре заставили писать на хаскеле. Объединение пересечение и разность списков. А я вообще не имею понятия как и что делать. Помогите хотя бы с одним каким нибудь алгоритмом. Заранее спасибо!!!
0
cpp_developer
Эксперт
20123 / 5690 / 1417
Регистрация: 09.04.2010
Сообщений: 22,546
Блог
24.04.2012, 14:42
Ответы с готовыми решениями:

Реализовать объединение, пересечение и разность списков
Реализовать объединение,пересечение и разность списков(2 случая: 1. линейный список, 2. нелинейный список(т е список с подсписками))

Объединение, пересечение и разность списков в один
Добрый день! Подскажите ,пожалуйста, очень нужно!!!!! возможно ли реализовать следующую работу со списками. Я ввожу два списка(причем...

Реализовать операции над множествами: объединение, пересечение, разность
Модуль. Разработать способ представления множеств, содержащих более 255 элементов. Реализовать операции над множествами: объединение,...

10
313 / 268 / 5
Регистрация: 03.04.2011
Сообщений: 456
24.04.2012, 16:35
Объединение
Haskell
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
-- | The 'union' function returns the list union of the two lists.
-- For example,
--
-- > "dog" `union` "cow" == "dogcw"
--
-- Duplicates, and elements of the first list, are removed from the
-- the second list, but if the first list contains duplicates, so will
-- the result.
-- It is a special case of 'unionBy', which allows the programmer to supply
-- their own equality test.
 
union                   :: (Eq a) => [a] -> [a] -> [a]
union                   = unionBy (==)
 
-- | The 'unionBy' function is the non-overloaded version of 'union'.
unionBy                 :: (a -> a -> Bool) -> [a] -> [a] -> [a]
unionBy eq xs ys        =  xs ++ foldl (flip (deleteBy eq)) (nubBy eq ys) xs
Пересечение
Haskell
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
-- | The 'intersect' function takes the list intersection of two lists.
-- For example,
--
-- > [1,2,3,4] `intersect` [2,4,6,8] == [2,4]
--
-- If the first list contains duplicates, so will the result.
--
-- > [1,2,2,3,4] `intersect` [6,4,4,2] == [2,2,4]
--
-- It is a special case of 'intersectBy', which allows the programmer to
-- supply their own equality test.
 
intersect               :: (Eq a) => [a] -> [a] -> [a]
intersect               =  intersectBy (==)
 
-- | The 'intersectBy' function is the non-overloaded version of 'intersect'.
intersectBy             :: (a -> a -> Bool) -> [a] -> [a] -> [a]
intersectBy _  [] _     =  []
intersectBy _  _  []    =  []
intersectBy eq xs ys    =  [x | x <- xs, any (eq x) ys]
Разность
Haskell
1
2
3
4
5
6
7
8
9
10
11
-- | The '\\' function is list difference ((non-associative).
-- In the result of @xs@ '\\' @ys@, the first occurrence of each element of
-- @ys@ in turn (if any) has been removed from @xs@.  Thus
--
-- > (xs ++ ys) \\ xs == ys.
--
-- It is a special case of 'deleteFirstsBy', which allows the programmer
-- to supply their own equality test.
 
(\\)                    :: (Eq a) => [a] -> [a] -> [a]
(\\)                    =  foldl (flip delete)
Спасибо http://hackage.haskell.org...
1
Эксперт С++
 Аватар для Nameless One
5828 / 3479 / 358
Регистрация: 08.02.2010
Сообщений: 7,448
24.04.2012, 17:22
Цитата Сообщение от Jek77 Посмотреть сообщение
Писали на прологе, и сегодня на паре заставили писать на хаскеле
«Вот так всегда: ходишь, ходишь в школу, а потом — бац! — и вторая смена» ©

Цитата Сообщение от Jek77 Посмотреть сообщение
Помогите хотя бы с одним каким нибудь алгоритмом
помогу с объединением:
  1. Пусть результирующий список равен пустому списку (это если у нас первоначальные списки могут содержать повторяющиеся элементы; в противном случае результирующий список приравниваем к первому списку и переходим сразу к шагу 3)
  2. Пока в первом списке остались элементы, выполнять:
    • если очередной элемент списка уже содержится в результирующем списке, то пропустить его
    • в противном случае добавить его к результирующему списку
  3. Повторить шаг 2 со вторым списком

или так:
  1. «Сцепить» переданные списки (алгоритм очевиден)
  2. Удалить из полученного списка повторяющиеся элементы (алгоритм опять-таки очевиден)

И да, непонятно, работа идет со списками как последовательностями или со списками как множествами? Набор операций намекает на последний вариант.
1
4 / 4 / 1
Регистрация: 14.11.2010
Сообщений: 37
25.04.2012, 10:22
отличное разьяснение но как бы первый раз видишь этот язык
не плохо было бы увидеть именно сами алгоритмы а не обьяснения
0
Эксперт С++
 Аватар для Nameless One
5828 / 3479 / 358
Регистрация: 08.02.2010
Сообщений: 7,448
25.04.2012, 10:24
shad0w, так это и есть алгоритм (вернее, одна из форм его описания). Если тебя интересует сам код, то bokunopico уже привел нужные ссылки
0
4 / 4 / 1
Регистрация: 14.11.2010
Сообщений: 37
25.04.2012, 10:52
Цитата Сообщение от Nameless One Посмотреть сообщение
shad0w, так это и есть алгоритм (вернее, одна из форм его описания). Если тебя интересует сам код, то bokunopico, уже привел нужные ссылки
да сылки хорошие но совершенно не понятные хотелось во все разобраться именно на самом коде
могли бы вы Nameless One написать коментарий к коду?

Добавлено через 15 минут
обьядинение по идеи выглядит вот так

Haskell
1
2
3
4
union  []ys = ys
union  (x|xs) ys
    |x'elem'ys=union xs ys
    |otherwise = x(union xs ys)
если верно можно от кого нибудь увидеть коментарий?
0
Эксперт С++
 Аватар для Nameless One
5828 / 3479 / 358
Регистрация: 08.02.2010
Сообщений: 7,448
25.04.2012, 11:53
Цитата Сообщение от shad0w Посмотреть сообщение
обьядинение по идеи выглядит вот так
[...]
если верно можно от кого нибудь увидеть коментарий?
это похоже на код на Haskell, но это не Haskell

Цитата Сообщение от shad0w Посмотреть сообщение
да сылки хорошие но совершенно не понятные хотелось во все разобраться именно на самом коде
могли бы вы Nameless One написать коментарий к коду?
если хочешь разобраться, то пробуй писать сам. Если я тебе напишу, то разобраться тебе вряд ли получиться
0
313 / 268 / 5
Регистрация: 03.04.2011
Сообщений: 456
25.04.2012, 15:03

Не по теме:

Цитата Сообщение от Nameless One Посмотреть сообщение
то bokunopico уже привел нужные ссылки
Мои няшные ссылочки зашкварили.



Добавлено через 11 минут
Спасибо!
0
25.04.2012, 16:33

Не по теме:

bokunopico, а куда делась жесть с кучей строк в твоём первом посте в этой теме?

0
25.04.2012, 16:38

Не по теме:

9Символов, их похитили инопланетяне

0
Супер-модератор
Эксперт функциональных языков программированияЭксперт Python
 Аватар для Catstail
38173 / 21108 / 4307
Регистрация: 12.02.2012
Сообщений: 34,707
Записей в блоге: 14
05.08.2012, 21:12
Вот прямолинейное (и не слишком оптимальное) решение. Оно отличается от приведенных выше тем, что операции (объединение и пересечение) трактуются в теоретико-множественном смысле: списки-множества не содержат повторяющихся элементов:

Haskell
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
-- Содержится ли первый аргумент в списке, заданным вторым
 
memb :: (Eq a) => a -> [a] -> Bool
memb x [] = False
memb x (y:ys) = if (y == x) then True else memb x ys
 
-- Построить множество элементов (удалить повторяющиеся)
 
setof :: (Eq a) => [a] -> [a]
setof [] = []
setof (x:xs) = if memb x (setof xs) then setof xs else x:(setof xs)
 
-- Объединить два множества
 
unite :: (Eq a) => [a] -> [a] -> [a]
unite x y = setof (x++y)
 
-- Пересечение двух множеств
 
inter :: (Eq a) => [a] -> [a] -> [a]
inter x [] = []
inter [] y = []
inter (x:xs) y = setof (if memb x y then x:(inter xs y) else (inter xs y))
 
Main> inter [1,1,1,2,2] [2,3,3]
[2]
Main> unite "asdf" "qazwsx"
"dfqazwsx"
0
Надоела реклама? Зарегистрируйтесь и она исчезнет полностью.
raxper
Эксперт
30234 / 6612 / 1498
Регистрация: 28.12.2010
Сообщений: 21,154
Блог
05.08.2012, 21:12
Помогаю со студенческими работами здесь

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

Реализовать классические операции над множествами - объединение, пересечение и симметричная разность
Создать параметризованный тип данных - множество. Этот тип предназначен для хранения множества элементов и выполнения операций над ними....

Найти пересечение, объединение, разность, симметрическую разность множеств
Задание: Написать программу, которая проделывается операции над множествами (пересечение, объединение, разность, симметрическую разность) ...

Объединение, пересечение, разность, симметрическая разность множеств
Составить множество А из букв фамилии, множество В – из букв имени, множество С – из букв отчества (повторяющиеся элементы удалить). Найти:...

Пересечение, объединение, разность, симметрическую разность
Начал изучать С++ не так давно ...и вот возникла небольшая трудность Задание: Написать программу, которая проделывается операции над...


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

Или воспользуйтесь поиском по форуму:
11
Ответ Создать тему
Новые блоги и статьи
Символьное дифференцирование
igorrr37 13.02.2026
/ * Логарифм записывается как: (x-2)log(x^2+2) - означает логарифм (x^2+2) по основанию (x-2). Унарный минус обозначается как ! */ #include <iostream> #include <stack> #include <cctype>. . .
Камера Toupcam IUA500KMA
Eddy_Em 12.02.2026
Т. к. у всяких "хикроботов" слишком уж мелкий пиксель, для подсмотра в ESPriF они вообще плохо годятся: уже 14 величину можно рассмотреть еле-еле лишь на экспозициях под 3 секунды (а то и больше),. . .
И ясному Солнцу
zbw 12.02.2026
И ясному Солнцу, и светлой Луне. В мире покоя нет и люди не могут жить в тишине. А жить им немного лет.
«Знание-Сила»
zbw 12.02.2026
«Знание-Сила» «Время-Деньги» «Деньги -Пуля»
SDL3 для Web (WebAssembly): Подключение Box2D v3, физика и отрисовка коллайдеров
8Observer8 12.02.2026
Содержание блога Box2D - это библиотека для 2D физики для анимаций и игр. С её помощью можно определять были ли коллизии между конкретными объектами и вызывать обработчики событий столкновения. . . .
SDL3 для Web (WebAssembly): Загрузка PNG с прозрачным фоном с помощью SDL_LoadPNG (без SDL3_image)
8Observer8 11.02.2026
Содержание блога Библиотека SDL3 содержит встроенные инструменты для базовой работы с изображениями - без использования библиотеки SDL3_image. Пошагово создадим проект для загрузки изображения. . .
SDL3 для Web (WebAssembly): Загрузка PNG с прозрачным фоном с помощью SDL3_image
8Observer8 10.02.2026
Содержание блога Библиотека SDL3_image содержит инструменты для расширенной работы с изображениями. Пошагово создадим проект для загрузки изображения формата PNG с альфа-каналом (с прозрачным. . .
Установка Qt-версии Lazarus IDE в Debian Trixie Xfce
volvo 10.02.2026
В общем, достали меня глюки IDE Лазаруса, собранной с использованием набора виджетов Gtk2 (конкретно: если набирать текст в редакторе и вызвать подсказку через Ctrl+Space, то после закрытия окошка. . .
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin
Copyright ©2000 - 2026, CyberForum.ru