Forth и другие саморасширяющиеся системы программирования Locations of visitors to this page
Текущее время: Пт мар 29, 2024 00:26

...
Google Search
Forth-FAQ Spy Grafic

Часовой пояс: UTC + 3 часа [ Летнее время ]




Начать новую тему Ответить на тему  [ Сообщений: 28 ]  На страницу 1, 2  След.
Автор Сообщение
 Заголовок сообщения: FOR NEXT
СообщениеДобавлено: Сб июн 16, 2007 02:36 
Не в сети
Administrator
Administrator
Аватара пользователя

Зарегистрирован: Вт май 02, 2006 22:48
Сообщения: 7960
Благодарил (а): 25 раз.
Поблагодарили: 144 раз.
: N1
10 0 FOR I . CR NEXT
;

: N2
0 10 FOR I . CR NEXT
;

Оба слова печатают числа от 0 до 10.

FOR работает с тем же стеком циклов, что и DO LOOP. Однако заталкивает на него отсортированные числа, начальное значение всегда меньше конечного.

NEXT работает как LOOP, за исключением того, что с конечным значением цикл выполняется.

Зачем?
1) Чтобы начинающие могли "путать" порядок аргументов на стеке.
2) Чтобы числа выглядели как диапазон изменения счетчика.

Вместо NEXT можно писать LOOP, кстати. И DO NEXT тоже работают.


Вернуться к началу
 Профиль Отправить личное сообщение  
Ответить с цитатой  
 Заголовок сообщения:
СообщениеДобавлено: Сб июн 16, 2007 13:50 
п.1. - начинающие продолжат путать и всё остальное.
п.2. - диапазон может понадобиться и "обратный".
Ну и есть еще п.3. Слова FOR NEXT кажется уже есть в машинфорте и некоторых диалектах анси-форта (например в quartus forth для Palm OS). И слово FOR берет один(!) параметр, который является количеством циклов.
Так что : N3 10 For i . cr next ; Напечатает числа от 9 до 0.
А главное преимущество по сравнению с DO LOOP - скорость выполнения выше.


Вернуться к началу
  
Ответить с цитатой  
 Заголовок сообщения:
СообщениеДобавлено: Сб июн 16, 2007 16:02 
Не в сети
Аватара пользователя

Зарегистрирован: Вт мар 20, 2007 23:39
Сообщения: 1261
Благодарил (а): 3 раз.
Поблагодарили: 19 раз.
Хищник писал(а):
1) Чтобы начинающие могли "путать" порядок аргументов на стеке.

UriS писал(а):
п.1. - начинающие продолжат путать и всё остальное.

Нельзя начинающим поощрять их ошибки, иначе привыкнут и будет только хуже. Пускай лучше будет постоянный порядок слов.

_________________
Cтоимость сопровождения программного обеспечения пропорциональна квадрату творческих способностей программиста.
Роберт Д. Блисc


Вернуться к началу
 Профиль Отправить личное сообщение  
Ответить с цитатой  
 Заголовок сообщения:
СообщениеДобавлено: Сб июн 16, 2007 18:53 
Не в сети
Administrator
Administrator
Аватара пользователя

Зарегистрирован: Вт май 02, 2006 22:48
Сообщения: 7960
Благодарил (а): 25 раз.
Поблагодарили: 144 раз.
Кстати, насчет единственного параметра действительно разумно.

UriS писал(а):
А главное преимущество по сравнению с DO LOOP - скорость выполнения выше.

Нет, уже нету такого преимущества на современных процессорах.


Вернуться к началу
 Профиль Отправить личное сообщение  
Ответить с цитатой  
 Заголовок сообщения:
СообщениеДобавлено: Сб июн 16, 2007 20:35 
Не в сети
Moderator
Moderator
Аватара пользователя

Зарегистрирован: Чт май 04, 2006 00:53
Сообщения: 5062
Откуда: был Крым, теперь Новосибирск
Благодарил (а): 23 раз.
Поблагодарили: 63 раз.
Хищник писал(а):
Нет, уже нету такого преимущества на современных процессорах.

Очень даже есть. Классический DO LOOP очень медленный цикл. Самый медленный из всех.


Вернуться к началу
 Профиль Отправить личное сообщение  
Ответить с цитатой  
 Заголовок сообщения:
СообщениеДобавлено: Сб июн 16, 2007 20:37 
Не в сети
Moderator
Moderator
Аватара пользователя

