概要
- Forth はスタック指向のプログラミング言語で、独特な構文と操作性を持つ
- このガイドでは Forth の基本から応用までを、JavaScript実装を使って解説
- スタック操作 や ワード定義、 出力、 条件分岐、 ループ など主要機能を紹介
- 例題 を通じてForthの考え方と使い方を体験できる構成
- 他言語経験者向けに、 Forth の特徴的な思考法を学ぶための入門書
Forth入門:概要と特徴
- Forth は1970年代に開発された スタック指向言語
- 関数型 や オブジェクト指向 ではなく、 型チェック や複雑な構文もほぼ無し
- 現代でも 一部の組込み機器や特殊用途で使用例あり
- 新しい言語を学ぶことで 問題解決の視野拡大 に役立つ
- 本書は JavaScript実装 の簡易Forthインタプリタを利用し、例題を試しながら学習
数値操作とスタックの基本
- Forthでは 全ての操作がスタック を中心に行われる
- 数値を入力すると スタックにプッシュ される
- + 演算子はスタック上部2つの値を 加算 し、結果を再びスタックへ
- 例:
1 2 3→ スタック:1 2 3(上がTop)+→ 1 5(2+3=5)- さらに
+→ 6(1+5=6)
- オペレータが 後置 される 逆ポーランド記法 を採用
- 括弧や優先順位を気にせず、 記述順がそのまま計算順序
スタック効果とワード定義
- 各ワード(命令)は スタックの状態 を変化させる
- スタック効果は
( 入力 -- 出力 )で表現- 例:
+ ( n1 n2 -- sum )
- 例:
- 新しいワードは
: 名前 ... ;で定義- 例:
: foo 100 + ;はスタックトップに100を加算
- 例:
- 未定義ワードや数値以外はエラーとして表示
スタック操作ワード
- dup ( n -- n n ) :スタックトップを複製
- drop ( n -- ) :スタックトップを削除
- swap ( n1 n2 -- n2 n1 ) :トップ2つの値を交換
- over ( n1 n2 -- n1 n2 n1 ) :2番目の値をトップに複製
- rot ( n1 n2 n3 -- n2 n3 n1 ) :上位3つの値をローテーション
出力関連ワード
- . ( n -- ) :スタックトップの数値を出力
- emit ( c -- ) :スタックトップをASCII文字として出力
- cr ( -- ) :改行出力
- ." ( -- ) :文字列出力(定義内で使用)
条件分岐とループ
- Forthにはboolean型がなく、0がfalse、0以外(主に-1)がtrue
- =, <, > で比較、 and, or, invert で論理演算
- if then :条件分岐(定義内のみ利用可)
- 例:
: buzz? 5 mod 0 = if ." Buzz" then ;
- 例:
- if else then :if/else文
- do loop :C言語のfor文に近いループ
- 例:
: loop-test 10 0 do i . loop ;(0〜9を出力)
- 例:
Fizz Buzzの例
- Fizz Buzz もシンプルに実装可能
- 3の倍数でFizz、5の倍数でBuzz、両方でFizzBuzz
- doループと条件分岐を組み合わせて実現
(続きが必要な場合はお知らせください)