Forth и другие саморасширяющиеся системы программирования Locations of visitors to this page
Текущее время: Вс май 27, 2018 19:41

...
Google Search
Forth-FAQ Spy Grafic

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




Начать новую тему Ответить на тему  [ Сообщений: 5 ] 
Автор Сообщение
 Заголовок сообщения: перемещение слов в другой словарь
СообщениеДобавлено: Вс авг 09, 2009 18:35 
Не в сети
Moderator
Moderator
Аватара пользователя

Зарегистрирован: Чт май 04, 2006 00:53
Сообщения: 4917
Откуда: был Крым, теперь Новосибирск
Благодарил (а): 18 раз.
Поблагодарили: 56 раз.
В СМАЛ32 было очень удобно наводить порядок в словарях после сборки текста библиотеки.
то есть, определялись все нужные слова в текущем словаре, а потом все не нужные для работы слова прятались, к примеру в HIDDEN.
Данная либа предназначена для того же, к примеру:

>VOCAB HIDDEN WithVoc unlink-hash unlink-last
переместит слова: WithVoc unlink-hash unlink-last
из текущего словаря в HIDDEN
Соответственно, переносить слова можно только между статическими словарями.

[pre]\ 09.08.2009 ~mOleg
\ Сopyright [C] 2009 mOleg mininoleg@yahoo.com
\ перемещение слов в другой словарь

vocs/ vocadd.fts

