Forth http://fforum.winglion.ru/ |
|
Борьба со словарями! http://fforum.winglion.ru/viewtopic.php?f=2&t=2639 |
Страница 4 из 4 |
Автор: | chess [ Сб авг 28, 2010 10:07 ] |
Заголовок сообщения: | Re: Борьба со словарями! |
mOleg писал(а): В реальном мире мы тоже вынуждены учитывать контекст: общаясь с коллегой мы находимся в одном контексте, с продавцем - другой, внутри семьи - третий, и.т. д. Если вы сделали вывод, что я против контекста вообще - то вы ошиблись. Я против реализаций контекста, использование которых основаны на задействовании внимания программиста. Во многих языках программирования, и в естественных языках кстати, контекст опирается на долговременную память а не на кратковременную. В этом их принципиальное отличие от форта с его словарями. |
Автор: | вопрос [ Сб авг 28, 2010 16:19 ] |
Заголовок сообщения: | Re: Борьба со словарями! |
Вообще, любая структура (любой способ организации чего-то) осуществляется в соответствии с некоторым принципом, который находят исходя из некоторой цели (и целесообразности) Бессмысленно спорить, не исходя из цели ИМХО |
Автор: | Hishnik [ Сб авг 28, 2010 18:23 ] |
Заголовок сообщения: | Re: Борьба со словарями! |
chess писал(а): Я против реализаций контекста, использование которых основаны на задействовании внимания программиста. +1. Программист не развлекается с языком, а использует его для решения какой-то задачи. |
Автор: | mOleg [ Сб авг 28, 2010 18:26 ] |
Заголовок сообщения: | Re: Борьба со словарями! |
chess писал(а): Если вы сделали вывод, что я против контекста вообще - то вы ошиблись. Я против реализаций контекста, использование которых основаны на задействовании внимания программиста.Во многих языках программирования, и в естественных языках кстати, контекст опирается надолговременную память а не на кратковременную. В этом их принципиальное отличие от фортас его словарями. Тогда я вообще не вижу причин разведения этого, ээ, обсуждения. Наличие контекста в любом современном форте не заставляет никого его использовать. Вы можете как создать свой рабочий словарь и с ним работать, так и располагать все в словаре FORTH. Если очень мешает, то можно вообще исправить исходник форта и пересобрать с одним единственным словарем, или вообще без словарей. |
Автор: | _Harry [ Вс авг 29, 2010 11:24 ] |
Заголовок сообщения: | Re: Борьба со словарями! |
mOleg писал(а): Тогда я вообще не вижу причин разведения этого, ээ, обсуждения. Так ведь тема то какая "борьба со словарями" Есть ведь мнение что надо с ними бороться Представляю себе на форуме автомобилистов кто нибудь предложил бы бороться с рулем например. Кстати автор темы давно молчит интересно реализовал он свои идеи? Интересно бы и на код взглянуть. Как раз это и есть самое ценное (вернее этого пока нет ) |
Автор: | Antender [ Вс авг 29, 2010 12:38 ] |
Заголовок сообщения: | Re: Борьба со словарями! |
Последняя редакция: 30.07.2010 14:25 Код: [PRE]
\ Библиотека для работы с древовидными словарями. \ Позволяет присоединять компилируемые слова к любой части дерева. \ Для создания новой ветви дерева компилируйте присоединяемое слово при помощи : \ и ;BR "слово-присоединение" . \ Все последующие слова можно добавлять через : и ; . \ Заканчивается создание ветви словом BREND \ Нисходящий поиск по дереву начинается со слова, NFA которого занесено в переменную (TREEFIND). \ ----------Переменные------------------------------------------------- VARIABLE (TREEFIND) \ NFA слова с которого начинается нисходящий поиск по дереву \ ----------Внутренние слова реализации-------------------------------- : BR ( NFA xt -- ) \ изменить LFA слова c NFA на xt ( для отделения ветви ) NEAR_NFA DROP SWAP NAME>L ! ; \ ----------Слова доступные для использования-------------------------- : BRCH ( "name1" "name2" ) \ изменить LFA "name1" на NFA "name2" ' NEAR_NFA DROP ' BR ; : ;BR ( "name" -- ) \ закончить компиляцию новой ветви POSTPONE ; ' LATEST BR ; IMMEDIATE : BRLAST \ делает ветку видимой для поиска LATEST (TREEFIND) ! ; : BRSW ( "name" -- ) \ заменяет начальное слово для поиска на "name" ' NEAR_NFA DROP (TREEFIND) ! ; : BR0 ( "name" ) 0 ' NEAR_NFA DROP NAME>L ! ; \ ----------Внутренние слова реализации--------------------------------- : TREEFIND ( addr u -- 0 | xt 1 | xt -1 ) \ заменяет стандартный FIND (TREEFIND) @ BEGIN ?DUP IF >R 2DUP R@ COUNT COMPARE R> SWAP IF CDR FALSE ELSE NIP NIP DUP NAME> ?IMMEDIATE IF 1 ELSE -1 THEN TRUE THEN ELSE DROP DROP 0 TRUE THEN UNTIL ; [/PRE] |
Автор: | _Harry [ Пн авг 30, 2010 10:03 ] |
Заголовок сообщения: | Re: Борьба со словарями! |
Antender писал(а): Уже есть! Как раз написал. Хм замечательно, только.... Желательно и пример использования изобретения. Показывающий приимущество данного метода, а... |
Автор: | Antender [ Пн авг 30, 2010 14:19 ] |
Заголовок сообщения: | Re: Борьба со словарями! |
ВНИМАНИЕ! Библиотека периодически обновляется. В начале будет указываться дата последнего изменения. То, что не работает: Замена основного поиска - т.к. вектор FIND системой не используется, а SFIND, увы, не заменишь. Слова для использования: 1 : , ; ,;BR Слова в словаре ----> с точки зрения обычного словаря A--A1--B1--C1 A2--B2 B--C--D Как реализовать такое дерево? 1 Отпочковываем дополнительную ветвь начинающуюся с A1 и приделанную к А ( стандартно ) : A1 DUP SWAP DROP ( затем нестандартное закрытие ) ;BR ( затем точка привязки ) A 2 добавляем следующие определения в словарь : B1 DUP SWAP DROP ; : C1 DUP SWAP DROP ; 3 добавляем новую ветку : A2 DUP SWAP DROP ;BR A1 4 добавляем следующее определение : B2 DUP SWAP DROP ; (4 опционально) BRLAST ( для того, чтобы при вызове TREEFIND не прекращал сразу поиск в связи с 0 адресом, начинал цепочку B2--A2--A1--A--- и.т.д) 5 продлеваем основную цепочку : B DUP SWAP DROP ;BR A 6 в дальнейшем добавление слов происходит как обычно 2 BRLAST , BRSW ( "name -- ) Т.к. основной поиск всегда происходит с последнего созданного слова, то в данном случае выглядеть он будет D--C--B--A , остальные ветки для него скрыты TREEFIND'ом можно управлять двумя способами: BRLAST - во время создания, воткнуть после создания слова, с которого начинается поиск BRSW - после создания структуры дерева, указать слово после BRSW, с которого начинается поиск Поиск начинается именно со слова NFA которого в TREEFIND - слова приписанные после него НЕ ПРОСМАТРИВАЮТСЯ. Т.е. можно определять не только ветку для поиска но и положение в ней. 3 BRCH ( "name1" "name2" ) BRCH - меняет привязку слова на ходу, позволяя соединять вместе, разрезать на две, удалять ( в отличие от словарей! ) ветви "name1" - слово которому меняем привязку "name2" - слово - новая привязка Например: BRCH A2 C1 поменяет привязку A2, ветки сольются, дерево станет таким Слова в словаре ----> точнее таким Слова в словаре ----> 4 BR0 ( "name" -- ) BR0 - обнуляет связь слова на ноль, позволяя создавать отгороженнные от всех остальных слов списки Пример: Берём дерево выше и обнуляем A1 BR0 A1 получаем Слова в словаре ----> отгороженный список с A1, при TREEFIND'е начиная с В2 получится цепочка В2--А2--С1--В1--А1 , на А1 поиск обрывается 5 TREEFIND ( addr u -- 0 | xt 1 | xt -1 ) TREEFIND - ищет по текущей ветви и вниз до 0, слово заданное addr и количеством символов u , возвращает 0, если не нашёл , xt и 1 если нашёл, и xt -1 - нашёл слово IMMEDIATE исполнения Т.к. запись в основной поиск не работает - можно использовать как дополнительный поиск, например, как поиск слов для взаимодействия с пользователем, путём отгораживания нужных слов в отдельную ветвь и использования зануления начала этой ветви |
Автор: | Antender [ Пн авг 30, 2010 14:34 ] |
Заголовок сообщения: | Re: Борьба со словарями! |
Библиотеку нужно вынести в отдельную тему "Библиотека по работе с древовидными словарями" в SPF , а старую стереть за ненадобностью. |
Автор: | mOleg [ Пн авг 30, 2010 15:21 ] |
Заголовок сообщения: | Re: Борьба со словарями! |
стирать тему не стоит. Новую тему можете открыть самостоятельно. Единственное замечание - подумайте как вы собираетесь обеспечивать стабильную работу системы в рамках принятой в СПФ многопоточности (т.е. когда несколько потоков будет вести поиск в словарях). |
Автор: | Antender [ Пн авг 30, 2010 15:34 ] |
Заголовок сообщения: | Re: Борьба со словарями! |
В данном случае поиску без разницы т.к. он очень похож на SEARCH-WORDLIST, кроме того после начала поиска уже всё равно какое значение имеет (TREEFIND) |
Страница 4 из 4 | Часовой пояс: UTC + 3 часа [ Летнее время ] |
Powered by phpBB © 2000, 2002, 2005, 2007 phpBB Group http://www.phpbb.com/ |