Зарегистрирован: Чт май 04, 2006 00:53
Сообщения: 5062
Откуда: был Крым, теперь Новосибирск
Благодарил (а): 23 раз.
Поблагодарили: 63 раз.
Хищник писал(а):
: N1

10 0 FOR I . CR NEXT

;



: N2

0 10 FOR I . CR NEXT

;



Оба слова печатают числа от 0 до 10.

что-то не то!
Потому как должен браться один параметр, а не два.
Кстати не всегда нужно знать счетчик цикла


Вернуться к началу
 Профиль Отправить личное сообщение  
Ответить с цитатой  
 Заголовок сообщения:
СообщениеДобавлено: Сб июн 16, 2007 21:33 
По поводу скорости.
На Palm-е (эмуляция процессора DragomBall на OMAP-е (ARM ядро)) FOR-NEXT обходит DO-LOOP почти в 2 раза. (190 vs. 90 условных "nop"-ов ).
Так что современные процессоры, - это ведь не только пень :)


Вернуться к началу
  
Ответить с цитатой  
 Заголовок сообщения:
СообщениеДобавлено: Сб июн 16, 2007 22:05 
Не в сети
Moderator
Moderator
Аватара пользователя

Зарегистрирован: Чт май 04, 2006 00:53
Сообщения: 5062
Откуда: был Крым, теперь Новосибирск
Благодарил (а): 23 раз.
Поблагодарили: 63 раз.
UriS писал(а):
На Palm-е (эмуляция процессора DragomBall на OMAP-е (ARM ядро)) FOR-NEXT обходит DO-LOOP почти в 2 раза. (190 vs. 90 условных "nop"-ов ).

Так что современные процессоры, - это ведь не только пень

вообще для каждой задачи свой цикл нужен.
FOR NEXT очень сильно выигрывает у DO LOOP на большом количестве маленьких циклов.


Вернуться к началу
 Профиль Отправить личное сообщение  
Ответить с цитатой  
 Заголовок сообщения:
СообщениеДобавлено: Сб июн 16, 2007 22:07 
Не в сети
Administrator
Administrator
Аватара пользователя

Зарегистрирован: Вт май 02, 2006 22:48
Сообщения: 7960
Благодарил (а): 25 раз.
Поблагодарили: 144 раз.
mOleg писал(а):
что-то не то!
Потому как должен браться один параметр, а не два.
Кстати не всегда нужно знать счетчик цикла

Почему это "должен"? :) "Моя селедка, куда хочу, туда и вешаю" :)
mOleg писал(а):
Кстати не всегда нужно знать счетчик цикла

Но можно и знать. Это я к тому, что используется тот же стек циклов, что и для DO LOOP


Вернуться к началу
 Профиль Отправить личное сообщение  
Ответить с цитатой  
 Заголовок сообщения:
СообщениеДобавлено: Сб июн 16, 2007 22:12 
Не в сети
Administrator
Administrator
Аватара пользователя

Зарегистрирован: Вт май 02, 2006 22:48
Сообщения: 7960
Благодарил (а): 25 раз.
Поблагодарили: 144 раз.
UriS писал(а):
По поводу скорости.
На Palm-е (эмуляция процессора DragomBall на OMAP-е (ARM ядро)) FOR-NEXT обходит DO-LOOP почти в 2 раза. (190 vs. 90 условных "nop"-ов ).
Так что современные процессоры, - это ведь не только пень

Смотря как писать. В некоторых форт-процессорах циклы вообще делаются за один такт. Смысл ускорения циклов на x86 в том, что jecxz раньше выполнялся быстрее (но такой подход подразумевает хранение счетчика в ecx).


Вернуться к началу
 Профиль Отправить личное сообщение  
Ответить с цитатой  
 Заголовок сообщения:
СообщениеДобавлено: Сб июн 16, 2007 22:13 
Не в сети
Moderator
Moderator
Аватара пользователя

Зарегистрирован: Чт май 04, 2006 00:53
Сообщения: 5062
Откуда: был Крым, теперь Новосибирск
Благодарил (а): 23 раз.
Поблагодарили: 63 раз.
Хищник писал(а):
mOleg писал(а):что-то не то!

Потому как должен браться один параметр, а не два.

Кстати не всегда нужно знать счетчик цикла

Почему это "должен"? "Моя селедка, куда хочу, туда и вешаю"

mOleg писал(а):Кстати не всегда нужно знать счетчик цикла

Но можно и знать. Это я к тому, что используется тот же стек циклов, что и для DO LOOP