\ найти vid словаря по его имени
: FINDVOC ( asc # --> vid | 0 )
D>L VOC-LIST
BEGIN A@ *WHILE
DUP voc-name> DL@ COMPARE WHILE
off_vlink
REPEAT
THEN LDROP LDROP ;

\ можно ли переносить слово между словарями
: ?STATIC ( vid --> flag )
off_vtable A@ [ ALSO FORTH CONTEXT @ PREVIOUS off_vtable A@ LIT, ] = ;

\ удалить слово из цепочки LAST указанного словаря
: unlink-last ( lfa vid --> )
DDUP off_last A@ = IF SWAP LINK> SWAP off_last A! ;THEN
SWAP >L off_last A@ DUP
BEGIN LINK> *WHILE
DUP L@ <> WHILE
NIP DUP
REPEAT LINK> SWAP to_link off_link A! LDROP
;THEN ERROR" Данное слово в указанном словаре не обнаружено!" ;

\ удалить слово из треды указанного словаря
: unlink-hash ( lfa vid --> )
OVER ID>ASC ROT FindThread \ --> lfa thread
DDUP A@ = IF SWAP LINK> SWAP A! ;THEN
SWAP >L A@ DUP
BEGIN to_link off_thread A@ *WHILE
DUP L@ <> WHILE
NIP DUP
REPEAT to_link off_thread A@ SWAP to_link off_thread A! LDROP
;THEN ERROR" Данное слово в указанном словаре не обнаружено!" ;

\ извлечь слово Word из текущего словаря
\ все связи слова обрываются
: EXTRACT ( asc # vid --> lfa )
DUP >L (voc-search) *IF DUP L@ unlink-last DUP L> unlink-hash ;THEN
ERROR" Слово не найдено в текущем словаре!" ;

\ переместить слово word из текущего словаря в указанный Vocab
: W>VOC ( vid Word --> )
*IF DUP ?STATIC GET-CURRENT ?STATIC AND
IF NEXT-WORD GET-CURRENT EXTRACT linkto ;THEN
ERROR" Слова можно перемещать только между статическими словарями!"
;THEN ERROR" Не верно задано имя целевого словаря!" ;

\ переместить в указанный словарь с именем voc слово word
\ имя словаря должно быть уникальным, либо, слово будет перенесено в последний
\ созданный словарь с данным именем
: >VOC ( / voc word --> ) NEXT-WORD FINDVOC W>VOC ;

\ перемещать в указанный vid словарь слова до исчерпания входного потока
:> WithVoc ( l: vid / word1 .. wordn --> l: vid )
BEGIN SeeForw NIP WHILE L@ W>VOC REPEAT ;

\ переместить список слов в указанный словарь
: >VOCAB ( / Vocab Name1 Name2 .. NameN --> )
NEXT-WORD FINDVOC
*IF >L WithVoc Cr_ PARSE ROT >L StrSource L> EvalSrcWith LDROP ;THEN
ERROR" Ожидается имя словаря" ;

\ пример использования:
\ >VOCAB HIDDEN WithVoc unlink-hash unlink-last
\ ALSO HIDDEN WORDS[/pre]

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


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

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


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

Зарегистрирован: Вс июн 21, 2009 19:11
Сообщения: 81
Откуда: Н.Новгород
Благодарил (а): 0 раз.
Поблагодарили: 0 раз.
А как насчёт автоматической переупаковки словаря?
В одном из фортОв видел такое - определяется корневое слово и собирается новый словарь из входящих в него слов.
Очень полезно для конечной сборки, особенно применительно к эмбеду (у кого чего болит :)


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

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

это называется TURNKEY , есть в СМАЛ32 8) Хотелось бы сделать и для форка, но пока еще для этого не все готово.

В данном случае слово физически не перемещается, а просто правятся связи.

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


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

Зарегистрирован: Чт май 04, 2006 00:53
Сообщения: 4917
Откуда: был Крым, теперь Новосибирск
Благодарил (а): 18 раз.
Поблагодарили: 56 раз.
обнаружены и исправлены ошибки. Следующий код в последней src4-mc10-b229.zip сборке.
[pre]\ 09.08.2009 ~mOleg
\ Сopyright [C] 2009 mOleg mininoleg@yahoo.com
\ перемещение слов в другой словарь

vocs/ vocadd.fts
vocs/ vocab.fts
string/ add.fts
branch/ handlers.fts

ALSO HIDDEN DEFINITIONS

\ является ли словарь статическим словарем,
\ находящимся в базовом пространстве кода\данных
: ?STATIC ( vid --> flag )
off_vtable A@
[ ALSO FORTH CONTEXT @ PREVIOUS off_vtable A@ LIT, ] =
;

\ удалить слово из цепочки LAST указанного словаря
: unlink-last ( lfa vid --> )
DDUP off_last A@ = IF SWAP LINK> SWAP off_last A! ;THEN
SWAP >L off_last A@ DUP
BEGIN LINK> *WHILE
DUP L@ <> WHILE
NIP DUP
REPEAT LINK> SWAP to_link off_link A! LDROP
;THEN ERROR" Данное слово в указанном словаре не обнаружено!" ;

\ удалить слово из треды указанного словаря
: unlink-hash ( lfa vid --> )
OVER ID>ASC ROT FindThread \ --> lfa thread
DDUP A@ = IF SWAP to_link off_thread A@ SWAP A! ;THEN
SWAP >L A@ DUP
BEGIN to_link off_thread A@ *WHILE
DUP L@ <> WHILE
NIP DUP
REPEAT to_link off_thread A@ SWAP to_link off_thread A! LDROP
;THEN ERROR" Данное слово в указанном словаре не обнаружено!" ;

ALSO FORTH DEFINITIONS

\ извлечь слово Word из текущего словаря
\ все связи слова обрываются
: EXTRACT ( asc # vid --> lfa )
DUP >L (voc-search) *IF DUP L@ unlink-last DUP L> unlink-hash ;THEN
ERROR" Данное слово в указанном словаре не обнаружено!" ;

\ переместить слова name1 ... namen из текущего словаря в указанный vocab
: >VOCAB ( / vocab name1 ... namen --> )
NEXT-WORD FINDVOC \ --> vid
*IF DUP ?STATIC GET-CURRENT ?STATIC AND
IF >L <: ( asc # --> )
GET-CURRENT EXTRACT L@ SWAP linkto
;> WithRest
LDROP
;THEN
ERROR" Слова можно перемещать только между статическими словарями!"
;THEN ERROR" Не верно задано имя целевого словаря!" ;

PREVIOUS RECENT[/pre]

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


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

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


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

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


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

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