Язык программирования Форт



Приложение Д. Ответы к упражнениям - часть 31


Упражнения 3. 02 из 02 ) ( 7. ) CREATE OPERATOR ] + - * / [ : MATH ( n1 n2 n3 - ) 1- 2 * OPERATOR + @ EXECUTE ; ( Понятно, что использование [ и ] является более простым способом формирования исполнительных векторов, чем применение FIND или ' .)

Блок 146 [146 :0] ( Глава 15. Упражнения 4. 01 из 01 ) ( 1. ) START-ЦHERE? BLK @ [COMPILE] LITERAL ; IMMEDIATE ( 2. ) : GET/# ( n -- ) PAD DUP 8 EXPECT 1- NUMBER DROP ; : ?RATE ." current rate? " GET# ; IMMEDIATE ( 3. ) : CONVERTS ( n -- ) ?RATE LITERAL 100 */ ; ( 4. ) : ENGLAND [ CR ." Dollars to pounds " ] ?RATE LITERAL 100 */ ; : DENMARK [ CR ." Dollars to kroners " ] ?RATE LITERAL 100 */ ; : GERMANY [ CR ." Dollars tо marks " ] ?RATE LITERAL 100 */ ; ( 6. ) : ?COMP ( -- ) STATE @ 0= IF ." Compile only! " ABORT THEN ; ( 7. ) ( TEST1 выполнит DUP . Выполнение TEST с клавиатуры даст ошибку, так как COMPILE содержат ?COMP . )

Блок 147 [147 :0] ( Глава 15. Упражнения 5. 01 из 03 ) ( 1.) ( Ячейка, предшествующая той, в которой записано чис- ло 3, содержит CFA слова LIT. Первая ячейка в поле параметров будет содержать CFA слова ЁBRANCH. Сразу вслед за ним следует число, абсолютный или относи- тельный адрес слова. Это позволит вам понять, как работает ЁBRANCH [с абсолютными или относительными CFA адресами]. После адреса следует CFA слова, ко- торое заносит в стек 1 и за которым следует CFA слова BRANCH. За числом 3 следует CFA слова EXIT.

Блок 148 [148 :0] ( Глава 15. Упражнения 5. 02 из 03 ) ( 2. ) : .CMP CR ." Here =" HERE U. ." Stack = " .S ; IMMEDIATE ( 3. ) HEX : LOOK-AT-lF ( f --) .CMP IF 1 .CМР ELSE 2 .CМР THEN .СМР 3 ; DECIMAL ( HERE увеличивается по мере компиляции ?BRANCH, LIT, адресов и чисел. Стек содержит число, которое зане сено туда оператором : ( и которое проверяется и удаляется оператором ; с целью проверки сохранности состояния стека]. За этим числом следует абсолютные или относительные адреса передачи управления, ис- пользуемые операторами ELSE и THEN.) ( 4. ) ( TEST выдаст на дисплей 5, так как LIT и 5 были скомпилированы в поле параметров с помощью [ 174 , 5 . ].)




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