Forthは確かに驚くほどコンパクトです!仮パラメータのないワード(およびハードウェアでのゼロオペランド命令-たとえばGA144)は、多くの節約になります。そのコンパクトさのもう1つの主な要因は、呼び出し規約と連結性によって提供される冗長コードの絶対的に容赦ないファクタリングです。
おもちゃ以外の例として適格かどうかはわかりませんが、 Fignition(FigForth内)のタートルグラフィックスの実装は、コンパイルされた307バイトであり、単一のソースブロックに収まります。これには、固定小数点トリガーとすべての通常のタートルコマンドが含まれます。これは、読み取り可能なForthの最良の例ではありません。これは、1文字の名前などを含む単一のソースブロックに圧縮しようとしているためです。
\ 8.8 fixed point sine table lookup
-2 var n F9F2 , E9DD , CEBD , AA95 , 7F67 , 4E34 , 1A c,
: s abs 3C mod dup 1D > if 3C swap - then dup E > if
-1 1E rot - else 1 swap then n + c@ 1+ * ;
0 var x 0 var y 0 var a
0 var q 0 var w
: c 9380 C80 0 fill ; \ clear screen
: k >r 50 + 8 << r> ! ;
: m dup q @ * x +! w @ * y +! ; \ move n-pixels (without drawing)
: g y k x k ; \ go to x,y coord
: h dup a ! dup s w ! 2D + s q ! ; \ heading
: f >r q @ x @ y @ w @ r 0 do >r r + >r over + \ forward n-pixels
dup 8 >> r 8 >> plot r> r> loop o y ! x ! o r> o ;
: e key 0 vmode cls ; \ end
: b 1 vmode 1 pen c 0 0 g 0 h ; \ begin
: t a @ + h ; \ turn n-degrees
それを使用することも非常に簡潔です。
: sin 160 0 do i i s 4 / 80 + plot loop ;
: burst 60 0 do 0 0 g i h 110 f loop ;
: squiral -50 50 g 20 0 do 100 f 21 t loop ;
: circle 60 0 do 4 f 1 t loop ;
: spiral 15 0 do circle 4 t loop ;
: star 5 0 do 80 f 24 t loop ;
: stars 3 0 do star 20 t loop ;
: rose 0 50 0 do 2 + dup f 14 t loop ;
: hp 15 0 do 5 f 1 t loop 15 0 do 2 f -1 t loop ;
: petal hp 30 t hp 30 t ;
: flower 15 0 do petal 4 t loop ;
(恥知らずなブログプラグ: http: //blogs.msdn.com/b/ashleyf/archive/2012/02/18/turtle-graphics-on-the-fignition.aspx)