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


         

Глава 6. Фрагментация - часть 12


CREATE ЭКРАН 1024 ALLOT VARIABLE КУРСОР

Ваш остальной код может оставаться нетронутым.

------------------------------------------------------------ СОВЕТ Выделяйте вычислительные алгоритмы из слов, индицирующих результаты. ------------------------------------------------------------

На самом деле этот вопрос должен выясняться при декомпозиции.

Вот пример. Определенное ниже слово, которое читается как "от-людей-к-связям", вычисляет количество коммуникационных связей, возникающих между данным количеством людей в группе. (Руководителям программистских коллективов полезно знать - число связей колоссально возрастает с каждым новым членом команды.)

: ЛЮДИ>СВЯЗИ ( #людей -- #связей ) DUP 1- * 2/ ;

Это определение производит только вычисление. Вот "пользовательское определение", которое вызывает ЛЮДИ>СВЯЗИ для расчетов, а зетем печатает результат:

: ЛЮДЕЙ ( #людей) ." = " ЛЮДИ>СВЯЗИ . ." связей" ;

Это дает:

2 ЛЮДЕЙ = 1 связей ~~~~~~~~~~~ 3 ЛЮДЕЙ = 3 связей ~~~~~~~~~~~ 5 ЛЮДЕЙ = 10 связей ~~~~~~~~~~~~ 10 ЛЮДЕЙ = 45 связей ~~~~~~~~~~~~

Даже если Вы уверены, что собираетесь производить калькуляцию лишь один раз, только для распечатки, то, поверьте мне, Вы ошибаетесь. Вам обязательно придется вернуться к этому впоследствии и вычленить вычисляющую часть. Может быть, понадобится отображать всю информацию в выровненной справа колонке, или Вы захотите записать все результаты в базу данных - никогда не знаешь, что случится. Но придется выделить ее обязательно, поэтому лучше сделать это сразу. (Не беда, если даже несколько раз Вы сможете без этого обойтись.)

Лучший пример - слово . (точка). Точка отлично годится в 99% случаев, но иногда оказывается, что она слишком много всего делает. Вот что она в действительности собой представляет (в Форте-83):

: . ( n) DUP ABS 0 TYPE SPACE ;

Но, предположим, Вам захотелось преобразовать число на стеке в строку ASCII и поместить ее в буфер для дальнейшей распечатки. Точка делает преобразование, но при этом сразу и печатает.


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