Привет! Термоядерный язык PascalABC использующий компоненты NET Framevork. Раз язык на столько гибридный и современный то почему в цикле For нет возможности создать шаг, по типу For var i:=1 to i<9 do step(i+2) begin end; Возможно есть возможность но я ее не нашел…Другие циклы другая тема, Благодарю.
Возможно потому, что он все же где-то по-прежнему Паскаль. В коем цикл со счетчиком for имеет инкремент/декремент, равный единице. Если в Паскаль начать тянуть все конструкции из иных языков, это уже будет вообще некий монстр. А то, что Вы пишете - это когда-то было в языке PL/1. И вызывало множество критики, кстати.
вообще то цикл For придумал не Pascal и к примеру Pascal DOS шаг можно было организовать внутри цикла, For i:=1 to 10 do begin i:=i+2; end; так что не нужно ограничивать, достойный язык, Лично мне он нравится своей чистотой оформления, а не ограниченностью. Ну и если следовать вашей логике, то зачем определять переменные внутри тела программы, ведь это тоже отличия Pascal… Шаг просто обязан быть в это цикле, я его использовал еще в синклеар бейсике в 1993 году…))))))))))))))))))
В принципе, идея хорошая, но вот реализацию нужно продумать. То есть сохранить как стандартный For Var… , так и новый. Может синтаксис For Var i:=0 to 20 step 2 do будет более “Паскалевским” и лучше впишется? Не нежно опускать Паскаль до ущербного C++!!!
не будем дискутировать на тему с++, я языками не пренебрегаю. А, вот (For Var i:=0 to 20 step 2 do) замечательно выглядит! и если вы ее реализуете я лично буду в восторге…))))))))
Оно совершенно не нужно, потому что есть Range ( начало, конец, [шаг=1] ), генерирующий любые последовательности. И есть ArrGen / MatrGen, генерирующие элементы массивов как функцию последовательно перебираемых индексов.
А может от от foreach var i in Range(0,20,2) do Вы станете чуточку счастливее?
Чисто технически: ключевое слово step рубит в окрошку все наши стандартные библиотеки
Нежные так не поступают! =3
Та да, когда речь заходит о С++, нежные тут же достают портативный фекаломет =3
Представляю, сколько кода, уже написанного, испортится, если добавить настолько популярное ключевое слово =3
Можно в принципе шаг задавать ключевым словом BY, как было в PL/1. Но это, наверное, можно сделать, когда больше заняться нечем.
Как насчет этого?
function Step(Self: integer): sequence of integer; extensionmethod; Возвращает бесконечную последовательность целых от текущего значения с шагом 1 function Step(Self: integer; step: integer): sequence of integer; extensionmethod; Возвращает бесконечную последовательность целых от текущего значения с шагом step function Step(Self: real; step: real): sequence of real; extensionmethod; Возвращает бесконечную последовательность вещественных от текущего значения с шагом step
Тогда уже
function Iterate<T>(Self: T, function(T):T): sequence of T
Возвращает бесконечную последовательность рекуррентного применения функции к значению - можно таким образом и Step сделать, и простые задачи с первого курса порешать.
Чего мелочиться =3
Числа Фибоначчи: (1, 2).Iterate((a, b)=>(b, a+b))
. [или как там в Паскале лямбды пишутся]
Вообще-то я примеры привел из Справки, где задействован Step
Тогда я неправильно понял.=3
Собственно о PABCSystem где-то уже где-то говорили… В чём заключается проблема? Стандартный For Var ведь не предлагается убрать, а лишь добавить его вторую версию. А ключевые слова ведь можно использовать с &? Var &step: int32;?
Это будет даже хуже, чем “Сишный” вариант…
Извиняюсь…
Почему? В Паскале нет ни Step, ни By, какая разница, какое слово использовать? Оно лично Вам не нравится? Ну так каждому что-то нравится больше, что-то меньше.
Н.Вирт вообще пошленько поступил. Он Паскаль создавал на базе Алгола, там был цикл for i:=m step h until n do Он выбросил STEP, а UNTILl заменил бейсиковским/фортранным/PL/1-ским TO
Step-англ. Шаг; By-англ. От. Step здесь больше подходит. Конструкция вида For Var i:=0 to 6 by 2 do немного смущает… Кроме того по поводу конструкции из PL/1 уже высказывались, причём Вы, так что это не только моё личное мнение:
Да ладно Вам! Создателей PL/1 - а это был целый комитет - почему-то оно не смущало. Уверен, английский язык они знали лучше Вас)). BY - это вовсе не “от”, которое по-английски FROM.
Вирт поступил правильно. Ни один из этих трёх легендарных циклов нельзя удалять или менять. Цикл for i:=m step h until n do вам не напоминает for(i=0; i<4; i++)? Тогда можно вообще перестать писать на Паскале, есть C# со всеми этими конструкциями.