RU

Найден функционирующий оператор цикла for!

Rivvil #1560 21.10.2015 17:30 4 comments 4805 views

Ребята, всем здрасте.
Сразу прошу прощения за чрезмерную экспрессию. Но уж больно меня взбудоражила находка :D
Рылся в исходниках QSP (тех, которые на Си, не знаю, есть ли другие) и случайно наткнулся на столь вожделенный оператор for! Сначала не поверил глазам. Потом решил проверить. В AeroQSP пашет точно. В обычном плеере, к сожалению, нет. Вероятно, там используется более древняя версия библиотеки QSP.
Примеры использования:

! Цикл от 0 до 10 включительно. Напечатает "привет" 11 раз.
for $i = 0 to 10: pl 'Привет!'

! Цикл от 0 до 10 включительно с шагом 2. Напечатает "привет" 6 раз.
for $i = 0 to 10 step 2: pl 'Привет!'

! По примеру if можно разбить его на несколько строк.
for $i = 0 to 10 step 2: 
  pl 'Привет!'
end

Редактор QGen не знает о существовании данного оператора, поэтому цветом там ничего не выделяется. Но и фиг бы с ним, как мне кажется :D
Мне так не хватало цикла в QSP, что теперь я просто вне себя от счастья :D Надеюсь, и других энтузиастов сие открытие тоже порадует :)

PS. Несколько удивляет отсутствие информации об этом. По крайней мере Гугл нашёл мне единственную тему, где один из пользователей высказал пожелание по поводу оператора цикла в языке QSP. Что забавно, разработчик (как я понял) ответил тогда железно, что операторов цикла не будет :D

Edited at 21.10.2015 17:40 (10 years ago)

Всё очень просто. Сей оператор был запланирован Байтом для нового релиза. Библиотека с ним ещё не зарелизена, соответственно никто ничего вроде как о нём не знает.

Однако же AeroQSP его прекрасно понимает, что в таком случае весьма странно. Но все равно радостно :)

Прям раскопка археолога! :D

Как и следовало ожидать, в Навигаторе работает.

count = input ('Количество циклов')
Start_time = MSECSCOUNT
for for_index = 1 to count: a=for_index
End_time =  MSECSCOUNT
Total_time = (End_time - Start_time)/1000
*nl 'Внутренняя реализация'
*nl 'Циклов: <<count>> Старт: <<Start_time>>мс Конец: <<End_time>>мс Всего времени: <<Total_time>>сек (<<End_time - Start_time>> мс)'

Start_time = MSECSCOUNT
dynamic $for, 'for_index', 1, count, 1, {a=for_index}
End_time =  MSECSCOUNT
Total_time = (End_time - Start_time)/1000
*nl 'Реализация через dynamic'
*nl 'Циклов: <<count>> Старт: <<Start_time>>мс Конец: <<End_time>>мс Всего времени: <<Total_time>>сек (<<End_time - Start_time>> мс)'

Что радует (но не удивляет) - значительно быстрее, чем “самопальный” цикл на динамике:

Внутренняя реализация
Циклов: 1000000 Старт: 78526мс Конец: 82189мс Всего времени: 3сек (3663 мс)
Реализация через dynamic
Циклов: 1000000 Старт: 82189мс Конец: 393933мс Всего времени: 11сек (11744 мс)

Log in or Register to post comments.