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



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


CLASS ранее) : COUNTS ( вес ) CLASS 1 0 ROT NUMWTS +! ; : !W ( wt -- ) DUP CLASS 1 SWAP NUMWTS +! ; : .TOT-#S CR 10 0 DO 0 I NUMWTS @ 6 .R LOOP ; : .TOT-WT CR 10 0 DO I 1 NUMWTS @ 6 .R LOOP ; : .AVE-WT CR 10 0 DO 1 I NUMWTS @ 0 1 NUMWTS @ / 6 .R LOOP ; : !WT ( w -- ) DUP COUNTS !W .TOT-WT .TOT-#S .AVE-@T ; ( Это идентично предшествующему примеру. ) : INIT 10 0 DO 0 0 I NUMWTS ! 0 1 NUMWTS ! LOOP ; ( Заметьте, насколько это похоже на предшествующее упражн. Использование матрицы экономит немного место за счет потери некоторого времени. Реальное преимущество матрицы сказыва- ется при размерности больше двух или, когда для математических расчетов необходима матричная алгебра. )

Блок 61 [61 :0] ( Глава 6. Упражнения 5. 03 из 03 ) ( 6.) CREATE NEWSTACK 32 ALLOT VARIABLE STACKPOS NEWSTACK STACKPOS ! : XPUSH ( n -- ) STACKPOS @ ! 2 STACKPOS +! ; : XPOP ( -- n ) -2 STACKPOS +! STACKPOS @ @ ; : PUSH ( n -- ) STACKPOS @ NEWSTACK 28 + MIN STACKPOS ! XPUSH ; : POP ( -- n ) STACKPOS @ NEWSTACK 2 + MAX STACKPOS ! XPOP ; ( Когда стек станет пуст, POP выдаст число, которое было занесено туда последним. Аналогично, когда стек заполнен, PUSH перезапишет верхнее число, в то время как XPUSH и XPOP разрушит систему из-за переполнения стека. ) ( 7. ) : NEWDROP POP DROP ; ( Форт в действительности контроли-) : NEWDUP POP PUSH PUSH ; ( рует стек аналогичным образом ) : NEWSWAP POP POP SWAP PUSH PUSH ;

Блок 62 [62 :0] ( Глава 7. Упражнения 1. 01 из 03 ) ( 1. ) : NEW> ( n1 n2 -- f ) SWAP < ; : NEW0< ( n -- f ) 0 < ; : NEW0> ( n -- f ) NEGATE NEW0< ; : NEW= ( n1 n2 -- f ) - 1+ NEW0> ; : NEW= ( n1 n2 -- f ) OVER OVER NEW= AND ; : NEW<> ( n1 n2 -- f ) - DUP NEW0< SWAP NEW0> OR ; : NEW0= ( n -- f ) 0 NEW= ;

Блок 63 [63 :0] ( Глава 7. Упражнения 7. 02 из 03 ) ( 2. ) ( а. = ROT ROT = AND б. ROT ROT = OR в. <> ROT ROT = AND г. <> ROT ROT = OR д. 0 ROT ROT <> AND е. = ROT ROT = XOR ж. < ROT ROT > AND з. OVER = SWAP ROT = AND и. OVER < SWAP ROT < AND ) ( 3. ) : ?REM=0 MOD 0= ; ( 4. ) : ?REM MOD 0= NOT ; ( 5. ) : ?OPPOSITE + 0= ; : NEW= - 0= ;




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