附錄D 問題的解答─────────────────────────────────────── 第三章 1. 它的答案得視你是否認為其它的元件需要"知道"每個鍵相關的數值代碼而定。通常 的情況是否定的。因此,較小、較簡單的那個是你的選擇。況且,在第一個版本中, 每增加一個按鍵都要動到二個地方。 2. 『RAM-ALLOT』和『THERE』的問題在於它們都是"時序相關的";也就是,你必須依 某一種先後順序來執行它們。因此,我們的解答就是要設法找出一種能與執行順序無 關的RAM指標的界面方式。方法是,使用單一個字來同時做到這二件事。它的語法是 : RAM-ALLOT ( #byte-to-allot -- starting-adr ) .... ; 這樣就能使我們不論是以"向上"的方式取用RAM : RAM-ALLOT ( #byte-to-allot -- starting-adr )
>RAM @ DUP ROT + >RAM ! ;
或是以"向下"的方式取用RAM : RAM-ALLOT ( #byte-to-allot -- starting-adr )
>RAM @ SWAP - DUP >RAM ! ;
都有著相同語法。因此那些使用它的元件們,就可以完全地不受這個改變的影響。
我們的解答是 52 CONSTANT #CARDS
CREATE DECK #CARDS ALLOT \ one byte per card
: CARD ( i -- adr) DECK + ;
: INIT-DECK #CARDS 0 DO I I CARD C! LOOP ;
INIT-DECK
: 'CSWAP ( a1 a2 --) \ swap bytes at a1 and a2
2DUP C@ SWAP C@ ROT C! SWAP C! ;
: SHUFFLE \ shuffle deck of cards
#CARDS 0 DO I CARD #CARDS CHOOSE CARD 'CSWAP LOOP ;
第六章 下面的方式是一種解答 20 CHOOSE 2 CHOOSE IF NEGATE THEN 但這個更簡單 40 CHOOSE 20 -
|