Динамический scoping... и bac4th
By exs. Sunday, 21. December 2008, 22:09:01
Динамический scoping в моём приближенном понимании это две вещи -- определение видимости имени в runtime (во время исполнения) и вложенное присваивание значений.
В форте изначально используется lexical scoping. Очевидно что динамический scoping прикручивается в язык со статическим легко и непринуждённо, единственное для чего требуется поддержка в ядре -- красивый синтаксис.
KEEP из bac4th автоматически восстанавливает старое значение при откате. profiT описывает KEEP как "локальное значение, глобальное имя".
Можно представлять KEEP как простой аналог dynamic scoping для форта. И на самом деле удобно использовать например для отслеживания глубины отступа при выводе xml тэгов бэкртрекингом.
Вот основной код :
USER indent
\ open tag with attributes, close tag when backtracking
: tag ( attr-l a u --> \ <-- )
PRO
BACK " </{s}>" STYPE TRACKING
2RESTB
CR indent @ SPACES
" <{s}>" STYPE
indent KEEP
indent 1+!
CONT ;
Мне нравится эта лаконичность





How to use Quote function: