Forth и другие саморасширяющиеся системы программирования Locations of visitors to this page
Текущее время: Вс апр 18, 2021 15:29

...
Google Search
Forth-FAQ Spy Grafic

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




Начать новую тему Ответить на тему  [ Сообщений: 13 ] 
Автор Сообщение
 Заголовок сообщения: ALSO в SPF
СообщениеДобавлено: Ср мар 21, 2007 10:42 
Не в сети

Зарегистрирован: Ср сен 13, 2006 10:06
Сообщения: 636
Откуда: Омск
Благодарил (а): 0 раз.
Поблагодарили: 3 раз.
Не могу понять как так получается ALSO добавляет словарь в список для поиска :
Код:
VOCABULARU new
ALSO new


но по исходному коду
Код:
: ALSO GET-ORDER 1+ OVER SWAP SET-ORDER ;

оно должно последний в списке словарь дублировать.


Вернуться к началу
 Профиль Отправить личное сообщение  
Ответить с цитатой  
 Заголовок сообщения:
СообщениеДобавлено: Ср мар 21, 2007 12:03 
Не в сети
Аватара пользователя

Зарегистрирован: Чт июл 20, 2006 11:31
Сообщения: 2137
Откуда: Екб
Благодарил (а): 0 раз.
Поблагодарили: 40 раз.
Pretorian писал(а):
Не могу понять как так получается ALSO добавляет словарь в список для поиска :
VOCABULARU new
ALSO new

ALSO не добавляет новый словарь в список поиска, а как ты правильно понял дублирует первый словарь в списке поиска. То есть если просто выполнить ALSO, то слово два раза будет искаться в словаре, поставленным первым в список поиска.
В записи ALSO new сначала работает слово ALSO - оно первый в списке поиска словарь дублирует(ставит его первым в список поиска). Затем работает слово new (слово, созданное с помощью VOCABULARY).
Оно(new) заменяет первый словарь в списке поиска на словарь c именем new. Таким образом вновь созданный словарь new становится первым в списке поиска. Остальной порядок поиска не изменяется(для чего и использовали ALSO - если бы было без него( просто new) то из списка поиска изчез бы словарь, который был до этого первым в списке поиска).
В Форте (как правило) все слова работают отдельно, друг за другом. :o

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


Вернуться к началу
 Профиль Отправить личное сообщение  
Ответить с цитатой  
 Заголовок сообщения:
СообщениеДобавлено: Ср мар 21, 2007 14:43 
Хех.. Поздравляю, Pretorian. Это только человек который уже попривык к Форту может спросить такой вопрос. Так у него в голове будет непроизвольно возникать аналогия с Фортовым стеком и то что ALSO это "типа тоже самое" что и DUP.

А прикол в том что когда мы пишем "new", то он записывается не в новый элемент порядка поиска. А в верхний, перезаписывая его. Это отличается от обычного Фортовского:

Код:
1 2 3


.. и тогда у нас будет на стеке три числа. А если у нас будет три словаря (порождённые через VOCABULARY): ниф-ниф, наф-наф и нуф-нуф, то после:

Код:
ниф-ниф наф-наф нуф-нуф


... глубина порядка поиска никак не изменится. А на вершине останется "последний герой": нуф-нуф.

Глубину надо изменять вручную, как раз через ALSO. Тогда как со числами на стеке она увеличивается автоматически.

PS. Опоздал...


Вернуться к началу
  
Ответить с цитатой  
 Заголовок сообщения:
СообщениеДобавлено: Ср мар 21, 2007 14:59 
Не в сети

