Forth http://fforum.winglion.ru/ |
|
ALSO в SPF http://fforum.winglion.ru/viewtopic.php?f=18&t=629 |
Страница 1 из 1 |
Автор: | Pretorian [ Ср мар 21, 2007 10:42 ] |
Заголовок сообщения: | ALSO в SPF |
Не могу понять как так получается ALSO добавляет словарь в список для поиска : Код: VOCABULARU new ALSO new но по исходному коду Код: : ALSO GET-ORDER 1+ OVER SWAP SET-ORDER ;
оно должно последний в списке словарь дублировать. |
Автор: | chess [ Ср мар 21, 2007 12:03 ] |
Заголовок сообщения: | |
Pretorian писал(а): Не могу понять как так получается ALSO добавляет словарь в список для поиска :
VOCABULARU new ALSO new ALSO не добавляет новый словарь в список поиска, а как ты правильно понял дублирует первый словарь в списке поиска. То есть если просто выполнить ALSO, то слово два раза будет искаться в словаре, поставленным первым в список поиска. В записи ALSO new сначала работает слово ALSO - оно первый в списке поиска словарь дублирует(ставит его первым в список поиска). Затем работает слово new (слово, созданное с помощью VOCABULARY). Оно(new) заменяет первый словарь в списке поиска на словарь c именем new. Таким образом вновь созданный словарь new становится первым в списке поиска. Остальной порядок поиска не изменяется(для чего и использовали ALSO - если бы было без него( просто new) то из списка поиска изчез бы словарь, который был до этого первым в списке поиска). В Форте (как правило) все слова работают отдельно, друг за другом. |
Автор: | profiT [ Ср мар 21, 2007 14:43 ] |
Заголовок сообщения: | |
Хех.. Поздравляю, Pretorian. Это только человек который уже попривык к Форту может спросить такой вопрос. Так у него в голове будет непроизвольно возникать аналогия с Фортовым стеком и то что ALSO это "типа тоже самое" что и DUP. А прикол в том что когда мы пишем "new", то он записывается не в новый элемент порядка поиска. А в верхний, перезаписывая его. Это отличается от обычного Фортовского: Код: 1 2 3 .. и тогда у нас будет на стеке три числа. А если у нас будет три словаря (порождённые через VOCABULARY): ниф-ниф, наф-наф и нуф-нуф, то после: Код: ниф-ниф наф-наф нуф-нуф
... глубина порядка поиска никак не изменится. А на вершине останется "последний герой": нуф-нуф. Глубину надо изменять вручную, как раз через ALSO. Тогда как со числами на стеке она увеличивается автоматически. PS. Опоздал... |
Автор: | in4 [ Ср мар 21, 2007 14:59 ] |
Заголовок сообщения: | |
Очень хочется спросить, а зачем сделали так? Получилось ведь не по-фортовски. Я так и не смог себя заставить реализовать такое... |
Автор: | profiT [ Ср мар 21, 2007 15:30 ] |
Заголовок сообщения: | |
Скорее всего (я правда тут буду щас пальцем в небо) из-за того что порядок поиска раньше включал в себя только один CURRENT, а потом когда сделали его списком то нарушать "старое" поведение (когда словарь при выполнении затирал CURRENT собой) не стали. |
Автор: | WingLion [ Ср мар 21, 2007 16:37 ] |
Заголовок сообщения: | |
profiT писал(а): Глубину надо изменять вручную, как раз через ALSO. Тогда как со числами на стеке она увеличивается автоматически.
ALSO глубину увеличивает на единичку, любой new - не изменяет. Осталось разобраться, а какое же слово глубину уменьшает? И что станет, если глубина окажется нулем? |
Автор: | profiT [ Ср мар 21, 2007 16:50 ] |
Заголовок сообщения: | |
WingLion писал(а): Осталось разобраться, а какое же слово глубину уменьшает?
PREVIOUS. |
Автор: | chess [ Ср мар 21, 2007 16:51 ] |
Заголовок сообщения: | |
WingLion писал(а): Осталось разобраться, а какое же слово глубину уменьшает?
И что станет, если глубина окажется нулем? Глубина поиска уменьшается на 1 словом PREVIOUS, которое первый в списке поиска словарь удаляет из списка после чего первым в списке поиска становится бывший вторым словарь. Если список поиска перед выполнением PREVIOUS пуст, то возникает неопределенная ситуация(а мало-ли таких ситуаций может в Форте возникать). PS: не успел. |
Автор: | chess [ Ср мар 21, 2007 17:17 ] |
Заголовок сообщения: | |
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 ) |
Автор: | WingLion [ Ср мар 21, 2007 17:19 ] |
Заголовок сообщения: | |
profiT писал(а): PS. Опоздал... chess писал(а): PS: не успел.
Короче, совершенно непоследовательная система. В одном месте запутано в угоду совместимости, в другом запутано без оглядки на совместимость... |
Автор: | in4 [ Чт мар 22, 2007 00:21 ] |
Заголовок сообщения: | |
Значит, надо сделать нормально и написать слой совместимости через этот кривой набор... |
Автор: | chess [ Чт мар 22, 2007 11:05 ] |
Заголовок сообщения: | |
in4 писал(а): Значит, надо сделать нормально и написать слой совместимости через этот кривой набор...
Особой кривости не видно. Работать можно. |
Автор: | yz [ Пт май 04, 2007 22:35 ] |
Заголовок сообщения: | |
WingLion писал(а): Короче, совершенно непоследовательная система.
В одном месте запутано в угоду совместимости, в другом запутано без оглядки на совместимость... Да, стандарт F93 рождался в результате борьбы нескольких реализаций и представляет собой компромисс, который никого не удовлетворил. |
Страница 1 из 1 | Часовой пояс: UTC + 3 часа [ Летнее время ] |
Powered by phpBB © 2000, 2002, 2005, 2007 phpBB Group http://www.phpbb.com/ |