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



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


Блок 44 [44 :0] ( Глава 5. Упражнении 3. 02 из 03 ) ( 5.) : .L ( n1 n2 -- ) SWAP DUP D< NEGATE ROT OVER - ROT ROT TYPE SPACES ; ( Запомните, никакого NEGATE в FORTH-83 нет. ) ( 6. ) : .DATE ( d --) TYPE ; ( 7. ) : .MDY ( d -- ) TYPE ; ( 121, 100, и 109 являются ASCII "у", "d" и "m". )

Блок 45 [45 :0] ( Глава 5. Упражнения 3. 03 из 03 ) ( 1. ) : .PHONE ( n1 n2 n3 ---) 0 TYPE ; ( Заметьте, что можно преобразовывать несколько чисел одновременно, но DROP DROP необходимо для удаления из стека частного двойной длины, исключая n1. которое удаляется #> .) ( 9.) : Fl. ( d -- )

IF #РТ 1- 0 DO # LOOP THEN 46 HOLD #S #> TYPE ; ( Это иллюстрирует, какая программа может находиться ( между . При вводе .1234 будет отображен начальный 0.)

Блок 46 [46 :0] ( Глава 6. Упражнения 1. 01 из 04 ) ( 1.) VARIABLE FEET VARIABLE INCHES : F->I ( -- ) FЕЕТ @ 12 * INCHES ! ; ( 2.) 2VARIABLE DFEET 2VARIABLE DINCHES : DF->I DFEET 2@ 12 0 D* DINCHES 2! ; ( 0 формирует 12 число двойной длины. ) ( 3.) : NEW2! ( d адр -- ) SWAP OVER 2SWAP 2+ ! ! ; ( 2! может использоваться для запоминания двух чисел одинарной длины. n1 n2 адр 2! запоминает n1 по адресу "адр", а n2 по адресу "адр+2" .) ( 4. ) : NEW+! ( n адр - ) DUP @ RОТ + SWAP ! ; ( 5. ) : NEW@ ( адр -- n ) DUP 1+ С@ 256 * SWAP C@ + ;

Блок 47 [47 :0] ( Глава 6. Упражнения 1. 02 из 04 ) ( 6. ) : NEW! ( n адр --) OVER OVER SWAP 256 / SWAP 1+ С! С! ; ( 7.) : VARSWAP ( адр1 адр2 --) DUP @ PAD ! SWAP DUP @ ROT ! PAD @ SWAP ! : ( 8. ) CREATE 1WEEK 0 , 0 , 0 , 0 , 0 , 0 , 0 , CREATE 2WEEK 0 , 0 , 0 , 0 , 0 , 0 , 0 , ( Оба слова засылают при использовании в стек ) ( свои адреса.) : !SUN ! ; : !MON 2+ ! ; : !TUE 4 + ! ; : !WED 6 + ! ; : !THU 8 + ! ; : !FRI 10 + ! ; : !SAT 12 + ! ; ( Все слова имеют диаграмму преобразования стека ( n адр -- )

Блок 48 [48 :0] ( Глава 6. Упражнения 1. 03 из 04 ) ( 10. ) : @SUN @ ; : MON 2+ @ ; : @TUE 4 + @ ; : @WED 6 + @ ; : @THU 8 + @ ; : @FRI 10 + @ ; : @SAT 12 + @ ; ( Каждое слово живет схему преобразования стека (адр -- n) ( 11. ) : RSWAP ( n1 n2 адр -- ) SWAP 2 * OVER + ROT 2 * ROT + VARSWAP ; ( Каждое число должно умножаться на 2 и добавляться к адресу так, чтобы их содержимое можно было бы обменять с помощью VARSWAP ) ( 12. ) CREATE CNT 0 С, 0 С, 0 С, 0 С, 0 С, 0 С, 0 С,




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