Nesting Marker

p85

入れ子マーカ(nesting marker)"$"は、任意の文を式にする。その式の値は、入れ子マーカが置かれた位置における値である。例えば、文{P X1 X2 X3}を{P X1 $ X3}と書くことができ、これは式で、その値はX2である。これにより、ソースコードが簡潔になる。識別子X2の宣言と使用を省けるからである。X2に対応する変数はソースコードに現れない。

初見では何を言っているのか理解できませんでした。(^^; X2が出力パラメータであることを言ってくれませんと理解しにくいと思います。

簡単にいうとアウトパラメータを取るプロシージャ(手続き)をファンクション(関数)に変換することを言っています。C#で書くと、

// xとyの和を求める手続き
void Procedure(int x, int y, out int z)
{
    z = x + y;
}

int Function(int x, int y)
{
    int z;
    Procedure(x, y, out z);
    return z;
}

// 30が表示される
Console.WriteLine (Function(10, 20));

nesting markerを使うことでProcecureをラップするFunctionに相当する処理をやってくれるということです。

Ozのコードで説明すると、

declare
proc {Get X}
   X=10
end

Xに10を束縛する手続き「Get」があったとします。

その手続きを呼び出し取得した値を画面に表示するには、

local X in
   {Get X}
   {Browse X}
end

このようなコードを書くことになります。ローカル変数Xを宣言するのが面倒なのでnesting markerを使って文->式変換をすると、

{Browse {Get $}}

と書けるので楽ですよ、ってことを言いたいだけでした。原書の英語も似たような内容なので、この分かりにくさは翻訳の所為ではないですね。