Способ мышления-Форт



Приложение В: Другие утилиты, описанные в этой книге


ПРИЛОЖЕНИЕ В

Д Р У Г И Е У Т И Л И Т Ы , ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ О П И С А Н Н Ы Е В Э Т О Й К Н И Г Е ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~

----------------------------------------------------------------

Это приложение призвано помочь Вам определить некоторые из слов, которые упоминались в этой книге и которые могут отсутствовать в Вашей системе. Определения даны в Стандарте-83.

ИЗ ГЛАВЫ 4.

Определение слова ASCII для работы в Стандарте-83:

: ASCII ( -- c) \ компиляция: с ( -- ) \ интерпретация: с ( -- с) BL WORD 1+ C@ STATE @ IF [COMPILE] LITERAL TNEN ; IMMEDIATE

ИЗ ГЛАВЫ 5.

Слово \ можно определить как:

: \ ( пропустить остаток строки ) >IN @ 64 / 1+ 64 * >IN ! ; IMMEDIATE

Если Вы решили не использовать слово EXIT для прерывания интерпретации блока, то можете определить слово \S как

: \S 1024 >IN ! ;

Слово FH определяется просто как

: FH \ ( смещение -- блок-по-смещению ) \ "from here" - "отсюда" BLK @ + ;

Подобная факторизация позволяет использовать FH многими способами, типа:

: TEST [ 1 FH ] LITERAL LOAD ; - 290 -

или

: SEE [ 2 FH ] LITERAL LIST ;

Несколько более сложная версия этого слова позволяет также редактировать или загружать блоки фразами вида "14 FH LIST", работающими относительно последнего блока, который был напечатан LISTом (SCR):

: FH \ ( смещение -- блок-по-смещению ) \ "from here" - "отсюда" BLK @ ?DUP 0= IF SCR @ THEN + ;

Слово BL - это просто константа:

32 CONSTANT BL

TRUE и FALSE могут быть определены так:

0 CONSTANT FALSE -1 CONSTANT TRUE

(Слова структур управления Форта, такие, как IF и UNTIL, рассматривают нуль как "ложь" и любое ненулевое значение как "истину". До Форта-83 соглашение предусматривало показывать "истину" значением 1. Начиная с '83-го стандарта, однако, "истина" имеет значение FFFF (шестнадцатеричное), что соответствует числу со знаком -1 (все биты установлены). Слово WITHIN на высоком уровне можно определить так:

: WITHIN ( n низ верх+1 -- ? ) OVER - >R - >R U< ;

ИЗ ГЛАВЫ 8.

Реализация слова LEAP будет зависеть от того, как Ваша система реализует циклы DO LOOP. Если DO держит два значения на стеке возвратов (индекс и ограничитель), LEAP должно их оба сбрасывать, плюс сбрасывать еще одно значение со стека возвратов для выхода:

: LEAP R> R> 2DROP R> DROP ;

Если DO держит `три` значения на стеке возвратов, то следует определить:

: LEAP R> R> 2DROP R> R> 2DROP ;

---------------------------------------------------------------- - 291 -




Содержание  Назад  Вперед