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



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


YELLOW и MAGENTA компилируются в таком порядке, чтобы упростить возврат при исполнении производных слов. ) ( 6. ) : QUADRATIC ( а b с -- ) CREATE ROT , SWAP , , DOES> >R DUP DUP * R@ @ * SWAP R@ 2+ @ * + R> 4 + @ + ; ( Заметьте, что коэффициенты компилируются в порядке a-b-c. )

Блок 124 [124 :0] ( Глава 11. Упражнения 2. 03 из 04 ) ( 7. ) : M-MENTEM ( n1 n2 -- ) CREATE SWAP , , DOES> >R DUP R@ @ * SWAP R> 2+ @ + / ; ( Для получения большей точности можно применять масштабирование. ) ( 8. ) : ** ( n1 n2 - n3 ) ?DUP 0= IF DROP 1 ELSE DUP 1 = IF DROP ELSE OVER SWAP 1- 0 DO OVER * LOOP SWAP DROP THEN THEN ; ( Это слово было описано в главе 8 и используется для упрощения описания POLYNOM ) ( Продолжеиие в следующем блоке )

Блок 125 [125 :0] ( Глава 11. Упражнения 2. 04 из 04 ) ( 8. продолж. ) : POLYNOM ( n1 n2 ... - ) CREATE DEPTH DUP , 0 DO DEPTH ( 1- в Форт-83 ) ROLL , LOOP DOES> DUP @ SWAP 2+ SWAP >R >R >R 0 R> R> R> 0 DO OVER OVER I 2 * + @ SWAP I ** * SWAP >R SWAP >R + R>

R> LOOP DROP DROP ; ( Коэффициенты компилируются в указанном порядке. "0" заносится на дно стека, чтобы получить результат, который вычислен в цикле do-loop. ) ( 9. ) : ( min max n -- ) CREATE , SWAP , , DOES> >R R@ @ R@ 2+ @ MAX R@ 4 + @ MIN DUP R> ! ; ( Заметьте, что "значение" производного слова скомпили- ровано в первую позицию, позволяя использовать ' или ' >BODY . )

Блок 126 [126 :0] ( Глава 11. Упражнения 3, 01 из 02 ) : DARRAY ( n -- ) CREATE 4 * ALLOT ) DOES> SWAP 4 * + ; ( 2. ) : 1ARRAY ( n - ) CREATE 2 * ALLOT DOES> SWAP 1- 2 * + ; : 1EARRAY ( n -- ) CREATE DUP , 2 * ALLOT DOES> >R 1- DUP 0 < OVER R@ @ 1- > OR IF ." Index error" ABORT ELSE 2 * 2+ R> + THEN ; ( 3. ) : 0CARRAY ( n --) CREATE HERE SWAP DUP ALLOT 0 FILL DOES> + ; ; 0ARRAY ( n -- ) CREATE HERE SWAP 2 * DUP ALLOT 0 FILL DOES> SWAP 2 * + ;

Блок 127 [127 :0] ( Глава 11. Упражнения 3. 02 из 02 ) ( 4.) : PRESERVE ( n1 n2 - ) CREATE DEPTH 0 DO DEPTH ROLL , LOOP ; ( Используйте 1- ROLL в Форт-83) ( 5.) : SAVE-TO-RETURN ( n1 n2 -- ) CREATE DEPTH DUP , 0 DO DEPTH ROLL , LOOP ( Используйте 1- ROLL в Форт-83 ) DOES> DUP @ 0 DO DUP I 2 * 2+ + @ SWAP LOOP DROP ; ( 6. ) : WORD >IN @ >R CREATE R> >IN ! 32 WORD C@ 1+ ALLOT DOES> COUNT TYPE ; ( Занося >IN в стек возвратов, WORD может проводить раэбор слова дважды.


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