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




Приложение Г: Ответы на задачи "для дальнейшего размышления"


ПРИЛОЖЕНИЕ Г

О Т В Е Т Ы Н А З А Д А Ч И ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ " Д Л Я Д А Л Ь Н Е Й Ш Е Г О Р А З М Ы Ш Л Е Н И Я " ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~

----------------------------------------------------------------

ГЛАВА 3.

1. Ответ зависит от того, считаете ли Вы, что другим компонентам надо будет "знать" числовое значение, связанное с каждой клавишей. Чаще этого `не` требуется. Простая, более компактная форма здесь поэтому предпочтительнее. Также в первой версии добавление нового кода клавиши потребует изменений в двух местах. 2. Проблема со словами RAM-ALLOT и THERE состоит в том, что они `зависимы по времени`: мы их должны исполнять в определенном порядке. Здесь нашим решением могло бы быть отделение от интерфейса указателя места RAM, который от порядка не зависит; это можно было бы сделать, имея `единственное` слово, которое прозрачно исполняло бы обе функции. Синтаксис наших слов получился бы таким:

: RAM-ALLOT ( #байтов-для-размещения -- начальный-адрес ) ... ;

Этот синтаксис останется неизменным, если мы его поменяем для размещения снизу вверх:

: RAM-ALLOT ( #байтов-для-размещения -- начальный-адрес ) >RAM @ SWAP - DUP >RAM ! ; - 292 -

ГЛАВА 4.

Наше решение таково:

\ КАРТЫ Перетасовка 12-01-84 52 CONSTANT #КАРТ CREATE КОЛОДА #КАРТ ALLOT \ одна карта на байт : КАРТА ( i -- адр ) КОЛОДА + ; : НОВАЯ-КОЛОДА #КАРТ 0 DO I I КАРТА C! LOOP ; НОВАЯ-КОЛОДА : 'CSWAP ( a1 a2 -- ) \ поменять байты по а1 и а2 2DUP C@ SWAP C@ ROT C! SWAP C! ; : ТАСОВАТЬ \ тасовать колоду карт #КАРТ 0 DO I КАРТА #КАРТ CHOOSE КАРТА 'CSWAP LOOP ;

ГЛАВА 8.

Будет работать и это:

20 CHOOSE 2 CHOOSE IF NEGATE THEN

Но проще так:

40 CHOOSE 20 -

---------------------------------------------------------------- - 293 -




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