Г: Ответы на задачи "для дальнейшего размышления"
ПРИЛОЖЕНИЕ Г
О Т В Е Т Ы Н А З А Д А Ч И ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ " Д Л Я Д А Л Ь Н Е Й Ш Е Г О Р А З М Ы Ш Л Е Н И Я " ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
----------------------------------------------------------------
ГЛАВА 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 -