WORDS

Материал из ПМК вики
Версия от 19:07, 10 ноября 2017; AtH (обсуждение | вклад) (→‎Реализация)
(разн.) ← Предыдущая версия | Текущая версия (разн.) | Следующая версия → (разн.)
Перейти к навигации Перейти к поиску

WORDS (слова, читается «вордс») — стандартное слово Каллисто.

WORDS          ( -- )                          Слова. Отобразить имена всех слов контекста.

Распечатать на индикаторе имена слов из набора слов CONTEXT.

Ввод слова WORDS[править]

В режиме ЛАТ последовательно нажмите клавиши  В↑   5   ×   K   1 

WORDS в стандарте ANS Forth[править]

 15.6.1.2465   WORDS                                                       TOOLS
            ( -- )
            Перечисляет имена определений в первом списке слов порядка поиска. 
            Формат отображения зависит от реализации.

            WORDS может быть реализовано, с использованием слов вывода 
            отображаемых чисел. Следовательно, его использование может 
            разрушать временную область, идентифицированную #>.

        См.: 3.3.3.6 Другие Временные Области.

 A.15.6.1.2465   WORDS
 WORDS - удобство отладки, найденное почти на всех системах Forth. Оно - повсюду 
 упомянуто в текстах Forth.

История[править]

Слово называлось VLIST, пока кто-то англоязычный не подметил, как красиво выглядят последовательности команд FORTH WORDS, EDITOR WORDS и т.п. Интересно, что когда стандарты приняли соглашения ALSO/ONLY, это преимущество пропало.

В Форте FSP88M это слово известно под именем VL

WORDS в предыдущем стандарте Forth-83 (англ.)[править]

      WORDS        --                            M
           List the word names in the first vocabulary of the currently
           active search order.

      WORDS        --                            ONLY
           Display the word names in the transient vocabulary, starting
           with the most recent definition.

VLIST и DLIST в стандарте Forth-79 (англ.)[править]

VLIST
    List  the  word names of the CONTEXT vocabulary starting  with
    the most recent definition.
DLIST
       List the names of the dictionary entries in the CONTEXT vocabulary.

Реализация[править]

Вывод на индикатор можно приостановить или остановить, см. ?BREAK

3890 ;#WORDS
3891 ; WORDS            ( −− )                               Слова. Отобразить имена всех слов контекста.
3892 LWORDS:         .DB     5
3893                 .TEXT   "WORDS"                 ; ( −− )
3894                 .DW     LINDEX                  ; Просмотр полного списка операторов, хранящихся в данный момент в контексте
3895 WORDS:          .DW CALL, CONT,UAT,UAT
3896 W1:             .DW DUP,IDDOT, QBREAK, NLINK,UAT, DUP,ZEQU, ZBRAN,W1, DROP, EXIT

Реализация из SP-Forth 4.20:

\ $Id: spf_words.f,v 1.4 2006/12/04 21:15:59 ygreks Exp $

( Печать списка слов словаря - WORDS.
  ОС-независимые определения.
  Copyright [C] 1992-1999 A.Cherezov ac@forth.org
  Преобразование из 16-разрядного в 32-разрядный код - 1995-96гг
  Ревизия - сентябрь 1999
)

USER >OUT
USER W-CNT

: NLIST ( A -> )
  @
  >OUT 0! CR W-CNT 0!
  BEGIN
    DUP KEY? 0= AND
  WHILE
    W-CNT 1+! 
    DUP C@ >OUT @ + 74 >
    IF CR >OUT 0! THEN
    DUP ID.
    DUP C@ >OUT +!
    15 >OUT @ 15 MOD - DUP >OUT +! SPACES
    CDR
  REPEAT DROP KEY? IF KEY DROP THEN
  CR CR ." Words: " BASE @ DECIMAL W-CNT @ U. BASE ! CR
;

: WORDS ( -- ) \ 94 TOOLS
\ Список имен определений в первом списке слов порядка поиска. Формат зависит 
\ от реализации.
\ WORDS может быть реализован с использованием слов форматного преобразования 
\ чисел. Соответственно, он может испортить перемещаемую область, 
\ идентифицируемую #>.
  CONTEXT @ NLIST
;

Советская реализация[править]

Юрий Семёнов приводит следующее определение слова WORDS (стр. 106):

 : WORDS   CONTEXT @ @  ( запись в стек адреса начала просмотра
                          словаря)
           BEGIN ↵      ( начало бесконечного цикла просмотра)
             3 FOR       ( информация о трёх операторах помеща-
                          ется в одну строку)
                 ↑ ID.     ( печать имени очередного оператора)
                 13 OVER C@ '37 AND    ( вычисление длины имени
                                         очередного оператора)
                 - SPACES               ( организация табуляции
                                          операторов словаря)
                 N>BODY ↑ 6 I.R SPACE   ( печать PFA оператора)
                 '!' EMIT SPACE                   ( печать "!")
                 LFA @       ( запись в стек значения константы
                               связи)
                 ↑ 0=                         ( конец словаря?)
                 IF LEAVE            ( если да, выход из цикла)
                 THEN
               NEXT ?DUP 0=           ( это действительно конец
                                        словаря?)
           UNTIL ;

Описание и определение слова WORDS в ядре ФОРТ-ЕС:

WORDS   +  -> РАСПЕЧАТАТЬ НА ТЕРМИНАЛЕ ИМЕНА СЛОВ              44
             ИЗ СПИСКА "CONTEXT"

                     Экран номер 44
( 31.03.86 WORDS  )
: WORDS ( -> )
 ." СПИСОК " CONTEXT @ DUP .VOC DUP (VOC)
 ." ВСЕГО СЛОВ - " . ."  СЛЕДУЮЩИЙ СПИСОК - "
 ?DUP IF 2+ .VOC THEN
 CR @ BEGIN DUP DUP IF @ [ &DWORD ] LITERAL <> THEN
    WHILE DUP С@ [ &SFLAG ] LITERAL AND 0=
   IF DUP ID. SPACE THEN
   N>LINK @ REPEAT DROP ;

В FORTH ИТЭФ слово WORDS имело имя VLIST

Вот его определение:

             HEAD    205Q,'VLIS',324Q,VLIST,$COL          ; VLIST
             DW  CONT,AT,AT
   VL0:      DW  CR,THREE,ZERO,XDO
   VL1:      DW  DUBL,IDDOT,LIT,15Q,OVER,CAT,LIT,37Q,$AND,SUB
             DW  SPACS,PFA,DUBL,LIT,6,UDOTR,SPACE,LIT,41Q
             DW  EMIT,SPACE,LFA,AT,DUBL,ZEQU,ZBRAN,VL2-$
             DW  LEAVE
   VL2:      DW  XLOOP,VL1-$,DDUP,ZEQU,ZBRAN,VL0-$,SEMI

Ссылки[править]


  У этой статьи нет иллюстраций. Вы можете помочь проекту, добавив их.


  Это заготовка статьи. Вы можете помочь проекту, дополнив её.