Управление экраном и половину слов из книнги в 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 имеет мало что общего с тем фортом, на который ориентровались авторы книги.
Ой, чуствую, что в 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 f65 ' 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
Вот так по простому...
<<< Предыдущий | Начало | Следующий >>> |
При цитировании, ссылка на оригинальный текст обязательна. Допускается копирование материалов только целиком, без внесения каких-либо изменений в оригинальный текст, меняющих смысл, структуру материала и проч. |