Форум программистов, компьютерный форум, киберфорум
Haskell
Войти
Регистрация
Восстановить пароль
Карта форума Темы раздела Блоги Сообщество Поиск Заказать работу  
 
Рейтинг 4.56/25: Рейтинг темы: голосов - 25, средняя оценка - 4.56
0 / 0 / 0
Регистрация: 23.12.2012
Сообщений: 5
1

Массивы в Haskell

23.12.2012, 21:52. Показов 4430. Ответов 11
Метки нет (Все метки)

Author24 — интернет-сервис помощи студентам
У меня возникла такая проблемма. Нужно на Haskell, написать программу, которая находит нужный массив и удаляет его. Прошу помочь. Зараннее спасибо.
0
Лучшие ответы (1)
Programming
Эксперт
94731 / 64177 / 26122
Регистрация: 12.04.2006
Сообщений: 116,782
23.12.2012, 21:52
Ответы с готовыми решениями:

Место ФП и Haskell в компьютерной индустрии (Для чего он нужен, этот Haskell?)
"У нас" ? А где преподавание этой экзотики на высоте? Добавлено через 2 минуты А где такие...

HASKELL
Добрый вечер, прошу помощи у знающих Haskell, не понимаю его, не для меня видимо, но сдать...

Conduit Haskell
В общем занимаюсь реализацией AES. Написал код для 128-битного шифра. Пришла идея реализовать...

Баловство с Haskell
Осилил главу книги, и решил написать свою программку. После крика GHCI о том, что он не умеет...

11
78 / 64 / 5
Регистрация: 25.03.2012
Сообщений: 71
23.12.2012, 23:42 2
Можно более развернуто - что на входе, что на выходе, с примерами.
0
0 / 0 / 0
Регистрация: 23.12.2012
Сообщений: 5
24.12.2012, 07:32  [ТС] 3
На входе массив который состоит из подмассивов. В этом массиве надо найти заданый подмассив, если он есть удалить его и сформировать массив без удаленного подмассива. Если нет заданного подмассива, выдать существующий массив.
0
78 / 64 / 5
Регистрация: 25.03.2012
Сообщений: 71
24.12.2012, 13:40 4
Если ваш массив суть список и вам нужно удалить одно вхождение подсписка в списке - звучит так, как будто вам подойдет функция delete из модуля Data.List:
Haskell
1
2
*Main> [2,3,4] `delete` [[0,1], [2,3,4], [5]]
[[0,1],[5]]
Добавлено через 6 минут
как оно реализовано в стандартной библиотеке

Добавлено через 1 минуту
если подсписки не уникальны и вам нужно удалить все вхождения подсписка в список:
Haskell
1
delete x = filter (x /=)
0
Модератор
Эксперт функциональных языков программированияЭксперт Python
37291 / 20725 / 4272
Регистрация: 12.02.2012
Сообщений: 34,111
Записей в блоге: 14
24.12.2012, 19:33 5
Если ТС называет массивами списки Haskell, то вот простое решение:

Haskell
1
2
3
4
5
6
7
delSublist :: (Eq a) => [[a]] -> [a] -> [[a]]
delSublist [] _ = []
delSublist (x:xs) z | (x == z) = delSublist xs z
                    | otherwise = x : (delSublist xs z)
 
