GassaFM / interpr

Toy language to learn parallel computing
MIT License
5 stars 4 forks source link

`rangeto`, `downto` keywords for the for block #39

Closed frungl closed 1 year ago

frungl commented 1 year ago

Поддержка ключевого слова downto для for.

Теперь можно писать так:

for i := 3 downto 1:
    print (i)

Вывод: 3 2 1

GassaFM commented 1 year ago

Прежде чем добавлять фичу, неплохо бы её задизайнить :) . Нынешний дизайн далёк от идеала. И по выбору ключевого слова — а какое хорошее слово было бы парным к until?) И по семантике: цикл вверх на полуинтервале, а цикл вниз почему-то на отрезке.

GassaFM commented 1 year ago

Более развёрнутый пример. Представим себе язык, в котором есть следующие управляющие конструкции: if ... fi for ... endfor while ... end while do { ... } while ... ; Ничего не смущает? :) (половина этого примера вполне себе есть в языке Metapost)

GassaFM commented 1 year ago

Итак, вопросы про цикл вниз, на которые надо бы ответить до написания кода:

GassaFM commented 1 year ago

У меня нет, кстати, хорошего ответа на последний вопрос.

frungl commented 1 year ago
  • Нужен ли он вообще? Хороший ответ — примеры использования, из которых могут следовать ответы на следующие вопросы. Он был бы полезен в некоторых задачах, не хочется писать while с i -= 1 внутри.

  • Какое ключевое слово хорошо подходит как парное к until? Почему бы и не downto? Я в данном выборе оперся на Kotlin, там именно так (https://kotlinlang.org/docs/ranges.html#range).

  • Какой конец полуинтервала следует взять и почему? В until не включаем конец, так как хотим удобно работать с индексацией массива и.т.д. С downto идея та же, хотим пройти по массиву, но с конца, но не будем же мы везде писать downto -1, это непонятно, значит включаем конец.

GassaFM commented 1 year ago

Хмммм. Я хочу, чтобы "for по умолчанию" был всё-таки на полуинтервалах, как во многих языках. При этом downTo в Котлине это антоним к rangeTo, а не к until.

После обсуждения решили, что неплохо сделать так:

GassaFM commented 1 year ago

Даже лучше не until, upto, downto, а until, rangeto, downto: