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 писал(а):
отказ от контексных словарей и неудобной работы с ними.

От интересно почему автор решил что его способ удобнее. :!: :?:
Со словарями как раз легко и просто разобраться.
А в предложеных деревьях по моему так запутаешься что сам на дерево полезеш :D
Такое у меня создалось впечатление :roll:

Автор:  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/