Forth http://www.fforum.winglion.ru/ |
|
циклы NOW .. SINCE .. TILL (расширенный вариант FOR NEXT) http://www.fforum.winglion.ru/viewtopic.php?f=25&t=1161 |
Страница 1 из 1 |
Автор: | mOleg [ Пн фев 11, 2008 03:17 ] |
Заголовок сообщения: | циклы NOW .. SINCE .. TILL (расширенный вариант FOR NEXT) |
надумалось немного расширить возможности циклов FOR NEXT. пример: Код: \ найти сумму чисел a .. z количеством # : summa ( [ a .. z ] # --> d ) 1 - NOW S>D SINCE ROT S>D D+ TILL ; 10 20 30 40 4 summa D. NOW копирует счетчик цикла на стек возвратов далее идет подготовка к выполнению цикла SINCE отмечает место начала цикла далее тело цикла TILL (или NEXT) проверяет условие, если необходимо возвращает управление на метку SINCE Код: \ 02-06-2007 ~mOleg
\ Copyright [C] 2007 mOleg mininoleg@yahoo.com \ реализация циклов FOR NEXT для СПФ (Версия для fork-а) \ начать цикл NOW .. SINCE .. TILL\NEXT : NOW ( u --> ) ?init: 3 controls +! COMPILE >R ; IMMEDIATE \ метка для перехода назад : SINCE ( --> ) <MARK ; IMMEDIATE \ начать определения цикла со счетчиком : FOR ( n --> ) [COMPILE] NOW [COMPILE] SINCE ; IMMEDIATE \ если счетчик цикла не равен нулю перейти к точке, отмеченной словом FOR \ иначе удалить счетчик цикла, и выйти из цикла. : NEXT ( --> ) ?COMP -3 controls +! COMPILE R@ -1 LIT, COMPILE R+ N?BRANCH, COMPILE RDROP controls @ IFNOT [COMPILE] ;stop THEN ; IMMEDIATE \ аналогично NEXT позволяет создавать циклы со счетчиком, \ только счет ведется до достижения 1, а не 0 : TILL ( --> ) ?COMP -3 controls +! -1 LIT, COMPILE R+ COMPILE R@ N?BRANCH, COMPILE RDROP controls @ IFNOT [COMPILE] ;stop THEN ; IMMEDIATE \EOF пример использования: 10 FOR R@ . NEXT ╜ должен выдать ряд чисел от 10 до 0 10 FOR R@ . TILL ╜ должен выдать ряд чисел от 10 до 1 использование данных конструкций возможно в режиме исполнения то есть, пример приведенный выше может быть набран прямо в ком. строке дополнительные варианты: NOW ... SINCE ... TILL NOW ... SINCE ... NEXT |
Страница 1 из 1 | Часовой пояс: UTC + 3 часа [ Летнее время ] |
Powered by phpBB © 2000, 2002, 2005, 2007 phpBB Group http://www.phpbb.com/ |