Unlambda単語

アンラムダ
2.3千文字の記事
  • 2
  • 0pt
掲示板へ

Unlambdaとは、David Madoreによって定義されたプログラミング言語で、関数型言語に分類される。 

概要

1999年に純関数型言語の実のために登場した言語。理論のためのシンプルな言語仕様だが、実用性も可読性もない。同年にバージョン2.0で入力用命が追加されてからは仕様変更されていないしする必要もない

変数参照透過性という意味では、そもそも変数定義がないので純だが、入出力の副作用を行う関数が存在するため厳密には純関数型言語として扱われないこともある。なお、Unlambdaの開発者は純関数型言語とは関数のみが第一級である言語のことをすべきであるなどと供述しており定義の問題に過ぎないのかもしれない。

サンプルコード

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

The Unlambda Programming Languageexitより

このプログラムを実行すると、一行ごとにフィボナッチ数列の数だけアスタリスクが出力される。第何項までか引用元にも記載がないので、強制終了しない限りメモリ不足かオーバーフローインタプリタクラッシュするまで無限ループするっぽい。

Hello Worldのサンプルコードは意外と普通な外見をしている。当該記事を参照のこと。

言語仕様

サンプルコードを見てのとおり、プログラムのほとんどは`(バッククォート)とsとkで占められており、そのほかに少数のi、r、.などの補助的な記号がある。 これは実はコンビネータ論理(combinatory logic)という理論に基づいたものであり、その理論によれば、最低限`とsとkさえあればチューリング完全(つまり、C言語Brainf*ckと同様のロジック)が達成できることが明されている。

`は関数適用。kは2つ引数をとり、2つ引数を捨てて1つめの引数を返す関数。sが何かは考えたら負けは3つ引数をとり、「1つ引数を3つ引数に適用してできた関数を、2つ引数を3つ引数に適用してできた値に適用する」という関数である。

カリー化されていることにも触れなければ`が複数並んでいる理由が理解できないが、やはり考えたら負けである。

i は``skk の短縮表記だが、引数をそのまま返す恒等関数と言ったほうがわかりやすいだろう。

ちなみに、k はconstantドイツ語Konstant、s はsubstitution、i はidentityの頭文字である。

Unlambdaにおいて、すべてのオブジェクトは1引数関数である。たとえばサンプルコード中の*も関数(ただし動作は定義されていないので関数適用されることはなく、画面表示を行う関数引数としてのみ使用されている)である。

rと.はそれぞれ標準出力に改行文字を出力するための関数である。本来純関数型言語としては不要なものであるが、デバッグ用途やプログラムを実用的にするための用途(どの口が言う!)で用意されている。

名前の由来

ラムダ計算ラムダの操作を用いずにKとSのコンビネータだけで実装したからUnlambdaだとのこと。

Mathematically, the core of the language can be described as an implementation of the lambda-calculus without the lambda operation, relying entirely on the K and S combinators. Hence the name “Unlambda”.

The Unlambda Programming Languageexitより

Unlambdaには値に名前をつける機がないのでラムダ計算α変換がないというのはわかるとしても、β変換は関数適用なので`が該当するのではないかと思う人がいるかもしれない。ここでいう「ラムダの操作(lambda operation)」とは、ラムダ抽象(関数をラムダ式で表現すること)を指すexit

λx y.(x2 + xy + y2)のようなラムダ式変数名x, y が使えないので書くことは出来ず、ラムダ式相当の機を使いたければ、ラムダ式がある状態を、s, k, i の組み合わせによってラムダ式のない状態に変換しなければならないから"Un" lambdaだということらしい。

関連リンク

関連項目

Lazy K

上記概要に書いたUnlambdaは純ではないという批判を元に作られたプログラミング言語

複数の表記法が認められているが、端的に言えば`, s, k, i しかないUnlambdaである。

初出に関するはっきりした情報がないが、2002年のEsoteric Award(: 難解プログラミング言語大賞みたいな意味)に投稿されたexitのが初出ではないかと思われる。

文字や数値も`, s, k, i の組み合わせで表現するのでHello Worldするだけでも大変なことになる。こちらexitを参照のこと。

関連リンク

【スポンサーリンク】

  • 2
  • 0pt
記事編集 編集履歴を閲覧

ニコニ広告で宣伝された記事

ポケモンずかん (単) 記事と一緒に動画もおすすめ!
提供: GUEST
もっと見る

この記事の掲示板に最近描かれたお絵カキコ

お絵カキコがありません

この記事の掲示板に最近投稿されたピコカキコ

ピコカキコがありません

Unlambda

1 ななしのよっしん
2019/11/16(土) 23:49:58 ID: gL/H8gjyac
ここの解説が分かりやすかった
http://todaysworld.blog106.fc2.com/exit
👍
高評価
0
👎
低評価
0

急上昇ワード改

2025/04/24(木)00時00分 現在