Красивее - да. Но как я и сказал - для этого уже есть Arr. И он ещё и лучше, потому что можно явно указать тип элементов.
Я внимательно прочитал, все посты от всех.
Дело не в этом. Если делать через диапазонный тип - запись [1,2,3] легко в конструкторе диапазона превратить в то же самое что [1..3], без особых ударов по производительности.
И тогда if x in [...], к которому все больше привыкли, будет работать не менее эффективно чем в старой реализации. С единственной поправкой - теперь диапазон надо кешировать ручками. Хотя кеширование тоже не сложно реализовать, тупо скопипастить код от set of T.
Ну и собственно насчёт реализации диапазонов - предлагаю сортированное дерево единичных диапазонов.
То есть разворачивание [1,3..5,7] в:
o
/ \
(1..1) o
/ \
(3..5) (7..7)
При этом если добавить в диапазон значение [2] - элементы [1] и [3..5] склеятся и получится [1..5].
Институт математики, механики и компьютерных наук ЮФУ, 2005–2021