Гм, лучше тогда называть как-то иначе, раз уж конструкция другая.
Потому как путает сильно.
А количество параметров отличается в три раза 8) между FOR NEXT и DO LOOP, если они "правильно" сделаны


Вернуться к началу
 Профиль Отправить личное сообщение  
Ответить с цитатой  
 Заголовок сообщения:
СообщениеДобавлено: Сб июн 16, 2007 22:17 
Не в сети
Administrator
Administrator
Аватара пользователя

Зарегистрирован: Вт май 02, 2006 22:48
Сообщения: 7960
Благодарил (а): 25 раз.
Поблагодарили: 144 раз.
mOleg писал(а):
Гм, лучше тогда называть как-то иначе, раз уж конструкция другая.
Потому как путает сильно.
А количество параметров отличается в три раза между FOR NEXT и DO LOOP, если они "правильно" сделаны

Ну я уже хочу переделать на 10 FOR ... NEXT (с подстановкой нуля). И почему в три раза? jecxz?


Вернуться к началу
 Профиль Отправить личное сообщение  
Ответить с цитатой  
 Заголовок сообщения:
СообщениеДобавлено: Сб июн 16, 2007 22:24 
Не в сети
Moderator
Moderator
Аватара пользователя

Зарегистрирован: Чт май 04, 2006 00:53
Сообщения: 5062
Откуда: был Крым, теперь Новосибирск
Благодарил (а): 23 раз.
Поблагодарили: 63 раз.
Хищник писал(а):
mOleg писал(а):Гм, лучше тогда называть как-то иначе, раз уж конструкция другая.

Потому как путает сильно.

А количество параметров отличается в три раза между FOR NEXT и DO LOOP, если они "правильно" сделаны

Ну я уже хочу переделать на 10 FOR ... NEXT (с подстановкой нуля). И почему в три раза? jecxz?

это зависит от того, как реализовывать эти циклы. Например у меня даже не в три, а в 4ре раза 8)

Что касается FOR NEXT то учти, что он считает от максимального значения до нуля:

10 FOR R@ . NEXT выдаст ряд 10 9 8 ... 1 0
то есть 11 значений!!


Вернуться к началу
 Профиль Отправить личное сообщение  
Ответить с цитатой  
 Заголовок сообщения:
СообщениеДобавлено: Сб июн 16, 2007 22:28 
Не в сети
Administrator
Administrator
Аватара пользователя

Зарегистрирован: Вт май 02, 2006 22:48
Сообщения: 7960
Благодарил (а): 25 раз.
Поблагодарили: 144 раз.
mOleg писал(а):
Что касается FOR NEXT то учти, что он считает от максимального значения до нуля:

Я прекрасно знаю, как (и почему) работает FOR NEXT. Однако я уже упоминал, что кварк - это диалект. И как он будет работать, я буду решать на основании собственного опыта и обсуждения в форуме с пользователями.


Вернуться к началу
 Профиль Отправить личное сообщение  
Ответить с цитатой  
 Заголовок сообщения:
СообщениеДобавлено: Сб июн 16, 2007 22:34 
Не в сети
Moderator
Moderator
Аватара пользователя

Зарегистрирован: Чт май 04, 2006 00:53
Сообщения: 5062
Откуда: был Крым, теперь Новосибирск
Благодарил (а): 23 раз.
Поблагодарили: 63 раз.
Хищник писал(а):
Я прекрасно знаю, как (и почему) работает FOR NEXT. Однако я уже упоминал, что кварк - это диалект. И как он будет работать, я буду решать на основании собственного опыта и обсуждения в форуме с пользователями.

Пардон, я просто на всякий случай сказал. Потому как сам совсем недавно разобрался с этим самым FOR NEXT 8)


Вернуться к началу
 Профиль Отправить личное сообщение  
Ответить с цитатой  
Показать сообщения за:  Поле сортировки  
Начать новую тему Ответить на тему  [ Сообщений: 28 ]  На страницу 1, 2  След.

Часовой пояс: UTC + 3 часа [ Летнее время ]


Кто сейчас на конференции

Сейчас этот форум просматривают: нет зарегистрированных пользователей и гости: 20


Вы не можете начинать темы
Вы можете отвечать на сообщения
Вы не можете редактировать свои сообщения
Вы не можете удалять свои сообщения
Вы не можете добавлять вложения

Powered by phpBB © 2000, 2002, 2005, 2007 phpBB Group
phpBB сборка от FladeX // Русская поддержка phpBB