作者: 機械伯爵
日時: 2009/5/1(08:03)
■変数を変化させる例

variable fn  ok
: fact 1 fn ! 11 1 ?do fn @ i * fn ! loop fn @ . ;  ok
fact 3628800  ok

コメント:変数と?do-loopを使った手続き言語っぽい例



■スタック操作だけの例

: fact begin swap over * swap 1- dup 1 = until drop . ;  ok
10 9 fact 3628800  ok

コメント:Forthっぽくスタック操作で計算した例



■再帰バージョン

<gforthのマニュアルのサンプル>
: fact dup 0> if dup 1- recurse * else drop 1 endif ;  ok
10 fact . 3628800  ok

コメント:再帰を使い、さらに階乗の定義にそった形で返す



<改造版>
: fact dup 1 > if dup 1- recurse * endif ;  ok
10 fact . 3628800  ok

コメント:シンプルにはなったが、0! = 1 というお約束には対応せず



<スタックをあまり深くしないバージョン>
: fact 1- dup 1 > if swap over * swap recurse else drop endif ;  ok
10 10 fact . 3628800  ok

コメント:スタックは最大4段しか使わないが、経過を追うのがややこしい(入
	れ替えマニア向け)


確認:gforth 0.7.0