С Новым годом! Форум программистов, компьютерный форум, киберфорум
Haskell
Войти
Регистрация
Восстановить пароль
Блоги Сообщество Поиск Заказать работу  
 
Рейтинг 5.00/9: Рейтинг темы: голосов - 9, средняя оценка - 5.00
17 / 7 / 0
Регистрация: 20.08.2012
Сообщений: 51

Вставка в список и контейнерный тип для подмножества целых чисел

13.10.2012, 22:55. Показов 1921. Ответов 5
Метки нет (Все метки)

Студворк — интернет-сервис помощи студентам
Я решил объединить два вопроса из сабжа в одной теме.

1. Есть ли стандартные функции вставки элемента или подсписка в список? Что-то мне такие не попадались.

2. Я все время сталкиваюсь с ситуацией, когда некий параметр должен принадлежать какому-либо подмножеству целых чисел - натуральным, неотрицательным и т. д... Стоит ли создавать для таких подмножеств специальные типы, и передавать функции уже параметры этих типов? Или все же достаточно ограничиться проверочными условиями?
0
Programming
Эксперт
39485 / 9562 / 3019
Регистрация: 12.04.2006
Сообщений: 41,671
Блог
13.10.2012, 22:55
Ответы с готовыми решениями:

Дано множество целых чисел от 10 до 100. Найдите заданные подмножества
Помогите пожалуйста. Дано множество целых чисел от 10 до 100. Найдите подмножество А – целых чисел, кратных 5, В – чисел, кратных 6, С...

Написать шаблоны функций для для вычисления суммы произведений двух соседних чисел для трех целых чисел и в одномерном массиве целых чисел
Написать шаблоны функций для для вычисления суммы произведений двух соседних чисел для трех целых чисел и в одномерном массиве целых чисел:...

Как преобразовать двумерный список строк целых чисел в двумерный список просто целых чисел?
"Напишите программу, на вход которой подаётся прямоугольная матрица в виде последовательности строк, заканчивающихся строкой, содержащей...

5
Эксперт функциональных языков программированияЭксперт по математике/физике
4312 / 2104 / 431
Регистрация: 19.07.2009
Сообщений: 3,204
Записей в блоге: 24
13.10.2012, 23:08
Цитата Сообщение от flammberg Посмотреть сообщение
1. Есть ли стандартные функции вставки элемента или подсписка в список? Что-то мне такие не попадались.
Можешь подробнее описать, что как именно хочешь вставить элемент и куда?
Просто вставить элемент x на место номер n в списке list
Haskell
1
take n list ++ [x] ++ drop n list
Ещё есть insertBy (Data.List) и прочие функции подобного типа.

Цитата Сообщение от flammberg Посмотреть сообщение
2. Я все время сталкиваюсь с ситуацией, когда некий параметр должен принадлежать какому-либо подмножеству целых чисел - натуральным, неотрицательным и т. д... Стоит ли создавать для таких подмножеств специальные типы, и передавать функции уже параметры этих типов? Или все же достаточно ограничиться проверочными условиями?
По желанию. Если на подмножестве можно развернуть какую-то мегаудобную структуру, которую нельзя развернуть на исходном типе, то почему бы и не создать?

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

Всё, что написано выше, выражает только моё мнение. Так сказать, ИМХО.
1
17 / 7 / 0
Регистрация: 20.08.2012
Сообщений: 51
13.10.2012, 23:28  [ТС]
Цитата Сообщение от Mysterious Light Посмотреть сообщение
take n list ++ [x] ++ drop n list
Ну, об этом я уже догадался. Было бы неплохо иметь стандартную функцию вида ([a], Int) -> a -> [a], чтобы не писать каждый раз собственный велосипед.

insertBy - это несколько не то, в данном случае.

Цитата Сообщение от Mysterious Light Посмотреть сообщение
По желанию. Если на подмножестве можно развернуть какую-то мегаудобную структуру, которую нельзя развернуть на исходном типе, то почему бы и не создать?
Да нет, ничего подобного в моем случае не имеется. Просто я вижу в коде слишком много однообразных условий типа...

Haskell
1
| i < 0 = error "Something wrong!"
Цитата Сообщение от Mysterious Light Посмотреть сообщение
Хотя здесь мне больше нравиться вариант функций с контрактами: пишем функцию, ничего не проверяем, в описании капсом описываем все ограничения.
Мне этот вариант не нравится.
0
Эксперт С++
 Аватар для Nameless One
5828 / 3479 / 358
Регистрация: 08.02.2010
Сообщений: 7,448
14.10.2012, 04:56
Цитата Сообщение от flammberg Посмотреть сообщение
Есть ли стандартные функции вставки элемента или подсписка в список?
Есть insert и insertBy из Data.List, но, как я понимаю, тебя интересует именно вставка в конкретную позицию списка. Придется писать свою функцию insertAt.

Цитата Сообщение от flammberg Посмотреть сообщение
Я все время сталкиваюсь с ситуацией, когда некий параметр должен принадлежать какому-либо подмножеству целых чисел - натуральным, неотрицательным и т. д... Стоит ли создавать для таких подмножеств специальные типы, и передавать функции уже параметры этих типов? Или все же достаточно ограничиться проверочными условиями?
Тут, ИМХО, дело вкуса. Я бы решал подобную проблему двумя способами (помимо стандартных проверок):
  1. создал бы абстрактный тип данных, где в функциях-конструкторах при создании проверялось бы необходимое условие;
  2. обернул значения, требующие проверки, в один из экземпляров MonadPlus:
    Haskell
    1
    2
    3
    4
    5
    6
    
    import Control.Monad
     
    safeFact :: (MonadPlus m, Integral i) => i -> m i
    safeFact n = do
      guard (n >= 0)
      return $ product [1..n]
    По сути, это решение аналогично решению с error, только при неудаче не выбрасывается исключение:

    Haskell
    1
    2
    3
    4
    5
    
    > maybe (putStrLn "Something went wrong") print (safeFact 5)
    120
    > maybe (putStrLn "Something went wrong") print (safeFact (negate 5))
    Something went wrong
    >

