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

...
Google Search
Forth-FAQ Spy Grafic

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




Начать новую тему Ответить на тему  [ Сообщений: 39 ]  На страницу 1, 2, 3  След.
Автор Сообщение
 Заголовок сообщения: множественный DOES>
СообщениеДобавлено: Вс янв 18, 2009 13:32 
Не в сети
Moderator
Moderator
Аватара пользователя

Зарегистрирован: Чт май 04, 2006 00:53
Сообщения: 5062
Откуда: был Крым, теперь Новосибирск
Благодарил (а): 23 раз.
Поблагодарили: 63 раз.
<pre>
\ 2009-01-17 ~mOleg
\ Сopyright [C] 2009 mOleg mininoleg@yahoo.com
\ множественный DOES>

branch/ for-next.fts

?DEFINED (JOIN) : (JOIN) LAST A@ LINK>C R> OVER - CFL - SWAP 1 + A! ;

USER does# \ хранит количество DOES> частей у собираемого слова
USER 'create \ хранит адрес перехода на часть инициализацим

\ определить адрес поля данных, передать управление методу x
\ проверки правильности метода не производится!!! то есть не стоит вызывать
\ несуществующих обработчиков.
: (SELECT) ( r: 'data 'vect d: x --> data ) DR> ROT CELLS + @ >R ;

\ с этого слова каждый раз начинается описание следующего метода
: does> ( --> ) ?COMP
does# @ IFNOT HERE BRANCH, >MARK 'create A! THEN
RET, \ выход из предыдущего слова
<MARK \ метка для таблицы переходов
does# @ DUP CELL + does# ! \ вычислить номер поля
; IMMEDIATE

\ завершить формирование DOES> методов
: ;does ( [ a u ] # --> ) ?COMP
RET, 'create @ >resolve
COMPILE (JOIN)
COMPILE (SELECT)
HERE >L \ сформировать таблицу методов:
0 does# CHANGE DUP ALLOT
CELL / FOR L@ + A! TILL
LDROP
[COMPILE] ; \ завершить определение (обязательно для форка!)
; IMMEDIATE
</pre>
пример использования:
<pre>
\EOF пример использования:

: test CREATE 10 CELLS ALLOT
does> ." \n\r first methood\t" .
does> ." \n\r second methood\t" .
does> ." \n\r thrid methood\t" .
;does

test sample

0 sample
1 sample
2 sample
</pre>

Традиционно в форте имеется две достаточно полезных конструкции:
1: - CREATE -- DOES> механизм
2: - VALUE VECT переменные (оба используют одинаковый механизм).
их объединяет вобщем-то одно свойство: каждый из этих механизмов работает с данными, с помощью специального метода. Причем, в случае CREATE DOES> метод единственный и описывается между: DOES> и ;
у VALUE таких методов три:
- взять содержимое поля данных (вызывается по умолчанию по имени name )
- положить в поле данных содержимое (вызывается с помощью TO name )
- получить адрес поля данных (вызывается с помощью FROM name )
иногда третий метод опускают за ненадобностью, у аналогично работающего VECT таких метода тоже три:
- выполнить код, адрес которого хранится в поле данных (просто по имени name )
- установить новый обработчик, записав в поле данных адрес по IS name
- получить адрес текущего обработчика c помощью FROM name
(раньше встречалось еще слово QUAN работающее аналогично VALUE)

собственно, VALUE и VECT переменные могли бы быть реализованы с помощью CREATE DOES> механизма, если бы этот механизм позволял определять несколько обработчиков DOES> , но при всей видимой полезности множественного DOES> сам механизм не на столько тривиален.
В данной библиотеке как раз реализована возможность создание CREATE слов с множественным DOES> , то есть с большим количеством методов обработки данных, созданных по CREATE. К примеру, классический VALUE механиз может быть реализован
с помощью этой библиотеки так:

: value CREATE 0 ,
does> @
does> !
does>
;does

правда с вызовом методов придется обходиться несколько иначе:

: to 1 [COMPILE] LITERAL ; IMMEDIATE
: from 2 [COMPILE] LITERAL ; IMMEDIATE
: get 0 [COMPILE] LITERAL ; IMMEDIATE \ на вершине стека должен лежать номер метода!

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

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


Вернуться к началу
 Профиль Отправить личное сообщение  
Ответить с цитатой  
 Заголовок сообщения:
СообщениеДобавлено: Вс янв 18, 2009 14:01 
Не в сети

Зарегистрирован: Вт май 09, 2006 12:31
Сообщения: 3438
Благодарил (а): 5 раз.
Поблагодарили: 16 раз.
да, хорошо, ещё бы как тут
http://fforum.winglion.ru/viewtopic.php?t=139

_________________
понимаю некоторую бестолковость некоторых вопросов


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

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

а тема ксати, занятная, я совсем про не ничего не помню :) ща буду перечитывать

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


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

