Oz のイコールは普通の代入でも同値検査でも無い。
local X Y in f(X b) = f(a Y) {Show [X Y]} end
- local はスコープの始まりを表す。scheme で言う所の let。
- ラベル(キー: 値 キー: 値) は構造体のようなもの。キーを省略した場合、PHP のように 1, 2, ... と番号付けられる。
- 小文字で始まるのはシンボル。大文字で始まると変数。
- 変数は一度しか代入(定義)出来ない。
- イコールによって、両辺はマージされる。変数があれば定義される。
- 上手くマージできなければ失敗する。
と言う事で、イコールによって X = a, Y = b となり
[a b] が表示される。
local Z in f(Z a) = Z {Browse Z} end
これはもっと面白い例。Z が Z によって無限に定義される。
両辺をひっくり返したり、Z と a の順番を変えてもそれなりに期待する動作をします。
リストを表す方法はいくつもある。
{Browse [1 2 3]} {Browse 1|2|3|nil} {Browse '|'(1 '|'(2 '|'(3 nil)))} {Browse '|'(1 '|'(2 '|'(1:3 2:nil)))} % このイコールの使い方は良く分からない。。。 {Browse [1 2 3] == '|'(1 '|'(2 '|'(1:3 2:nil)))}