Main> delSublist [[1,2],[3,4],[5,6],[3,4],[7,8]] [3,4]
[[1,2],[5,6],[7,8]]
1
Эксперт функциональных языков программированияЭксперт по математике/физике
4300 / 2091 / 431
Регистрация: 19.07.2009
Сообщений: 3,163
Записей в блоге: 24
24.12.2012, 19:52 6
Я плохо знаю стандартные библиотеки, поэтому прошу просветить меня: если под массивами ТС подразумевает не списки, а собственно массивы, то как там будет delete выглядеть?
0
0 / 0 / 0
Регистрация: 23.12.2012
Сообщений: 5
24.12.2012, 21:56  [ТС] 7
Спасибо за ответы, но я несовсем разбрался в ваших кодах.
У меня такой массив n = array (1,3) [(1,s1),(2,s2),(3,s)], мне надо из этого массива удалить любой элемент. При этом его надо сразу найти в этом массиве и получить новый массив уже без этого элемента. Например: задано s2 надо определить в этом массиве где находится этот элемент и удалить его, и вернуть новый массив уже без этого элемента. А если вдруг этого элемента нет в массиве вернуть прежний массив.
0
78 / 64 / 5
Регистрация: 25.03.2012
Сообщений: 71
24.12.2012, 21:58 8
Цитата Сообщение от Mysterious Light Посмотреть сообщение
Я плохо знаю стандартные библиотеки, поэтому прошу просветить меня: если под массивами ТС подразумевает не списки, а собственно массивы, то как там будет delete выглядеть?
Думаю можно отобразить в список, уже из списка удалить обычным delete, а там пересчитать индексы и применить listArray.
0
Эксперт С++
5828 / 3479 / 358
Регистрация: 08.02.2010
Сообщений: 7,448
25.12.2012, 05:42 9
Лучший ответ Сообщение было отмечено как решение

Решение

Цитата Сообщение от Mysterious Light Посмотреть сообщение
если под массивами ТС подразумевает не списки, а собственно массивы, то как там будет delete выглядеть?
Если под массивами подразумеваются именно массивы, то я рекомендую использовать пакет vector, который считается "улучшенной" версией базового array (с некоторыми оговорками).

Вот решение для vector:

Haskell
1
2
3
4
import qualified Data.Vector as V
 
remove :: Eq a => a -> V.Vector a -> V.Vector a
remove toRemove = V.filter (/= toRemove)
Haskell
1
2
3
*Main> remove (V.fromList [1,2,3]) $ V.fromList [V.fromList [1,2], V.fromList [1,2,3], V.fromList [1]]
fromList [fromList [1,2],fromList [1]]
*Main>
Пакет array, насколько я знаю, не поддерживает удаление элементов, так что там без преобразования в список вряд ли получится обойтись.
3
0 / 0 / 0
Регистрация: 23.12.2012
Сообщений: 5
25.12.2012, 23:04  [ТС] 10
Цитата Сообщение от Smiht Посмотреть сообщение
Спасибо за ответы, но я несовсем разбрался в ваших кодах.
У меня такой массив n = array (1,3) [(1,s1),(2,s2),(3,s)], мне надо из этого массива удалить любой элемент. При этом его надо сразу найти в этом массиве и получить новый массив уже без этого элемента. Например: задано s2 надо определить в этом массиве где находится этот элемент и удалить его, и вернуть новый массив уже без этого элемента. А если вдруг этого элемента нет в массиве вернуть прежний массив.
Неужели никто не может помочь начинающему! Помогите, пожалуйста!
0
Эксперт С++
5828 / 3479 / 358
Регистрация: 08.02.2010
Сообщений: 7,448
26.12.2012, 02:32 11
Smiht, ну тебе уже calabi-yau и Catstail решения для списков написали, а преобразовать массив в список и обратно не так уж и сложно.

Haskell
1
2
3
4
5
6
7
8
import Data.Array
import Data.List
 
fromList :: (Ix i, Num i) => [e] -> Array i e
fromList l = listArray (1, genericLength l) l
 
remove :: (Ix i, Num i, Eq e) => e -> Array i e -> Array i e
remove it = fromList . filter (/= it) . elems
0
0 / 0 / 0
Регистрация: 23.12.2012
Сообщений: 5
26.12.2012, 20:46  [ТС] 12
Большое спасибо всем за помощь.
0
26.12.2012, 20:46
IT_Exp
Эксперт
87844 / 49110 / 22898
Регистрация: 17.06.2006
Сообщений: 92,604
26.12.2012, 20:46
Помогаю со студенческими работами здесь

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

Задачки по Haskell
Определить последовательность, в которой каждый элемент — список всех простых делителей...

Типы в Haskell
Здравствуйте. Помогите пожалуйста выполнить задания. в Хаскелле не разбираюсь. нужне сделать...

Selenium+haskell
Здравствуйте! Появилось свободное время. Решил узнать, подойдет ли хаскелл для автотестов. По...


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

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