Кстати, беззнаковые целые числа уже существуют, см. модуль Data.Word
1
Супер-модератор
Эксперт функциональных языков программированияЭксперт Python
 Аватар для Catstail
38167 / 21102 / 4307
Регистрация: 12.02.2012
Сообщений: 34,690
Записей в блоге: 14
14.10.2012, 09:54
Цитата Сообщение от flammberg Посмотреть сообщение
чтобы не писать каждый раз собственный велосипед.
- если так раздражают велосипеды, можно их собрать в модуль/модули и подключать по мере необходимости. В этом случае разницу между библиотечной функцией и собственным велосипедом ( в любом языке программирования) можно сделать меньше любого наперед заданного эпсилон
1
17 / 7 / 0
Регистрация: 20.08.2012
Сообщений: 51
14.10.2012, 12:03  [ТС]
Цитата Сообщение от Nameless One Посмотреть сообщение
Есть insert и insertBy из Data.List, но, как я понимаю, тебя интересует именно вставка в конкретную позицию списка. Придется писать свою функцию insertAt.
То есть, стандартных функция вставки, удаления и взятия подсписка по индексам в Хаскеле не существует? Странно, но придется принять за данность.

Цитата Сообщение от Nameless One Посмотреть сообщение
Кстати, беззнаковые целые числа уже существуют, см. модуль Data.Word
Вот это то, что надо. Спасибо большое.
0
Надоела реклама? Зарегистрируйтесь и она исчезнет полностью.
inter-admin
Эксперт
29715 / 6470 / 2152
Регистрация: 06.03.2009
Сообщений: 28,500
Блог
14.10.2012, 12:03
Помогаю со студенческими работами здесь

Написать программу, которая создает файл целых чисел, а затем формирует список целых чисел файла
Написать программу, которая создает файл целых чисел, а затем формирует список целых чисел файла. Создать список чисел, являющихся суммой...

Дан список чисел, составить все подмножества этого списка
Дан список чисел, составить все подмножества этого списка. Нашел код среди тем, но когда запускаю, выходит ошибка. Кто знает в чем дело? ...

Разделить исходный список из целых чисел на два списка: список чисел кратных А и список чисел не кратных А
Создайте приложение, которое разделит исходный список из целых чисел на два списка: список чисел кратных А и список чисел некратных А.

Ввести с клавиатуры список целых чисел. Найти сумму чисел, которые входят в список по одному разу
Прошу помочь с заданием по Турбо Прологу. Мне кажется, что для людей которые понимают и разбираются в Прологе это задание будет не...

Односвязный список для хранения целых чисел
Привет ребята! Как реализовать односвязный список для хранения целых чисел. Может посоветуете какую литературу!


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

Или воспользуйтесь поиском по форуму:
6
Ответ Создать тему
Новые блоги и статьи
WordPad для Windows 11
Jel 10.01.2026
WordPad для Windows 11 — это приложение, которое восстанавливает классический текстовый редактор WordPad в операционной системе Windows 11. После того как Microsoft исключила WordPad из. . .
Classic Notepad for Windows 11
Jel 10.01.2026
Old Classic Notepad for Windows 11 Приложение для Windows 11, позволяющее пользователям вернуть классическую версию текстового редактора «Блокнот» из Windows 10. Программа предоставляет более. . .
Почему дизайн решает?
Neotwalker 09.01.2026
В современном мире, где конкуренция за внимание потребителя достигла пика, дизайн становится мощным инструментом для успеха бренда. Это не просто красивый внешний вид продукта или сайта — это. . .
Модель микоризы: классовый агентный подход 3
anaschu 06.01.2026
aa0a7f55b50dd51c5ec569d2d10c54f6/ O1rJuneU_ls https:/ / vkvideo. ru/ video-115721503_456239114
Owen Logic: О недопустимости использования связки «аналоговый ПИД» + RegKZR
ФедосеевПавел 06.01.2026
Owen Logic: О недопустимости использования связки «аналоговый ПИД» + RegKZR ВВЕДЕНИЕ Введу сокращения: аналоговый ПИД — ПИД регулятор с управляющим выходом в виде числа в диапазоне от 0% до. . .
Модель микоризы: классовый агентный подход 2
anaschu 06.01.2026
репозиторий https:/ / github. com/ shumilovas/ fungi ветка по-частям. коммит Create переделка под биомассу. txt вход sc, но sm считается внутри мицелия. кстати, обьем тоже должен там считаться. . . .
Расчёт токов в цепи постоянного тока
igorrr37 05.01.2026
/ * Дана цепь постоянного тока с сопротивлениями и напряжениями. Надо найти токи в ветвях. Программа составляет систему уравнений по 1 и 2 законам Кирхгофа и решает её. Последовательность действий:. . .
Новый CodeBlocs. Версия 25.03
palva 04.01.2026
Оказывается, недавно вышла новая версия CodeBlocks за номером 25. 03. Когда-то давно я возился с только что вышедшей тогда версией 20. 03. С тех пор я давно снёс всё с компьютера и забыл. Теперь. . .
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin
Copyright ©2000 - 2026, CyberForum.ru