Зарегистрирован: Чт май 04, 2006 00:53
Сообщения: 5062
Откуда: был Крым, теперь Новосибирск
Благодарил (а): 23 раз.
Поблагодарили: 63 раз.
вопрос писал(а):
вместо того, чтобы опеределение переменной давало одну переменную, типа
: VARIABLE CREATE , DOES> ;
жеательно, чтобы оно опеределяло несколько слов одновременно, я хотел бы получать слова
>СЛОВО - помещение значения в переменную
СЛОВО+ - прибавление значения к пременной,


вобщем я понимаю ваше желание, но оно не нужно, точнее неуниверсально.
А что, если полей будет 10? 20? больше? значков не напасешься :)
кроме того, ведь в каждом конкретном случае может быть удобнее свой синтаксис иметь, а не просто добавление стандартных значков,
поэтому мне кажется что делать либо так:
: sample> 0 sample ;
: >sample 1 sample ;
....
и так далее. Либо создать порождающее слово типа:

<pre>
: methoods ( / name names --> )
0 >R '
BEGIN NextWord DUP WHILE
S: R@ LIT, DUP COMPILE, [COMPILE] ;
1 R+
REPEAT RDROP DROP ;
</pre>
и писать:
methoods sample sample> >sample ....

или так:
methoods sample get put change
или так:
methoods sample clear redraw moveto point ....

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


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

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

_________________
понимаю некоторую бестолковость некоторых вопросов


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

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

делалось для форка. В принципе можно перенести на СПФ.

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


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

Зарегистрирован: Вт май 09, 2006 12:31
Сообщения: 3438
Благодарил (а): 5 раз.
Поблагодарили: 16 раз.
mOleg писал(а):
вопрос писал(а):
работает ли это вне форка?

делалось для форка. В принципе можно перенести на СПФ.

А почему бы ему сразу не соответсвовать старндарту?

_________________
понимаю некоторую бестолковость некоторых вопросов


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

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

какому такому стандарту?
стандарту на что?

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


Вернуться к началу
 Профиль Отправить личное сообщение  
Ответить с цитатой  
 Заголовок сообщения:
СообщениеДобавлено: Вс янв 18, 2009 17:01 
Не в сети

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

это я так, размышляю, что если бы все форт-решения сразу были бы совместимы.

_________________
понимаю некоторую бестолковость некоторых вопросов


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

Зарегистрирован: Пт дек 26, 2008 21:16
Сообщения: 412
Откуда: Великий Новгород
Благодарил (а): 9 раз.
Поблагодарили: 4 раз.
Код:
: multi CREATE 10 ALLOT
DOES>
OVER 1 = IF ." первый метод" EXIT THEN
OVER 2 = IF ." второй метод" EXIT THEN
и т.д.   .................
;

А так чем хуже :roll:
Вроде тоже работает .


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

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

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

_Harry писал(а):
: multi CREATE 10 ALLOT
DOES>
OVER 1 = IF ." первый метод" EXIT THEN
OVER 2 = IF ." второй метод" EXIT THEN
и т.д.   .................
;

ну, во-первых, медленнее и значительно,
во-вторых, менее наглядно (излишний синтаксис).

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


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

Зарегистрирован: Вт май 09, 2006 12:31
Сообщения: 3438
Благодарил (а): 5 раз.
Поблагодарили: 16 раз.
Цитата:
дело в тот, что именно реализация низкоуровневых стурктур и виртуальной машины индивидуальны для каждой системы, и стандартизировать этот момент просто нереально.
множественный DOES>
- это уже не самый нижний уровень

_________________
понимаю некоторую бестолковость некоторых вопросов


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

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

;) как и обычный DOES> это уровень нижний (некуда ниже) полностью зависит от типа ШК, используемой модели памяти.

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


Вернуться к началу
 Профиль Отправить личное сообщение  
Ответить с цитатой  
 Заголовок сообщения:
СообщениеДобавлено: Пн янв 19, 2009 19:41 
Не в сети

Зарегистрирован: Вт май 09, 2006 12:31
Сообщения: 3438
Благодарил (а): 5 раз.
Поблагодарили: 16 раз.
mOleg писал(а):
вопрос писал(а):
множественный DOES>
- это уже не самый нижний уровень

;) как и обычный DOES> это уровень нижний (некуда ниже) полностью зависит от типа ШК, используемой модели памяти.

тем не менее, нужно искать тфинт, который отличал бы множественный от единичного и давал бы преносимость ИМХО

_________________
понимаю некоторую бестолковость некоторых вопросов


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

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

странно сформулировано, однако.
множественный отличается регистром: does> (для множественного) и DOES> для классического :)
переносимость возможна лишь между однотипными системами - это для любых видов ветвлений, кстати, даже для простейшено IF который так же зависит от системы и никакой стандарт тут не сможет помочь.

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


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

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


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

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


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

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