復習の為に http://www.latrobe.edu.au/philosophy/phimvt/joy/j09imp.html を読んでいます。番号は 9 番ですが、これを最初に読まないと他のドキュメントを試す事が出来ません。
項の内容
- 先頭が $ の行はシェルが実行する。
- 例: $ ls
- コメントは (* *) もしくは行指向コメント #
- 例: (* comment *)
- 例: # comment
- 特殊記号
- []{};.
- 整数定数
- 例: -100 (最大値は普通 2の 31 乗)
- 特殊文字
- 例: \n C と同じ
- 文字定数
- 例: 'a'
- 文字列定数
- 例: "Hello world"
- 予約語
- ==
- MODULE
- PRIVATE, HIDE (別名)
- PUBLIC, IN, DEFINE, LIBRA (別名)
- END
定義文
- 複定義文は次の形をしている。
- MODULE 名前 PRIVATE 定義; 定義; ... PUBLIC 定義; 定義; ... END(または .)
- MODULE, PRIVATE, PUBLIC は省略出来る。
- HIDE 定義; 定義; ... IN 定義; 定義; ... END(または .)
- DEFINE 定義; 定義; ... END(または .)
- LIBRA 定義; 定義; ... END(または .)
- 定義は複定義または単定義から成る。単定義は以下の形をしている。
- 名前 == 項
例
DEFINE hello == "Hello world" END LIBRA morning == "Good morning"; night == "Good night".
DEFINE や LIBRA は単に PUBLIC の別名だと書いてあるが、そうでも無いみたい。
Joy の起動
- カレントディレクトリに "usrlib.joy" があれば実行してからメインサイクルに移る。
- ファイルに書かれたプログラムを実行するにはリダイレクト使う。その場合もカレントディレクトリの "usrlib.joy" が最初に実行される。
- コマンドラインオプション付きで実行すると、第一引数はファイル名として扱われ標準入力の代わりに使われる。オプションの全体は argv で取得出来る。
- #! を使ったスクリプトを作成できる。
#!joy "Hello World!" .
入出力
標準で Joy は . が現れるたびにスタックの内容を出力する。しかし setautoput を使ってこの動作を変更する事も出来る。
- 0 setautoput : 自動出力を無効
- 1 setautoput : 自動出力を有効(標準)
入力エコーの制御が出来る。(ファイル入力をトレースするのに便利)
- 0 setecho : エコー無効
- 1 setecho : 変更でエコー
- 2 setecho : tab をつけてエコー
- 3 setecho : 行番号と tab をつけてエコー
明示的な入出力
- オブジェクト put : オブジェクトを出力
- 数字 putch : 数字に対応する文字を出力
- "ファイル名" include : 他のファイルから入力を行う
エラー
- 文法エラー : 文法エラー
- 実行エラー : スタックのプロジェクトが足りなかったり型が違う。
ライブラリ
- usrlib.joy : 最初に読むファイルのサンプル
- inilib.joy : 色々便利な関数集を読み込む。
- inilib.joy に定義された all-libsload で以下のライブラリを読み込む。
ヘルプ
- help. 定義されている名前が表示される。
- [名前] helpdetail. 名前の定義が表示される。