Factor/サンプルプログラム

サンプルプログラム

以下に示すのは、私のお気に入りのサンプルプログラムです。

シンプル

ネットワークとウェブ

アルゴリズム

  • rot13 - rot13 "暗号化"
  • roman - 数字とローマ数字との相互変換
  • morse - 文字列とモールス信号の相互変換、OpenAL を使ったモールス信号遊び
  • base64
  • id3 - ID3 パーサ
  • usa-cities - CSV ファイルをパースして情報を抽出
  • benchmark.mandel - マンデルブロートフラクタルジェネレータ

C ライブラリバインディング

C ライブラリバインディングの多くには、使いやすいラッパーが用意されています (たとえば、Unix API を直接使用する必要性はまったくありません。なぜなら、すべての I/O は高水準クロスプラットフォーム API を介して行われるからです)。詳細については、Factor の C ライブラリインタフェースを参照してください。

グラフィックス

このカテゴリのサンプルプログラムはこれまでに示したものより複雑で、作成してからやや時間が経っており、最近の語法を使うための修正も加えられていません。これらのサンプルプログラムはいずれも、十分に機能する OpenGL ドライバが利用可能であれば、Factor UI から実行できます。リスナーで "spheres" run のようにしてコマンドを実行してください。

コンピュータサイエンス

  • rpn - シンプルな逆ポーランド記法電卓。パーサ、「バイトコード」インストラクションセット、シンプルなスタックインタープリタをスクラッチから実装しており、Factor 自身の実装の一部をリフレクションによって再利用することはしていません。
  • monads - ジェネリックプロトコル、モナドに対するいくつかの操作、および少数のシンプルなインスタンスを実装しています。

サンプルプログラムの実行

一部のサンプルプログラムでは、MAIN: ワードが定義されています。これらのサンプルプログラムは、Factor のリスナーから次のようなコマンドを入力することで実行できます。

"hello-unicode" run

その他のサンプルプログラムはライブラリで、最初に次のようなコマンドを入力してライブラリをロードします。

USE: roman

ライブラリがロードされたら、ワードのリストを取得したり、一部のサンプルプログラムでは API に関するドキュメントを参照したりすることができます。

"roman" about

次に示すのは実行例です。

( scratchpad ) 123 >roman .
"cxxiii"

サンプルプログラムを理解するには

USING: リストでボキャブラリを参照しているサンプルプログラムでは、Factor のリスナーで次のように入力すれば、使われているボキャブラリのヘルプを参照できます。

"math.vectors" about

about で表示されるページには、ワードとそのスタック効果の一覧が表示されます。目的のワードをクリックすると、ワードのドキュメント (ある場合には)、さらにワードの定義が表示されます (ワードの定義については、メモリ内の表現が表示されるので、ソースファイルの定義とは一致しない場合があります)。多くのボキャブラリでは、ページの一番上にある「ドキュメント」 (document) のリンクをクリックすると、概要が表示されます。

サンプルプログラムで自分が知らないワードが呼び出されている場合は、そのサンプルプログラムの USING: の行をリスナーにコピーして、必要なボキャブラリをすべてロードしてから、次の要領で help ワードを使えば、そのワードについてのヘルプを表示できます。

\ reverse help

この方法は、一部の構文についても使用できます。

\ MEMO: help

最後に、リファレンスドキュメントのすべては、http://docs.factorcode.org でオンラインで参照できます。

その他のサンプルプログラム

Factor コードのサンプルをもっと参照するには、Factor ディストリビューションをダウンロードし、core/basis/、および extra/ ディレクトリを覗いてみてください。Factor の大部分は (最適化コンパイラも含めて) Factor で実装されており、合計 20 万行を超える Factor コードの中から、数多くの有益なライブラリやデモを見つけることができるでしょう。

This revision created on Wed, 23 Sep 2009 14:36:12 by Jon (hide the link... we really need a preview button...)