Forth и другие саморасширяющиеся системы программирования Locations of visitors to this page
Текущее время: Пт мар 29, 2024 01:31

...
Google Search
Forth-FAQ Spy Grafic

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




Начать новую тему Ответить на тему  [ Сообщений: 56 ]  На страницу Пред.  1, 2, 3, 4
Автор Сообщение
 Заголовок сообщения: Re: Борьба со словарями!
СообщениеДобавлено: Сб авг 28, 2010 10:07 
Не в сети
Аватара пользователя

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

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

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


Вернуться к началу
 Профиль Отправить личное сообщение  
Ответить с цитатой  
 Заголовок сообщения: Re: Борьба со словарями!
СообщениеДобавлено: Сб авг 28, 2010 16:19 
Не в сети

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


Вернуться к началу
 Профиль Отправить личное сообщение  
Ответить с цитатой  
 Заголовок сообщения: Re: Борьба со словарями!
СообщениеДобавлено: Сб авг 28, 2010 18:23 
Не в сети
Administrator
Administrator
Аватара пользователя

Зарегистрирован: Вт май 02, 2006 22:48
Сообщения: 7960
Благодарил (а): 25 раз.
Поблагодарили: 144 раз.
chess писал(а):
Я против реализаций контекста, использование которых основаны на задействовании внимания программиста.

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


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

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

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

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


Вернуться к началу
 Профиль Отправить личное сообщение  
Ответить с цитатой  
 Заголовок сообщения: Re: Борьба со словарями!
СообщениеДобавлено: Вс авг 29, 2010 11:24 
Не в сети
Аватара пользователя

Зарегистрирован: Пт дек 26, 2008 21:16
Сообщения: 412
Откуда: Великий Новгород
Благодарил (а): 9 раз.
Поблагодарили: 4 раз.
mOleg писал(а):
Тогда я вообще не вижу причин разведения этого, ээ, обсуждения.

Так ведь тема то какая "борьба со словарями"
Есть ведь мнение что надо с ними бороться :))
Представляю себе на форуме автомобилистов кто нибудь предложил бы бороться с рулем например.
Кстати автор темы давно молчит интересно реализовал он свои идеи?
Интересно бы и на код взглянуть. Как раз это и есть самое ценное (вернее этого пока нет :roll: )


Вернуться к началу
 Профиль Отправить личное сообщение  
Ответить с цитатой  
 Заголовок сообщения: Re: Борьба со словарями!
СообщениеДобавлено: Вс авг 29, 2010 12:38 
Не в сети

Зарегистрирован: Вс апр 25, 2010 11:14
Сообщения: 200
Откуда: Москва
Благодарил (а): 0 раз.
Поблагодарили: 2 раз.
Последняя редакция: 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]


Последний раз редактировалось Antender Пн авг 30, 2010 14:31, всего редактировалось 4 раз(а).

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

Зарегистрирован: Пт дек 26, 2008 21:16
Сообщения: 412
Откуда: Великий Новгород
Благодарил (а): 9 раз.
Поблагодарили: 4 раз.
Antender писал(а):
Уже есть! Как раз написал.

Хм замечательно, только.... :roll:
Желательно и пример использования изобретения.
Показывающий приимущество данного метода, а... :?:


Вернуться к началу
 Профиль Отправить личное сообщение  
Ответить с цитатой  
 Заголовок сообщения: Re: Борьба со словарями!
СообщениеДобавлено: Пн авг 30, 2010 14:19 
Не в сети

Зарегистрирован: Вс апр 25, 2010 11:14
Сообщения: 200
Откуда: Москва
Благодарил (а): 0 раз.
Поблагодарили: 2 раз.
ВНИМАНИЕ! Библиотека периодически обновляется.
В начале будет указываться дата последнего изменения.

То, что не работает:
Замена основного поиска - т.к. вектор FIND системой не используется, а SFIND, увы, не заменишь.

Слова для использования:
1 : , ; ,;BR

Слова в словаре ---->
В 1 A--------------------------B---C----D
е 2 +--A1---B1---C1
т 3 +-------------A2---B2
в
и
|
|
|
v


с точки зрения обычного словаря
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, ветки сольются, дерево станет таким

Слова в словаре ---->
В 1 A--------------------------B---C----D
е 2 +--A1---B1---C1
т +--A2---B2
в
и
|
|
|
v


точнее таким

Слова в словаре ---->
В 1 A------------------------B---C---D
е 2 +--A1--B1--C1--A2--B2
т
в
и
|
|
|
v


4 BR0 ( "name" -- )

BR0 - обнуляет связь слова на ноль, позволяя создавать отгороженнные от всех остальных слов списки

Пример:

Берём дерево выше и обнуляем A1

BR0 A1

получаем
Слова в словаре ---->
В 1 A------------------------B---C---D
е 2 A1--B1--C1--A2--B2
т
в
и
|
|
|
v

отгороженный список с 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 исполнения

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


Вернуться к началу
 Профиль Отправить личное сообщение  
Ответить с цитатой  
 Заголовок сообщения: Re: Борьба со словарями!
СообщениеДобавлено: Пн авг 30, 2010 14:34 
Не в сети

Зарегистрирован: Вс апр 25, 2010 11:14
Сообщения: 200
Откуда: Москва
Благодарил (а): 0 раз.
Поблагодарили: 2 раз.
Библиотеку нужно вынести в отдельную тему "Библиотека по работе с древовидными словарями" в SPF , а старую стереть за ненадобностью.


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

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

Единственное замечание - подумайте как вы собираетесь обеспечивать стабильную работу системы в рамках принятой в СПФ многопоточности (т.е. когда несколько потоков будет вести поиск в словарях).

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


Вернуться к началу
 Профиль Отправить личное сообщение  
Ответить с цитатой  
 Заголовок сообщения: Re: Борьба со словарями!
СообщениеДобавлено: Пн авг 30, 2010 15:34 
Не в сети

Зарегистрирован: Вс апр 25, 2010 11:14
Сообщения: 200
Откуда: Москва
Благодарил (а): 0 раз.
Поблагодарили: 2 раз.
В данном случае поиску без разницы т.к. он очень похож на SEARCH-WORDLIST, кроме того после начала поиска уже всё равно какое значение имеет (TREEFIND)


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

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


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

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


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

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