Icon
その場合は、a := read()が失敗し、write(a)は呼ばれない、という単純な動作である。
成功と失敗は例外処理のように関数を遡る、つまりネストした関数呼び出しの中で失敗が起こると呼び出し側の関数も失敗する。例として、入力ファイルの内容すべてを出力するプログラムは
と書ける。read()が、例えばファイルの終わりに達して。失敗すると、呼び出しを遡ってwrite()も同様に失敗する。よってファイルの内容すべてを出力して停止する。比較のためにJava風の擬似コードを考える。
この場合、2つの比較が必要とされる。1つはファイルの終端(EOF)であり、もう1つはその他のすべてのエラー(Exception)である。
「何らかのゴールに達するまで評価が続けられる」という意味で、Iconではこのような方式をゴール指向評価という。上の例でのゴールはファイル全体を読み出すことであり、まだ読むべき情報が有るあいだはread()は成功し続け、無くなったら失敗する。従って、戻り値を調べる文や余分な構文は必要なく、ゴールが言語によって直に記述される。