День первый

День первый

Читаю и экспериментирую с примерами из begin_g1.txt

Простейшие целочисленные операции

 Ok
5 11 +
 Ok ( 16 )

Реакция системы в отдельной строке, в скобках указано содержимое стека.

 5 60 /
  Ok (16 0)

фф оперирует целочисленной арифметикой.

 : Q2 * . ;
 Ok
  2 4 Q2
 8 Ok

определение слова. и тут же его использование.

Слова FORGET в сп нет... Пока не понятно, как слова удалять из словаря.

При попытке вызывать в диалоге слово ." появилась ошибка -312 Только для режима компиляции. Очень обидно -- не смогу проверить пример. Второе, не приятно удивлен обнаружением каких-то режимов...

Ага, вопрос обходиться -- этот опреатор нужно включать только в определение слова... Наверное это тот случай с маловразумительными сообщениями об ошибке...Например, переформулировать в таком виде "Только для использования в определениях новых слов". Или добавить пояснение: "Слово используется только в описаниях других слов". Понятно, что опытным пользвоателям такие пояснения возможно излишни, но для новичков далеко не лишни.

Правится описание ошибки в файле SPF.ERR Что и было сделано. Там находятся все сообщения об ошибках.

В принципе, понятно откуда взялось подобное ограничение -- проблема с выделениенм памяти, точнее, куда размещать строковую константу. Можно предложить два варианта:

Что получилось

  : X ." X" ;
 Ok
  X
 X Ok

ну дальше совсем просто стало

 : t 40 0 DO X LOOP ;

тот же самый прикол с режимами -- цикл в интерактивнном режиме не запустишь.

Попробовал сделать переопределение (перезапись) существующего слова, компилятор вернул ошибку. Причем на этот раз без кода, а простая аглицкая надпись. Чуствуется все-таки разнобой здесь, отсутствие единого подхода -- часть сообщений на русском, часть на английском, часть с отступом и с кодом, есть просто надпись..

А вот перезапись старых определений новыми была бы полезной и более красивым решением чем использование специальных слов по их удалению. Тем более с использованием строкового редактора: вызвал из буфера недавно введенное определение, подкорректирвал его

Несколько непривычно расположение параметров цикла, более привычно, ОТ ДО а тут наоборот -- ДО ОТ. И впервый раз задав не правильно 0 40 я получил бесконечный цикл. Вот еще где может быть источник ошибок...

: столбик 0 DO x LOOP CR ;
6 столбик
ххххх 
Ок

Прям бальзам на душу -- можно спокойно и без ограничений использовать киррилицу, как мне этого часто не доставало! Поясню: для своих прикладных программ мне более важна ясность, а изобретать акронимы для устоявшейся терминологии предметной области занятие явно лишнее, и я все более склоняюсь, вредное!

Ага, вот и всплыл где непрвычный порядок параметров цикла. Что ж можно согласится, что гораздо чаще меняется верхняя граница цикла. И все же изящное решение найдено в PostScript -- там используется для прсотых циклов оператор REPEAT. У него один параметр -- количество итераций.

Вот и добрались до рисованя гистограммы:

: гистогр4 CR 4 0 DO столбик LOOP ;
4 5 6 8 гистогр4
хххх
ххххх
хххххх
хххххххх

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

Следующее, очень неприятна чуствительность к регистру и то-что ключевые слова в верхнем регистре -- приходиться следить за ргистром. Отвлекает.

С русскими индентификаторами работать приятнее, но задалбывает переключение раскладки. Выход один -- работать в однородной среде, т.е. придется переписать операторы на русский манер...

: stolb DUP 80 > IF DROP 80 THEN столбик ;

м-да заковыристый код получился... В привычном исполнении выглаядело бы как

 if len > 80 then {
                    len = 80 
 }
 столбик

так бы более понятнее было. Что этом мешает?

Можно было бы переписать его в виде:

: stolb 80 Больше? DROP 80 end столбик ;

кажется, так более понятнее. Слово Больше? сравнивает два числа на стеке, причем нижнее на стеке оставляет, если выражение истино то выполняется блок до слова end.

Чтобы реализовать слово Больше? нужно еще знать как управлять потоком исполнения... Ладно, займемся этим позже.
  Начало Следующий >>>
Copyright © Alex Furashev 2004

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

Hosted by uCoz