Зарегистрирован: Сб май 06, 2006 12:01
Сообщения: 959
Откуда: Украина, Харьков
Благодарил (а): 2 раз.
Поблагодарили: 7 раз.
Очень хочется спросить, а зачем сделали так? Получилось ведь не по-фортовски.
Я так и не смог себя заставить реализовать такое... :(

_________________
With best wishes, in4.


Вернуться к началу
 Профиль Отправить личное сообщение  
Ответить с цитатой  
 Заголовок сообщения:
СообщениеДобавлено: Ср мар 21, 2007 15:30 
Скорее всего (я правда тут буду щас пальцем в небо) из-за того что порядок поиска раньше включал в себя только один CURRENT, а потом когда сделали его списком то нарушать "старое" поведение (когда словарь при выполнении затирал CURRENT собой) не стали.


Вернуться к началу
  
Ответить с цитатой  
 Заголовок сообщения:
СообщениеДобавлено: Ср мар 21, 2007 16:37 
Не в сети
Administrator
Administrator
Аватара пользователя

Зарегистрирован: Вт май 02, 2006 13:19
Сообщения: 3565
Откуда: St.Petersburg
Благодарил (а): 4 раз.
Поблагодарили: 72 раз.
profiT писал(а):
Глубину надо изменять вручную, как раз через ALSO. Тогда как со числами на стеке она увеличивается автоматически.

ALSO глубину увеличивает на единичку, любой new - не изменяет.
Осталось разобраться, а какое же слово глубину уменьшает?
И что станет, если глубина окажется нулем?

_________________
С уважением, WingLion
Forth-CPU . RuF09WE
Мой Форт
Отсутствие бана это не заслуга юзера, а недоработка модератора (с)


Вернуться к началу
 Профиль Отправить личное сообщение  
Ответить с цитатой  
 Заголовок сообщения:
СообщениеДобавлено: Ср мар 21, 2007 16:50 
WingLion писал(а):
Осталось разобраться, а какое же слово глубину уменьшает?

PREVIOUS.


Вернуться к началу
  
Ответить с цитатой  
 Заголовок сообщения:
СообщениеДобавлено: Ср мар 21, 2007 16:51 
Не в сети
Аватара пользователя

Зарегистрирован: Чт июл 20, 2006 11:31
Сообщения: 2137
Откуда: Екб
Благодарил (а): 0 раз.
Поблагодарили: 40 раз.
WingLion писал(а):
Осталось разобраться, а какое же слово глубину уменьшает?
И что станет, если глубина окажется нулем?

Глубина поиска уменьшается на 1 словом PREVIOUS, которое первый в списке поиска словарь удаляет из списка после чего первым в списке поиска становится бывший вторым словарь.
Если список поиска перед выполнением PREVIOUS пуст, то возникает неопределенная ситуация(а мало-ли таких ситуаций может в Форте возникать). :weep;
PS: не успел.

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


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

Зарегистрирован: Чт июл 20, 2006 11:31
Сообщения: 2137
Откуда: Екб
Благодарил (а): 0 раз.
Поблагодарили: 40 раз.
profiT писал(а):
А прикол в том что когда мы пишем "new", то он записывается не в новый элемент порядка поиска. А в верхний, перезаписывая его. Это отличается от обычного Фортовского:

В форте можно сделать так и для стека. Пример для константы которая "заменяет" верхний элемент на стеке.
Код:
CODE _NEW-CONSTANT-CODE
     POP EAX
     MOV  EAX, [EAX]
     RET
END-CODE

: NEW-CONST ( x "<spaces>name" -- )
  HEADER
  ['] _NEW-CONSTANT-CODE COMPILE, ,
;
5 NEW-CONST FIVE
И теперь
( 1 2 3 ) FIVE  ( 1 2 5 )

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


Последний раз редактировалось chess Ср мар 21, 2007 17:32, всего редактировалось 1 раз.

Вернуться к началу
 Профиль Отправить личное сообщение  
Ответить с цитатой  
 Заголовок сообщения:
СообщениеДобавлено: Ср мар 21, 2007 17:19 
Не в сети
Administrator
Administrator
Аватара пользователя

Зарегистрирован: Вт май 02, 2006 13:19
Сообщения: 3565
Откуда: St.Petersburg
Благодарил (а): 4 раз.
Поблагодарили: 72 раз.
profiT писал(а):
PS. Опоздал...

chess писал(а):
PS: не успел.


:)) :)) :)) :))

Короче, совершенно непоследовательная система.
В одном месте запутано в угоду совместимости,
в другом запутано без оглядки на совместимость... :shock:

_________________
С уважением, WingLion
Forth-CPU . RuF09WE
Мой Форт
Отсутствие бана это не заслуга юзера, а недоработка модератора (с)


Вернуться к началу
 Профиль Отправить личное сообщение  
Ответить с цитатой  
 Заголовок сообщения:
СообщениеДобавлено: Чт мар 22, 2007 00:21 
Не в сети

Зарегистрирован: Сб май 06, 2006 12:01
Сообщения: 959
Откуда: Украина, Харьков
Благодарил (а): 2 раз.
Поблагодарили: 7 раз.
Значит, надо сделать нормально и написать слой совместимости через этот кривой набор... ;)

_________________
With best wishes, in4.


Вернуться к началу
 Профиль Отправить личное сообщение  
Ответить с цитатой  
 Заголовок сообщения:
СообщениеДобавлено: Чт мар 22, 2007 11:05 
Не в сети
Аватара пользователя

Зарегистрирован: Чт июл 20, 2006 11:31
Сообщения: 2137
Откуда: Екб
Благодарил (а): 0 раз.
Поблагодарили: 40 раз.
in4 писал(а):
Значит, надо сделать нормально и написать слой совместимости через этот кривой набор...

Особой кривости не видно. Работать можно.

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


Вернуться к началу
 Профиль Отправить личное сообщение  
Ответить с цитатой  
 Заголовок сообщения:
СообщениеДобавлено: Пт май 04, 2007 22:35 
Не в сети

Зарегистрирован: Сб янв 27, 2007 22:00
Сообщения: 106
Благодарил (а): 0 раз.
Поблагодарили: 0 раз.
WingLion писал(а):
Короче, совершенно непоследовательная система.
В одном месте запутано в угоду совместимости,
в другом запутано без оглядки на совместимость... :shock:

Да, стандарт F93 рождался в результате борьбы нескольких реализаций и представляет собой компромисс, который никого не удовлетворил.


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

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


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

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


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

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