Forth http://fforum.winglion.ru/ |
|
Борьба со словарями! http://fforum.winglion.ru/viewtopic.php?f=2&t=2639 |
Страница 1 из 4 |
Автор: | Antender [ Вт авг 24, 2010 21:20 ] |
Заголовок сообщения: | Борьба со словарями! |
Додумался до простой, но интересной мысли: Если изменить в словарной статье LFA - можно получить не список слов, а дерево, то чего не хватало многим фортерам: 1 viewtopic.php?f=25&t=2097&start=15 в этой теме обсуждали иерархическое представление программы - более наглядно 2 можно отказаться от контекстных словарей 3 предыдуший вариант поиска слов продолжает работать 4 упрощённая процедура определения порядка поиска слов 5 подходит под затачивание форта, как проблемно-ориентированного языка Как это работает: В поле LFA указываем не банальную ссылку на предыдущее слово, а ссылку на слово-родитель ( т.е. на точку привязки ) в виде xt. Заставляем программиста указывать слово родитель перед компиляцией т.е. : родитель : новое_слово слово1 слово2 ; родитель заносится в переменную, а затем проставляется в LFA Во главе иерархии слов, как в Delphi TObject - NOOP В переменную "текущий словарь" заносится xt слова с которого начинается поиск FIND-PARENT ( теперь стандартное слово поиска ) проверяет слово - и если не находит, передвигается к слову родителю и так до NOOP, у NOOP в LFA 0 - конец поиска, NOTFOUND Старый способ поиска через слово FIND такжк работает ( т.к. организация в виде списка сохраняется созданием отдельного поля связи либо использованием спец символа как признака начала статьи, например: FIND смотрит последнее слово, затем посимвольно читает список до спец символа - признака словарной статьи, смотрит эту статью и.т.д ) |
Автор: | Hishnik [ Вт авг 24, 2010 21:33 ] |
Заголовок сообщения: | Re: Борьба со словарями! |
Код: : dup : function1 ; \ надо же от чего-то отталкиваться
: function1 : function2 ; \ теперь основываем еще одну функцию : function1 : function3 ; \ и еще одну : function2 : function4 function2 function3 ; \ упс, function3 не видна в этом порядке поиска : function3 : function4 \ может, так? function2 function3 ; \ упс, теперь function2 не видна |
Автор: | Antender [ Вт авг 24, 2010 21:39 ] |
Заголовок сообщения: | Re: Борьба со словарями! |
Пример некорректный: иерархия выстраивается не за счёт перечисления всех родственников слова до седьмого колена Мы указываем только родительское слово - как в Дельфях И выстраивается дерево состоящее из разветвлений и вложенных списков Синтаксис также другой: указывается родитель, а затем идёт стандартная процедура создания слова Расширение почти не затрагивает основные принципы работы форта, но добавляет новых возможностей. : function1 : function2 ; - до такого маразма надо было додуматься! Как это в форте можно начинать определение не закончив предыдущее? |
Автор: | chess [ Вт авг 24, 2010 22:15 ] |
Заголовок сообщения: | Re: Борьба со словарями! |
Antender писал(а): 2 можно отказаться от контекстных словарей можно их просто не использовать Понятие слово-родитель для форта бессмысленно - у каждого слова может быть уйма родителей или ни одного. Больше толку будет в возможности вносить часть семантики в сами имена слов (комбинаторное именование). Это и сейчас можно, но есть проблемы с опознаванием таких имен в плане больших чем для обычных слов затрат времени на поиск. |
Автор: | Antender [ Вт авг 24, 2010 22:23 ] |
Заголовок сообщения: | Re: Борьба со словарями! |
Цитата: Цитата: 2 можно отказаться от контекстных словарей Точнее они просто будут не нужны Родитель - неудачная метафора - скорее " слово в словаре к которому привязан поиск в словаре относительно текущего слова " И всё. Здесь обсуждается не способ изменения принципов работы слов, а упорядочивание поиска в форме дерева при минимальном изменении существующего механизма поиска и отказ от контексных словарей и неудобной работы с ними. Кстати здесь "родитель" один т.к. наследуется не код и не внутряняя организация слова , а место в иерархии слов. Это не ООП наследование. |
Автор: | Antender [ Вт авг 24, 2010 22:48 ] |
Заголовок сообщения: | Re: Борьба со словарями! |
Пример: NOOP +---------------------------------------+ основная ветвь слово 1 | | ветвь основная ветвь слово 2 | +-------------------------------------------------------------------------+ | | основная ветвь слово 3 | | ветвь +---------------------------------------+ | | ветвь 1 слово 1 ветвь 2 слово 1 | | ветвь 1 слово 2 ветвь 2 слово 2 | +------------------+ | | ветвь 3 слово 1 ветвь 4 слово 1 | | ветвь 3 слово 2 ветвь 5 слово 2 слово 2 слову 3 родитель в одной ветви слово 1 слову 2 родитель в одной ветви слово 3 основной ветви родитель для двух слов (ветвь 3-1) и (ветвь 3-2) и.т.д. Поиск слова ведётся с xt указанном в некоей переменной - допустим S Заносим в S слово 4-1 Поиск пройдёт по 4-1, 1-2, 1-1, осн-3, осн-2, осн-1, NOOP Заносим в S слово 2-2 Поиск пройдёт по 2-2, 2-1, осн-3, осн-2, осн-1, NOOP Т.е. поиск от ветки в кроне дерева до корня NOOP Таким образом: 1 Словарь только один, нет контекстных 2 гибкая процедура поиска из любого места словаря 3 нет Context - добавлять можно в любую часть словаря созданием новой ветви 4 Организация по прежнему в виде линейной структуры в памяти 5 новые слова при помощи переназначения ссылок можно добавить В ЛЮБУЮ ЧАСТЬ СЛОВАРЯ! |
Автор: | Hishnik [ Вт авг 24, 2010 22:56 ] |
Заголовок сообщения: | Re: Борьба со словарями! |
Antender писал(а): : function1 : function2 ; - до такого маразма надо было додуматься! Как это в форте можно начинать определение не закончив предыдущее? Смотрим на верхний пост. Antender писал(а): Заставляем программиста указывать слово родитель перед компиляцией т.е. : родитель : новое_слово слово1 слово2 ; Это кто писал? И про маразм - разновидность самокритики? |
Автор: | Antender [ Вт авг 24, 2010 23:02 ] |
Заголовок сообщения: | Re: Борьба со словарями! |
Признаю ошибку, погорячился В идеале выглядит так т.е. : родитель : новое_слово слово1 слово2 ; кроме того родитель не слово - родитель xt просто указание куда привязывать компилируемое слово |
Автор: | Hishnik [ Вт авг 24, 2010 23:07 ] |
Заголовок сообщения: | Re: Борьба со словарями! |
Теперь представляем "обычного программиста", который решил не задумываться о выстраивании цепочек поиска с каждым новым словом. Что он сделает? Скорее всего, напишет такую штуку, которая будет "пристегивать" новое слово сразу за предыдущим. И получим, что есть сейчас. Кроме того, сейчас уже есть слово ":", которое представляет собой равноправное слово Форта, и выполняет вполне определенные, запрограммированные при его описании действия - в частности, прописывает LFA. Никто не запрещает написать еще одно слово, создающее словарную статью, но с другим именем, и вот оно будет писать в LFA нечто со стека. Ломать и бороться, таким образом, просто не с чем. |
Автор: | Antender [ Вт авг 24, 2010 23:22 ] |
Заголовок сообщения: | Re: Борьба со словарями! |
1 Очень удобно пристёгивать библиотеки Нужна в задаче - пристёгиваем до или после нужных слов Возможность прикреплять слова в произвольном месте словаря - ИМХО такого пока ещё не было 2 Дерево - разветвлённый список 3 Менее муторная система смены текущего набора слов Ломать придётся т.к. меняется интерпретатор ( смотрит с чего начинать поиск по переменной ), меняется словарная статья ( немного ) Придумано под влиянием viewtopic.php?f=18&t=705&view=next 10 пост viewtopic.php?f=9&t=148 |
Автор: | Antender [ Вт авг 24, 2010 23:24 ] |
Заголовок сообщения: | Re: Борьба со словарями! |
viewtopic.php?f=36&t=1851 А это вообще тоже самое - как раньше не заметил? Тем не менее способ работы придумал. |
Автор: | Hishnik [ Вт авг 24, 2010 23:41 ] |
Заголовок сообщения: | Re: Борьба со словарями! |
Antender писал(а): Возможность прикреплять слова в произвольном месте словаря - ИМХО такого пока ещё не было А дойти до произвольного места, и там загрузить файл - это не прикрепление в произвольном месте? Antender писал(а): Ломать придётся т.к. меняется интерпретатор ( смотрит с чего начинать поиск по переменной ), меняется словарная статья ( немного ) Тут ровным счетом ничего не меняется, поскольку речь идет только о способах записи в LFA каких-то значений, отличных от тех, которые пишутся при компиляции слов через CREATE. |
Автор: | Antender [ Ср авг 25, 2010 09:32 ] |
Заголовок сообщения: | Re: Борьба со словарями! |
Дойти до произвольного места, загрузить библиотеку, загрузить вторую не мешающую первой, затем загрузить третью доступную для первых двух. Интерпретатор смотрит xt в переменной поиска ( с какого слова начинать ) - немного по другому работает. Словарь в виде дерева раньше уже предлагался - 2 поста вверх, по ссылке. Обычному программисту придумывать ничего не придётся - слово ; выдаст xt созданного слова и в результате получится список внутри дерева. Останется только указать куда список подключать. |
Автор: | _Harry [ Ср авг 25, 2010 10:06 ] |
Заголовок сообщения: | Re: Борьба со словарями! |
Antender писал(а): отказ от контексных словарей и неудобной работы с ними. От интересно почему автор решил что его способ удобнее. Со словарями как раз легко и просто разобраться. А в предложеных деревьях по моему так запутаешься что сам на дерево полезеш Такое у меня создалось впечатление |
Автор: | mOleg [ Ср авг 25, 2010 10:09 ] |
Заголовок сообщения: | Re: Борьба со словарями! |
Antender писал(а): Додумался до простой, но интересной мысли: Если изменить в словарной статье LFA -можно получить не список слов, а дерево, то чего не хватало многим фортерам:1 viewtopic.php?f=25&t=2097&start=15 Кому не хватало - тот уже сделал! Правда дерево не воротил, но словари могут хранить любые данные, кстати, с LFA вы погорячились Когда я сказал любые, я имел ввиду, то словарь может работать с неперечислимыми именами(например, с числами), а так же с именами генерируемыми под искомое (например, работа с функциями dll, как со словами, когда код, вызывающий слова генерируется при первой попытке вызова слова). Если интересно, вам сюда |
Страница 1 из 4 | Часовой пояс: UTC + 3 часа [ Летнее время ] |
Powered by phpBB © 2000, 2002, 2005, 2007 phpBB Group http://www.phpbb.com/ |