Unlambda
SKIコンビネータ計算のI
Unlambda言語の第2版では新たな機能が導入された。「@」と「?U」によって、Unlambdaプログラムへの外部からのデータ入力が出来るようになったのである。「@」が関数 A に適用されると、入力から文字をひとつ読み込み、「現在の文字」として保存する。それから、関数 A がi演算子に適用される。しかし、もし入力から文字を読み込むことでできない場合は、「現在の文字」は未定義状態のままにされ、関数 A はv演算子に適用される。?U関数は、この関数が関数 A に適用されると、「現在の文字」が「U」であれば「`Ai」が、そうでなければ「`Av」が評価されるというものである。
「再表示関数」と呼ばれる関数「|」もある。これは、この関数が関数 A に適用されると、「現在の文字」が U であれば関数 A が 「.U」に適用され、そうでなければ関数 A が 「v」に適用されるというものである。
最後に、「終了関数」の「e」がある。 これは、この関数が関数 A に適用されると、プログラムの実行が終了され、関数 A がそのプログラム全体の最終結果として返される。(とはいえ、既存のUnlambdaインタプリタのほとんどがその結果値を無視する。)
「.H」や「.e」などの、「.A」で表されるものは恒等関数 (引数として与えられた値を全く変更せずにそのまま返す関数) で、副作用として「A」を表示するものである。「i」は副作用を伴わない恒等関数である。上述の Hello world プログラムではダミーの引数として使われている。「`.di」というプログラムは、文字「d」を表示する関数(「.d」)に引数iを適用して呼び出すもので、戻り値(評価結果)として関数「i」を返し、副作用として文字「d」を表示する。同様に、「``.l.di」というプログラムでは、まず、関数「 .l」に引数として「.d」が適用され、文字「l」が表示されて、戻り値として関数「.d」を返す。そして次に、この戻り値「.d」に対して、引数として関数「i」が適用され、前述の通りの動作が続く。関数「r」は改行文字を表示する関数の糖衣構文である。
Unlambda言語のその他の重要な特徴として、「kA演算子」と「s演算子」がある。kA演算子は、引数の値に関係なく戻り値として A を返す演算子である。つまり、「``kAB」の戻り値は、 B の値に関係なく、いつも A である。