Unlambdaとは、David Madoreによって定義されたプログラミング言語で、関数型言語に分類される。
1999年に純粋関数型言語の実証のために登場した言語。理論実証のためのシンプルな言語仕様だが、実用性も可読性もない。同年にバージョン2.0で入力用命令が追加されてからは仕様変更されていないしする必要もない。
変数の参照透過性という意味では変数定義がないので純粋だが、入出力の副作用を行う関数が存在するため厳密には純粋関数型言語として扱われないこともある。
Unlambdaのプログラムの例は、以下のようなものである。
```s``s``sii`ki `k.*``s``s`ks ``s`k`s`ks``s``s`ks``s`k`s`kr``s`k`sikk `k``s`ksk
このプログラムを実行すると、一行ごとにフィボナッチ数列の数だけアスタリスクが出力される。第何項までか引用元にも記載がないので、強制終了しない限りメモリ不足かオーバーフローでインタプリタがクラッシュするまで無限ループするっぽい。
サンプルコードを見てのとおり、プログラムのほとんどは`(バッククォート)とsとkで占められており、そのほかに少数のi、r、.などの補助的な記号がある。 これは実はコンビネータ論理(combinatory logic)という理論に基づいたものであり、その理論によれば、最低限`とsとkさえあればチューリング完全(つまり、C言語やBrainf*ckと同様のロジック)が達成できることが証明されている。
`は関数適用。kは2つ引数をとり、2つ目の引数を捨てて1つめの引数を返す関数。sが何かは考えたら負けは3つ引数をとり、「1つ目の引数を3つ目の引数に適用してできた関数を、2つ目の引数を3つ目の引数に適用してできた値に適用する」という関数である。カリー化されていることにも触れなければコードが書けないが、考えたら負けである。
ちなみにiは``skkの短縮表記だが、引数をそのまま返す恒等関数と言ったほうがわかりやすいだろう。
Unlambdaにおいて、すべてのオブジェクトは1引数関数である。たとえばサンプルコード中の*も関数(ただし動作は定義されていないので関数適用されることはなく、画面表示を行う関数の引数としてのみ使用されている)である。
rと.はそれぞれ標準出力に改行や文字を出力するための関数である。本来純粋関数型言語としては不要なものであるが、デバッグ用途やプログラムを実用的にするための用途(どの口が言う!)で用意されている。
急上昇ワード改
最終更新:2025/12/31(水) 10:00
最終更新:2025/12/31(水) 09:00
ウォッチリストに追加しました!
すでにウォッチリストに
入っています。
追加に失敗しました。
ほめた!
ほめるを取消しました。
ほめるに失敗しました。
ほめるの取消しに失敗しました。