Skip to content

Latest commit

 

History

History
62 lines (43 loc) · 1.32 KB

problems.md

File metadata and controls

62 lines (43 loc) · 1.32 KB

練習問題

FORTH 序論

  1. 6 - 7 × 8 + 9 を Gforth 上で計算せよ。
6 7 8 * - 9 +
  1. 2SWAP ワードのスタック表記を示せ。
( x1 x2 x3 x4 -- x3 x4 x1 x2 )
  1. スタック上の x, y をポップし、y × 2 + x をプッシュするワード word2-3 を定義せよ。
: word2-3  ( n1 n2 -- n3 )  * + ;
  1. スタック上の x, y をポップし、x mod 3 - y / 4 をプッシュするワード word2-4 を定義せよ。

解答例1:

: word2-4  ( n1 n2 -- n3 )  SWAP 3 MOD SWAP 4 / - ;

解答例2:

: word2-4  ( n1 n2 -- n3 )  -4 / SWAP 3 MOD + ;
  1. NIP ワードと同じ挙動のワード word2-5 を定義せよ。ただし、定義に「NIP ワードの呼び出し」を含めてはいけない。
: word2-5  ( x1 x2 -- x2 )  SWAP DROP ;

制御構造

  1. データスタックに積んだ 1 セル整数の回数だけ、FizzBuzz を実行するワードを定義せよ。
  2. フィボナッチ数を求めるワード fib ( n1 -- n2 ) を定義せよ。
: fib  ( n1 -- n2 )
  CASE
    0 OF 0 ENDOF
    1 OF 1 ENDOF
    0 1 ROT 0 DO 2DUP + ROT DROP LOOP
  ENDCASE
;
  1. リターンスタック操作のワードを利用して、OVER ワードを実装せよ。
: OVER  >R DUP R> SWAP ;