Re: Вопрос по приемлемости синтаксисической конструкции
От: komaz Россия  
Дата: 21.02.10 18:42
Оценка: 50 (6) +3
Здравствуйте, DSblizzard, Вы писали:

DS>Как бы вы отнеслись к конструкции

DS>
DS>for i in 0..10
DS>
в которой 0..10 означает от 0 (включительно) до 9 (включительно), а не от 0 до 10?

DS>На странице "syntax across languages" нет ни одного ЯП с таким правилом.
В Fantom'e 0..10 включает 10, а 0..<10 нет. Довольно удобно.
Re[2]: Вопрос по приемлемости синтаксисической конструкции
От: Lazy Cjow Rhrr Россия lj://_lcr_
Дата: 21.02.10 08:26
Оценка: 11 (2) +5 -1
deniok,

for i in [0..10)
... << RSDN@Home 1.2.0 alpha 4 rev. 1423>>
quicksort =: (($:@(<#[),(=#[),$:@(>#[)) ({~ ?@#)) ^: (1<#)
Re: Вопрос по приемлемости синтаксисической конструкции
От: deniok Россия  
Дата: 21.02.10 07:31
Оценка: 3 (1) +6
Здравствуйте, DSblizzard, Вы писали:

DS>Как бы вы отнеслись к конструкции

DS>
DS>for i in 0..10
DS>
в которой 0..10 означает от 0 (включительно) до 9 (включительно), а не от 0 до 10?

DS>На странице "syntax across languages" нет ни одного ЯП с таким правилом.

Плохо; асимметрию поведения на концах интервала стоит явно подчеркнуть.
Re[2]: Вопрос по приемлемости синтаксисической конструкции
От: DSblizzard Россия  
Дата: 22.02.10 00:48
Оценка: 69 (4)
Здравствуйте, VladD2, Вы писали:

VD>Это где?


здесь
Программировать сложно. Но не программировать еще сложнее.
Re: Вопрос по приемлемости синтаксисической конструкции
От: netch80 Украина http://netch80.dreamwidth.org/
Дата: 21.02.10 08:05
Оценка: 3 (3)
Здравствуйте, DSblizzard, Вы писали:

DS>Как бы вы отнеслись к конструкции

DS>
DS>for i in 0..10
DS>
в которой 0..10 означает от 0 (включительно) до 9 (включительно), а не от 0 до 10?

DS>На странице "syntax across languages" нет ни одного ЯП с таким правилом.

То ли страница слабовата, то ли идея поиска только в синтаксисе хромает. Потому что такой стиль систематически используется, например:

1. В Питоне:
* [x]range(0,10) — список от 0 до 9 включительно
* a[0:10] — если a — индексируемый объект, то его отрезок с 0 по 9-ю позицию включительно

поэтому, например, s == s[0:10] + s[10:20], и не надо всё время играться с плюс-минус единицей — арифметика позиций резко упрощается и получается меньше ошибок.

2. В C++ STL: x.begin() — итератор с указанием на первый элемент, а x.end() — на позицию за последним (хотя мне кажется, тут название неудачно: надо было назвать limit или stop, а не end), а в функциях, когда задаётся отрезок для работы — начальная позиция и предел, а не начальная и конечная. И опять-таки это исключает необходимость хода вперёд-назад по итераторам для указания другой части.

Кроме того, когда я писал библиотеку безопасной работы со строками на Си на фиксированных буферах (вместо стандартных кошмаров типа strncat), обнаружил, что лучше всего работать, используя два указателя: текущая позиция и предел. То есть, получая параметры — buf и bufsize, мы вычисляем limit = buf + bufsize и дальше всюду передаём его. Преимущество — резкое сокращение необходимости пересчёта длины по ходу обработки.

Суммируя всё сказанное, считаю, что подход, когда правая граница не включается — значительно более прогрессивен и полезен. С другой стороны, да, он менее привычен в бытовом плане. Ну так всё когда-то было впервые...
The God is real, unless declared integer.
Re[3]: Вопрос по приемлемости синтаксисической конструкции
От: deniok Россия  
Дата: 21.02.10 08:29
Оценка: 2 (2) +1
Lazy Cjow Rhrr,

LCR>
LCR>for i in [0..10)
LCR>


Да, только как это повлияет на остальной язык, Скобки — ресурс дефицитный и, обычно, парный.
Re: Вопрос по приемлемости синтаксисической конструкции
От: MasterZiv СССР  
Дата: 23.02.10 10:00
Оценка: +2 -1
DSblizzard wrote:

> Как бы вы отнеслись к конструкции

>
> for i in 0..10
>
> в которой 0..10 означает от 0 (включительно) до 9 (включительно), а не
> от 0 до 10?

Как к бреду безумца.
Posted via RSDN NNTP Server 2.1 beta
Re: Вопрос по приемлемости синтаксисической конструкции
От: minorlogic Украина  
Дата: 21.02.10 09:40
Оценка: 3 (1)
Здравствуйте, DSblizzard, Вы писали:

DS>Как бы вы отнеслись к конструкции

DS>
DS>for i in 0..10
DS>
в которой 0..10 означает от 0 (включительно) до 9 (включительно), а не от 0 до 10?

DS>На странице "syntax across languages" нет ни одного ЯП с таким правилом.

из конструкции не видно явно и однозначно диапазон итерации. Да сама идея специальный цикл для итерации по специфическому типу выглядит неуневерсально.
... << RSDN@Home 1.2.0 alpha 4 rev. 1237>>
Ищу работу, 3D, SLAM, computer graphics/vision.
Re: Вопрос по приемлемости синтаксисической конструкции
От: Temoto  
Дата: 21.02.10 10:21
Оценка: 3 (1)
DS>Как бы вы отнеслись к конструкции
DS>
DS>for i in 0..10
DS>
в которой 0..10 означает от 0 (включительно) до 9 (включительно), а не от 0 до 10?

DS>На странице "syntax across languages" нет ни одного ЯП с таким правилом.

Нормальная конструкция. Главное — задокументировать её.
Re: Вопрос по приемлемости синтаксисической конструкции
От: VladD2 Российская Империя www.nemerle.org
Дата: 21.02.10 20:22
Оценка: 3 (1)
Здравствуйте, DSblizzard, Вы писали:

DS>Как бы вы отнеслись к конструкции

DS>
DS>for i in 0..10
DS>
в которой 0..10 означает от 0 (включительно) до 9 (включительно), а не от 0 до 10?


Отрицательно.

В прочем на этом форуме уже предлагали использовать для выражения подобных диапазонов разные скобки.

DS>На странице "syntax across languages" нет ни одного ЯП с таким правилом.


Это где?
Есть логика намерений и логика обстоятельств, последняя всегда сильнее.
Re[3]: Вопрос по приемлемости синтаксисической конструкции
От: Mr.Cat  
Дата: 21.02.10 20:28
Оценка: :)
Здравствуйте, Lazy Cjow Rhrr, Вы писали:
LCR>
LCR>for i in [0..10)
LCR>

Вот так, слово за слово, мы пришли к first-class интервалам.
Re[3]: Вопрос по приемлемости синтаксисической конструкции
От: DSblizzard Россия  
Дата: 22.02.10 00:57
Оценка: +1
Здравствуйте, Lazy Cjow Rhrr, Вы писали:

LCR>
LCR>for i in [0..10)
LCR>


С дефицитностью, которую упомянул deniok, еще можно смириться — две точки явно говорят о том, что это диапазон, а вот парность — это более серьезная проблема. Выше вероятность внесения ошибок, труднее их обнаруживать, различные трудности для редакторов текста/кода.
Программировать сложно. Но не программировать еще сложнее.
Re: Вопрос по приемлемости синтаксисической конструкции
От: Кодёнок  
Дата: 24.02.10 10:11
Оценка: +1
Здравствуйте, DSblizzard, Вы писали:

DS>Как бы вы отнеслись к конструкции

DS>for i in 0..10

Она вообще нужна, эта конструкция? Как часто вы в коде числовые интервалы перебираете (при условии наличия foreach для коллекций)?
Вопрос по приемлемости синтаксической конструкции
От: DSblizzard Россия  
Дата: 21.02.10 07:17
Оценка:
Как бы вы отнеслись к конструкции
for i in 0..10
в которой 0..10 означает от 0 (включительно) до 9 (включительно), а не от 0 до 10?
На странице "syntax across languages" нет ни одного ЯП с таким правилом.
Программировать сложно. Но не программировать еще сложнее.
Re[2]: Вопрос по приемлемости синтаксисической конструкции
От: deniok Россия  
Дата: 21.02.10 08:26
Оценка:
Здравствуйте, netch80, Вы писали:

N>поэтому, например, s == s[0:10] + s[10:20], и не надо всё время играться с плюс-минус единицей — арифметика позиций резко упрощается и получается меньше ошибок.


Только такую конструкцию естественнее обозначать s[0:10) + s[10:20); не надо всё время помнить, как в очередном новом языке ведет себя правая граница интервала
Re[3]: Вопрос по приемлемости синтаксисической конструкции
От: DSblizzard Россия  
Дата: 21.02.10 08:57
Оценка:
Здравствуйте, deniok, Вы писали:

D>Только такую конструкцию естественнее обозначать s[0:10) + s[10:20); не надо всё время помнить, как в очередном новом языке ведет себя правая граница интервала


Зато надо помнить, как ведут себя правые скобки в каждом новом языке .
Программировать сложно. Но не программировать еще сложнее.
Re[2]: Вопрос по приемлемости синтаксисической конструкции
От: DSblizzard Россия  
Дата: 21.02.10 09:00
Оценка:
Здравствуйте, netch80, Вы писали:

Да, про range() я помнил, я имел в виду конкретно две точки.
Программировать сложно. Но не программировать еще сложнее.
Re[4]: Вопрос по приемлемости синтаксисической конструкции
От: elmal  
Дата: 21.02.10 09:09
Оценка:
Здравствуйте, DSblizzard, Вы писали:

DS>Зато надо помнить, как ведут себя правые скобки в каждом новом языке .

Синтаксис скобок запомнить проще, чем вспоминать надо ли сделать +1 или -1 . Ну и того, а почему только правые скобки рассматриваем? Например (0..10] тоже может означать от 1 по 10. И это вполне можно даже применять, более того, как раз тут скобками будет подчеркнуты неочевидные моменты синтаксиса, и в результате будет все гораздо приятней читаться.
Re[3]: Вопрос по приемлемости синтаксисической конструкции
От: deniok Россия  
Дата: 21.02.10 09:09
Оценка:
Здравствуйте, DSblizzard, Вы писали:

DS>Здравствуйте, netch80, Вы писали:


DS>Да, про range() я помнил, я имел в виду конкретно две точки.


Тогда так:
1..10  -- включая
1...10 -- не включая
Re[4]: Вопрос по приемлемости синтаксисической конструкции
От: netch80 Украина http://netch80.dreamwidth.org/
Дата: 21.02.10 10:01
Оценка:
Здравствуйте, deniok, Вы писали:

D>Здравствуйте, DSblizzard, Вы писали:


DS>>Здравствуйте, netch80, Вы писали:


DS>>Да, про range() я помнил, я имел в виду конкретно две точки.


D>Тогда так:

D>
D>1..10  -- включая
D>1...10 -- не включая
D>


Плохо, слишком легко спутать.
Если вводить такое, то или систематически везде, как в Питоне, или с какими-то более выразительными знаками.

for i in 1 limit 10
The God is real, unless declared integer.
Re[2]: Вопрос по приемлемости синтаксисической конструкции
От: deniok Россия  
Дата: 21.02.10 10:37
Оценка:
Здравствуйте, minorlogic, Вы писали:

M> Да сама идея специальный цикл для итерации по специфическому типу выглядит неуневерсально.


В Хаскелле (откуда эта нотация родом) она подходит для любого экземпляра класса типов Enum, и является синтаксическим сахаром для вызова функции enumFromTo :: a -&gt; a -&gt; [a]
Re[2]: Вопрос по приемлемости синтаксисической конструкции
От: DSblizzard Россия  
Дата: 22.02.10 00:52
Оценка:
Здравствуйте, komaz, Вы писали:

K>0..10 включает 10, а 0..<10 нет. Довольно удобно.


Супер! Теперь остается только выбрать обозначения для других диапазонов. Видимо, они должны быть такими:
0<..10 — от 1 до 10
10>..0 — от 9 до 0
10..>0 — от 10 до 1
Программировать сложно. Но не программировать еще сложнее.
Re[2]: Вопрос по приемлемости синтаксисической конструкции
От: netch80 Украина http://netch80.dreamwidth.org/
Дата: 24.02.10 10:46
Оценка:
Здравствуйте, MasterZiv, Вы писали:

MZ>DSblizzard wrote:


>> Как бы вы отнеслись к конструкции

>>
>> for i in 0..10
>>
>> в которой 0..10 означает от 0 (включительно) до 9 (включительно), а не
>> от 0 до 10?

MZ>Как к бреду безумца.


Приятно видеть такие взвешенные, рассудительные, обоснованные замечания. :maniac:
The God is real, unless declared integer.
Re[2]: Правая граница не включается
От: Qbit86 Кипр
Дата: 24.02.10 11:17
Оценка:
Здравствуйте, netch80, Вы писали:

N>Суммируя всё сказанное, считаю, что подход, когда правая граница не включается — значительно более прогрессивен и полезен.


Категорически согласен.

Было бы здорово, если бы и в математике пределы знака суммирования обозначали несимметричный отрезок (включая левую границу, исключая правую), подсчёт количества слагаемых упростился бы, наглядность возросла.

У такого подхода есть и недостаток. Если некоторое API ожидает интервал вида [left, right), где, скажем, left, right : Int32, то нельзя задать интервал, содержащий Int32.Max.
Глаза у меня добрые, но рубашка — смирительная!
Re: Вопрос по приемлемости синтаксисической конструкции
От: Кодт Россия  
Дата: 24.02.10 14:57
Оценка:
Здравствуйте, DSblizzard, Вы писали:

DS>Как бы вы отнеслись к конструкции

DS>
DS>for i in 0..10
DS>
в которой 0..10 означает от 0 (включительно) до 9 (включительно), а не от 0 до 10?

DS>На странице "syntax across languages" нет ни одного ЯП с таким правилом.

Если уж мы пишем человеческими словами — for, in — то можно не жмотиться по части остальных лексем, а написать
for i from 0 to 10 exclusive
for i from 0 to 10 inclusive
Всё равно здесь диапазон — не первоклассный объект (в отличие от того же питона).

Либо определить конструкторы диапазонов, синтаксически совместимые с остальной частью языка:

range_co(x,y) = [x,y) — как наиболее популярный случай, ему можно дать синоним range(x,y)
range_cc(x,y) = [x,y]
range_oc(x,y) = (x,y]
range_oo(x,y) = (x,y)
Перекуём баги на фичи!
Re[2]: Вопрос по приемлемости синтаксисической конструкции
От: DSblizzard Россия  
Дата: 26.02.10 02:59
Оценка:
Здравствуйте, Кодёнок, Вы писали:

Кё>Здравствуйте, DSblizzard, Вы писали:


DS>>Как бы вы отнеслись к конструкции

DS>>for i in 0..10

Кё>Она вообще нужна, эта конструкция? Как часто вы в коде числовые интервалы перебираете (при условии наличия foreach для коллекций)?


Проверил все for в одной программе (39 штук) — из них 16 написаны или можно переписать как foreach, 23 — нет.
Программировать сложно. Но не программировать еще сложнее.
Re[2]: Вопрос по приемлемости синтаксисической конструкции
От: DSblizzard Россия  
Дата: 26.02.10 03:03
Оценка:
Здравствуйте, Кодт, Вы писали:

К>Если уж мы пишем человеческими словами — for, in — то можно не жмотиться по части остальных лексем, а написать

К>for i from 0 to 10 exclusive
К>for i from 0 to 10 inclusive
Единственная причина, по которой я рассматриваю .. вместо range — сокращение записи, так что такой вариант не годится.

К>Всё равно здесь диапазон — не первоклассный объект (в отличие от того же питона).

Почему он не может быть первоклассным? Что-то не могу подобрать пример.
Программировать сложно. Но не программировать еще сложнее.
Re[2]: Вопрос по приемлемости синтаксисической конструкции
От: DSblizzard Россия  
Дата: 26.02.10 03:16
Оценка:
Сравнил количества for'ов:
for i in range(a, b)  4  # a != 0
for i in range(b)    35


Длина второго лишь на один символ больше, чем
for i in 0 ..< b

поэтому сокращение уже не важно. Более короткие варианты предлагать не стоит, т. к. они плохо читаются.
Программировать сложно. Но не программировать еще сложнее.
Re[3]: Вопрос по приемлемости синтаксисической конструкции
От: DSblizzard Россия  
Дата: 26.02.10 05:10
Оценка:
Здравствуйте, DSblizzard, Вы писали:

DS>Почему он не может быть первоклассным? Что-то не могу подобрать пример.

Дошло. К нему неудобно будет цеплять методы, т.к. имя не из букв. Можно решить выбором синонима, того же range.
Программировать сложно. Но не программировать еще сложнее.
Re: Эврика!
От: DSblizzard Россия  
Дата: 27.02.10 00:31
Оценка:
Все элементарное просто:
for i < b: # счет от 0

Можно добавить начальное значение:
for a <= i < b:

При необходимости можно обобщить по операции:
for a op b:


Не подскажете язык, в котором практически такой же синтаксис? По-моему, где-то я это видел.
Программировать сложно. Но не программировать еще сложнее.
Re[2]: Эврика!
От: DSblizzard Россия  
Дата: 27.02.10 00:43
Оценка:
Черт, скобки или еще что-нибудь нужно добавить в общем случае к начальной и конечной границе. Придется дальше думать.
Программировать сложно. Но не программировать еще сложнее.
Re[2]: Вопрос по приемлемости синтаксисической конструкции
От: Фанатик Ад http://vk.com/id10256428
Дата: 15.03.10 06:30
Оценка:
Здравствуйте, Кодёнок, Вы писали:

Кё>Здравствуйте, DSblizzard, Вы писали:


DS>>Как бы вы отнеслись к конструкции

DS>>for i in 0..10

Кё>Она вообще нужна, эта конструкция? Как часто вы в коде числовые интервалы перебираете (при условии наличия foreach для коллекций)?


(C# 2.0 )
Некоторое время назад пришлось оптимизировать собственный код. Расследование причин тормозов, что логично,
показало, что виновником являются циклы. В очень многих местах пришлось отказаться от foreach, во первых потому, что пришлось перерабатывать алгоритм(ы), а ещё он по крайней мере раза в полтора медленнее.
Всё сказанное выше — личное мнение, если не указано обратное.
Re[3]: Эврика!
От: Воронков Василий Россия  
Дата: 18.03.10 12:57
Оценка:
Здравствуйте, DSblizzard, Вы писали:

DS>Черт, скобки или еще что-нибудь нужно добавить в общем случае к начальной и конечной границе. Придется дальше думать.


Обычно в языках, где есть first class ranges эти самые ranges несколько более интеллектуальны.
Например, хаскель:

[1..10] -> [1,2,3,4,5,6,7,8,9,10]
[1,4..20] -> [1,4,7,10,13,16,19]
[10, 9.. 1] -> [10,9,8,7,6,5,4,3,2,1]
[2..] -> [2,3,4,5...
[1,3..] -> [1,3,5,7...
['a'..'z'] -> "abcdefghijklmnopqrstuvwxyz"
 
Подождите ...
Wait...
Пока на собственное сообщение не было ответов, его можно удалить.