Forth и другие саморасширяющиеся системы программирования Locations of visitors to this page
Текущее время: Чт апр 25, 2024 09:12

...
Google Search
Forth-FAQ Spy Grafic

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




Начать новую тему Ответить на тему  [ Сообщений: 7 ] 
Автор Сообщение
 Заголовок сообщения: Префиксы для форт-слов
СообщениеДобавлено: Чт фев 11, 2010 17:43 
Не в сети
Аватара пользователя

Зарегистрирован: Чт июл 20, 2006 11:31
Сообщения: 2168
Откуда: Екб
Благодарил (а): 0 раз.
Поблагодарили: 41 раз.
Навеяно задачкой по факториалу.

Префиксы для форт-слов ( действуют локально только на одно слово в режиме интерпретации и компиляции ).

В качестве примера два префикса:

xt - получить адрес кода слова(при компиляции - отложить адрес кода слова)
nrep - повторить исполнение слова(при компиляции - отложить код повторения слова)

пс. в качестве упражнения можно создать префикс перевода слова из обычного слова в слово немедленного исполнения и наоборот


Код:
\ макрос для идентификации префиксов, (макрос - чтобы выход был при вложенном ident )
M: ident \ A U --
2OVER COMPARE 0<> IF NOTFOUND EXIT THEN 2DROP ;


\ "xt слово" - дать адрес кода слова

: NOTFOUND ( A U --)
S" xt" ident
' STATE @ IF LIT, THEN ;

\ "nrep слово" - исполнить слово n раз, n взять со стека параметров

: t-rep { a } 0 DO a EXECUTE LOOP ;

: NOTFOUND S" nrep" ident
' STATE @ IF LIT, POSTPONE t-rep ELSE t-rep THEN ;

\ EOF

xt DUP . CR

: s1 xt DUP ; s1 . CR CR

1 2 nrep DUP . . . CR CR

: dup2 2 nrep DUP ;

3 dup2 . . . CR CR


: (fib) TUCK + ;

: fib ( N -- fibN)  >R 0 1 R>  nrep (fib)  NIP ;

16 fib .

лог

5579564
5579564

1 1 1

3 3 3

1597
Ok

пс. Видно, что большая часть кода префиксов одинакова для режимов компиляции и интерпретации.

_________________
С уважением, chess


Вернуться к началу
 Профиль Отправить личное сообщение  
Ответить с цитатой  
 Заголовок сообщения:
СообщениеДобавлено: Чт фев 11, 2010 20:12 
Не в сети

Зарегистрирован: Вт май 09, 2006 12:31
Сообщения: 3438
Благодарил (а): 5 раз.
Поблагодарили: 16 раз.
Почему это обязательно нужно решить через NOTFOUND :?:


Вернуться к началу
 Профиль Отправить личное сообщение  
Ответить с цитатой  
 Заголовок сообщения:
СообщениеДобавлено: Чт фев 11, 2010 20:25 
Не в сети
Аватара пользователя

Зарегистрирован: Чт июл 20, 2006 11:31
Сообщения: 2168
Откуда: Екб
Благодарил (а): 0 раз.
Поблагодарили: 41 раз.
вопрос писал(а):
Почему это обязательно нужно решить через NOTFOUND

Так мне показалось очень простым. Правда сами префиксы стали ключевыми именами.
Если у вас есть вариант реализации, который кроме всего работает при любой вложенности, то
покажите его.

_________________
С уважением, chess


Вернуться к началу
 Профиль Отправить личное сообщение  
Ответить с цитатой  
 Заголовок сообщения:
СообщениеДобавлено: Чт фев 11, 2010 21:36 
Не в сети
Moderator
Moderator
Аватара пользователя

Зарегистрирован: Чт май 04, 2006 00:53
Сообщения: 5062
Откуда: был Крым, теперь Новосибирск
Благодарил (а): 23 раз.
Поблагодарили: 63 раз.
если честно, не понял, чем не нравится вариант с передачей xt в явном виде.
http://fforum.winglion.ru/viewtopic.php?t=2100
http://fforum.winglion.ru/viewtopic.php?t=2105

_________________
Мне бы только мой крошечный вклад внести,
За короткую жизнь сплести
Хотя бы ниточку шёлка.
fleur


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

Зарегистрирован: Чт июл 20, 2006 11:31
Сообщения: 2168
Откуда: Екб
Благодарил (а): 0 раз.
Поблагодарили: 41 раз.
mOleg писал(а):
если честно, не понял, чем не нравится вариант с передачей xt в явном виде.

xt у меня заменяет ' и ['], это удобно в применении.

nrep у меня работает также по смыслу одинаково в режимах интерпретации и компиляции,
также единообразно в применении. Да и попроще реализовано.

_________________
С уважением, chess


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

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

имхо, через NOTFOUND это не просто.

_________________
Мне бы только мой крошечный вклад внести,
За короткую жизнь сплести
Хотя бы ниточку шёлка.
fleur


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

Зарегистрирован: Чт июл 20, 2006 11:31
Сообщения: 2168
Откуда: Екб
Благодарил (а): 0 раз.
Поблагодарили: 41 раз.
mOleg писал(а):
имхо, через NOTFOUND это не просто.

NOTFOUND, здесь, это только точка входа в INTERPRET, не более.
Сложности здесь не вижу - просто использование кода форт-системы.

_________________
С уважением, chess


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

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


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

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


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

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