ゴール指向評価
出典: フリー百科事典『ウィキペディア(Wikipedia)』 (2022/05/19 14:30 UTC 版)
Iconの中心的な特徴の1つは制御構造を真理値によるものから、成功か失敗によるものへと変更したことである。このモデルでは、 if a < b のような単純な比較は多くの言語のように 「もし式全体が真と評価されるならば」 という意味ではなく、 「もし処理全体が成功ならば」 というような意味である。この場合は比較が成り立つなら、<演算子は成功する。よってIconとその他の言語で実行結果は同じとなる。この方式がより興味深いのは、 if a < b < c のような場合である。<演算子は、比較が成り立つときは成功であると同時に、二番目の引数を値として返す。したがって、a < bの部分を評価して成功すれば、値としてbを返すので、つづいてb < cを評価することになる。当然、評価の時に一度でも失敗すれば、全体として失敗である。このような比較は、ほとんどの言語ではこのまま記述することができないが、Iconでは可能である。 この方式の有用性がより明確になるのは、現実の例で考えたときである。Iconでは if a := read() then write(a) は標準入力から標準出力へと1行をコピーする。この例はファイルが存在しないなどの理由でread()がエラーを発生したときでも正しく動作する。その場合は、a := read()が失敗し、write(a)は呼ばれない、という単純な動作である。 成功と失敗は例外処理のように関数を遡る、つまりネストした関数呼び出しの中で失敗が起こると呼び出し側の関数も失敗する。例として、入力ファイルの内容すべてを出力するプログラムは while write(read()) と書ける。read()が、例えばファイルの終わりに達して。失敗すると、呼び出しを遡ってwrite()も同様に失敗する。よってファイルの内容すべてを出力して停止する。比較のためにJava風の擬似コードを考える。 try {while ((a = read()) != EOF) write (a) ;}catch (Exception e) {/* 何もしない */} この場合、2つの比較が必要とされる。1つはファイルの終端(EOF)であり、もう1つはその他のすべてのエラー(Exception)である。 「何らかのゴールに達するまで評価が続けられる」という意味で、Iconではこのような方式をゴール指向評価という。上の例でのゴールはファイル全体を読み出すことであり、まだ読むべき情報が有るあいだはread()は成功し続け、無くなったら失敗する。従って、戻り値を調べる文や余分な構文は必要なく、ゴールが言語によって直に記述される。
※この「ゴール指向評価」の解説は、「Icon」の解説の一部です。
「ゴール指向評価」を含む「Icon」の記事については、「Icon」の概要を参照ください。
- ゴール指向評価のページへのリンク