День третий. Чтение главы 5. Форматный вывод

День третий. Чтение главы 5. Форматный вывод

Управление экраном и половину слов из книнги в SP-Forth так и не нашел... Управление принтером, дисплеем – тоже.

Форматный вывод чисел. Это п...ц. Примеры из книжки не работают. Документация нахер отсутствует, то что предлагают какие-то абстрактные выдержки из стандарта... блин вас бы так учить... По поиску (в Far F7 про всему дереву на предмет построки <# ) нашел как ее используют и примерно в таком варинате оно заработало

 899 0 <# # # # # #> TYPE

а зачем там ноль и какова его функция? Пошел лазить по исходным текстам, в \src\spf_print.f нашел реализацию этих слов и? Хотел бы я посмотреть на того умника, выдвинувшего "аргумент" – из текста все понятно. А как насчет новичков? Которые только начали разбираться???? Блин!

Ага, разобрался. Эта реализация работает с двойными числами – младшая часть внизу, старшая на верху стека, эдакий брутерброд. В книге про это писали... Ну нахера это делать-то!!!!! Я понимаю еще когда речь идет о 16-ти разрядных реализациях! Нахрена жизнь-то усложнять, а? Есть один и единый тип – знаковое целое 32-х разрядное число и сним все операции. Если кому-то нужно что-то специфическое, сделается это отдельной библиотекой. Зачем же остальным жизнь усложнять? да, мало-ли что в стандартах писано-то!

Отрицательные числа я так и не понял как выводить... Короче, не понял в чем же фишка этой конструкции <# # ... # #> по сравнению с . ?

Основные вещи, как-то добавление знака до или после легко делаются и без операторов форматного вывода:

: Fprnt
  ." $" .
;

899 Fprnt

$899

Если нужны преобразования числа в строку то, тогда может быть.

Слово EXPECT в SP-Forth тоже отсутсвует... В принципе его можно и самому написать через PAD и KEY? , KEY .

Ничего интересного эта глава не принесла, или точнее, SP-Forth имеет мало что общего с тем фортом, на который ориентровались авторы книги.

Глава 6 Работа с памятью

Ой, чуствую, что в SP-Forth работа с памятью построена по другому... Как-то неестественно выглядит использование памяти программ (!) под размещение данных. Чем собственно и является словарь.

Для создания констант в принципе нормальноый ход...

 CREATE ya 13 , 14 , 15 , 16 , 17 , 18 , 19 , 20 ,

ya @ 13 ya 4 + @ 14 ya CELL+ @ 14

CELL – возвращает размер ячейки в байтах...

Интересно, а станадртные слова для работы с массивами есть? И, я насколько понял, выход за пределы массива – крах программе...

MOVE CMOVE MOVE> FILL – слижком уж низкоуровневые слова. Пока не разбирался с ними...

VARIABLE – пишу и, что оно несколько проще

 VARIABLE in
 что тоже самое что и
 CREATE in 4 ALLOT

Есть еще CONSTANT – основное отличие: кладет на стек не адрес, а значение.

Константу менять можно, правда делается несколько геморройнее.

 52 CONSTANT f
 f

65 ' f >BODY ! f

А вот в чем смысл константы я так и не понял... В определяениях вместо слова ' нужно применять слово ['] И незнала баба клопоту – купила порося.

Векторизация или косвенный вызов слов по их адресам. Смысл в принципе понятен. Но не совсем понятно, а зачем? Может проще сделать конструкцию выбора по вариантам? И отлаживать проще и читабельней, и гораздо поустойчивей к ошибкам...

: Mess1 ." Message 1" CR ;
: Mess2 ." Message 2" CR ;
: Mess3 ." Message 3" CR ;
: Mess4 ." Message 4" CR ;

CREATE mmm 16 ALLOT ' Mess1 mmm ! ' Mess2 mmm CELL 1 * + ! ' Mess3 mmm CELL 2 * + ! ' Mess4 mmm CELL 3 * + !

mmm CELL 3 * + @ EXECUTE

В этом варианте пришлось повозится со словом ",", потом с извлечением адреса...

То же самое, но через выбор вариантов

: Mess1 ." Message 1" CR ;
: Mess2 ." Message 2" CR ;
: Mess3 ." Message 3" CR ;
: Mess4 ." Message 4" CR ;

: mmm ( n – ) DUP 1 - 0= IF DROP Mess1 EXIT THEN DUP 2 - 0= IF DROP Mess2 EXIT THEN DUP 3 - 0= IF DROP Mess3 EXIT THEN ;

2 mmm

Вот так по простому...

<<< Предыдущий Начало   Следующий >>>
Copyright © Alex Furashev 2004

При цитировании, ссылка на оригинальный текст обязательна. Допускается копирование материалов только целиком, без внесения каких-либо изменений в оригинальный текст, меняющих смысл, структуру материала и проч.

Hosted by uCoz