Я хочу написать функцию, которая добавляет элемент в список в правильном порядке, скажем 1
в [2, 3]
. Я новичок в haskell и вам нужна помощь в том, как это сделать, не используя Ord
.Добавление элемента в список
ответ
Нетрудно написать функцию, которая вставляет элемент в отсортированный список. Это будет выглядеть примерно так:
insert :: Ord a => a -> [a] -> [a]
insert x [] = [x]
insert x (y:ys)
| x > y = y : insert x ys
| otherwise = x : y : ys
Однако это вряд ли будет эффективным для вашего случая использования. Проблема со списком заключается в том, что вы в конечном итоге создаете новую копию большой части позвоночника многократно с такой проблемой вставки. Вы также должны сканировать линейно по всему списку, пока не найдете нужное место, которое не является самым быстрым способом поиска правильного местоположения.
Возможно, вам будет лучше использовать структуру данных, такую как таковая в Data.Set или Data.IntSet. Обычно это O (log n) для вставки, потому что они используют деревья или другие структуры данных, которые позволяют больше общего доступа, чем список, и быстро найти нужное место.
Просто, чтобы быть ясным, для больших n (размер списка/набора) O (log n) значительно лучше, чем O (n), что вы получите, если используете список, который вы предлагаете. – chrisdb
Должен ли я вернуть [a]? можете ли вы уточнить ответ? –
Ваш вопрос не имеет смысла, не используя Ord
.
Использование Ord, функция, которую вы хотите, insert
Функция вставки принимает элемент и список и вставляет элемент в список на последней позиции, где еще меньше или равен следующим элемент.
Перечисленный список приведен в порядке – Louie
@Louie, тогда следующее предложение в документации применяется: «В частности, если список сортируется перед вызовом, результат также будет отсортирован». –
- 1. Добавление элемента в список
- 2. Добавление элемента в список
- 3. Добавление элемента в связанный список
- 4. Добавление элемента в список словарей
- 5. Добавление элемента в список Box
- 6. Scala: Добавление элемента в список
- 7. Добавление элемента в связанный список?
- 8. добавление дополнительного элемента в список
- 9. Добавление элемента в отдельный список в Java
- 10. Добавление элемента в список в JavaScript
- 11. Добавление элемента в список в схеме
- 12. Добавление элемента в список в C++
- 13. Добавление элемента в список Generic в сессии
- 14. Добавление одного элемента в список в NavigableMap
- 15. Добавление элемента в список в прологе
- 16. Добавление элемента в список удаляет предыдущие элементы
- 17. Добавление вложенного элемента в «плоский» список
- 18. Многопоточный вопрос - добавление элемента в статический список
- 19. Добавление изображения в список изображений элемента управления
- 20. Добавление элемента в список через диалог
- 21. Добавление элемента в связанный список с привязкой
- 22. Добавление пользовательского элемента управления в список
- 23. Добавление элемента списка в другой список
- 24. добавление пользовательского элемента в список ngRepeat
- 25. с - Добавление нового элемента в список
- 26. Добавление элемента в список записи (OCaml)
- 27. Haskell добавление элемента в существующий список
- 28. Добавление элемента в список, с клавиатуры
- 29. Добавление элемента в список изменений все элементы
- 30. Добавление элемента в список из строк []
Как вы узнаете, находится ли список в «правильном порядке» без «Орда» – kennytm
Прежде чем вы начнете об этом, возможно, вам нужно быть более четким, чем вы хотите? Я полагаю, что 'louie 1 [2,3]' и 'louie 2 [1,3]' оба должны быть '[1,2,3]'. Но, например, что такое 'louie 1 [3,2]' или 'louie 2 [3,1]' или 'louie 6 [5,3,17,2]' должно быть? – applicative