Разрабатываю свой язык, потому что хочу и свободное время позволяет. Добрый день.
Помогите пожалуйста подобрать конструкцию для диапазонов значений. Диапазон может быть как открытый, так и закрытый, и с обоих концов. Дополнительно он хранит шаг, который по_умолчанию равен 1. Если нижняя граница не указана, то она равна 0.
Здравствуйте, T4r4sB, Вы писали:
TB>Посмотри, как сделано в Го или Расте TB>1 .. 2 для полуоткрытого, 1 ..= 2 для закрытого
Посмотрел.
В расте нет возможности использовать открытую нижнюю границу. И нет шага.
Кроме того только целые числа, как я понял. Я хочу сделать чтобы флоаты можно было тоже использовать.
В го не нашёл диапазоны. Только есть слайсы, и они вроде всегда с закрытым верхним пределом.
s := myset[0:4]
Не понравилась документация у обоих языков (у го даже нет поиска). Как же всё хорошо задокументировано у php, в отличии от них.
Здравствуйте, Sm0ke, Вы писали:
S>Помогите пожалуйста подобрать конструкцию для диапазонов значений. Диапазон может быть как открытый, так и закрытый, и с обоих концов. Дополнительно он хранит шаг, который по_умолчанию равен 1. Если нижняя граница не указана, то она равна 0.
S>С удовольствием рассмотрю ваши варианты.
я бы остановился на варианте питона [a:b:s] -> [a .. b)
куча различных вариантов не всегда плюс.
Здравствуйте, Sm0ke, Вы писали:
S>Диапазон может быть как открытый, так и закрытый, и с обоих концов. Дополнительно он хранит шаг, который по_умолчанию равен 1.
А зачем тут шаг? На первый взгляд, он тут как козе баян. Ты диапазон с последовательностью не путаешь?
S>Если нижняя граница не указана, то она равна 0.
А почему именно 0, а не -∞, например?
S>С удовольствием рассмотрю ваши варианты.
А если так: Range(8-, 2+)? "+" означает закрытый, "-" открытый.
Еcли хочется покороче, можно типа _R(8-, 2+)
Чтобы сразу указать его и итерировать в цикле. Или можно взять слайс от массива, тоже с шагом.
Я думал над тем, чтобы шаг не хранить, если он не указан, но решил, что лучше всегда хранить, чтобы можно было потом в программе его проверять без лишних костылей типа проверки наличия поля.
S>>Если нижняя граница не указана, то она равна 0.
W>А почему именно 0, а не -∞, например?
Можно явно указать и минус бесконечность, но итерировать тогда нельзя будет. Какой тогда прок использовать минус бесконечность по умолчанию?
Ещё я думаю, что можно будет явно указать значение null (не задано).
S>>С удовольствием рассмотрю ваши варианты.
W>А если так: Range(8-, 2+)? "+" означает закрытый, "-" открытый. W>Еcли хочется покороче, можно типа _R(8-, 2+)
Здравствуйте, wildwind, Вы писали:
W>Здравствуйте, Sm0ke, Вы писали:
W>>>А зачем тут шаг? S>>Чтобы сразу указать его и итерировать в цикле. Или можно взять слайс от массива, тоже с шагом.
W>Так это атрибут цикла или слайса, а не диапазона как такового.
Поинт в том, что диапазон можно присвоить переменной и подставить потом её для слайса, или в качестве параметра цикла.
Просто не хочу делать два вида диапазона: с шагом и без.
S>>Можно явно указать и минус бесконечность, но итерировать тогда нельзя будет.
W>Отчего же нельзя? В сторону бесконечности — можно.
Начальная граница должна быть конечна. Последняя — любая.
W>Кроме того, диапазоны не только для итерирования используются.
Для чего ещё?
Конечно можно с помощью функции проверить лежит ли число в этом диапазоне и шаг тут не нужен.
Если всёже заводить два рэнджа и с шагом и без. Потом туда-сюда его конвертировать придётся.
$range ( from = 0, to )
$range_step : $range ( step )
r0 = $range{%to:10} -- [0, 10)
r2 = $range_step[4 8 2] -- [4, 8) step 2
r1 = r2.$range #clone # -- берём базовый класс который без шага
r3 = $range_step{$range:r1 %step:1} -- тут не надо писать (r1 #clone #) оно само
#contains $range* range value ( ret = /* вычисления */ ) -- функция contains перегружена для типа range и его потомков, т.е. может принимать и range_step
r2 #contains 5 #write_ln # -- true
* В этом примере открытость/закрытость границ не хранится. Т.е: [from, to)
** минус мину -- line comment
Здравствуйте, Ватакуси, Вы писали:
NB>>я бы остановился на варианте питона [a:b:s] -> [a .. b) NB>>куча различных вариантов не всегда плюс.
В>+ pandas.Dataframe или numpy.ndarray операторы