unlambda 単語

アンラムダ

1.1千文字の記事
これはリビジョン 2747374 の記事です。
内容が古い・もしくは誤っている可能性があります。
最新版をみる

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つ目の引数を2つ目の引数に適用してできた関数を、1つ目の引数を3つ目の引数に適用してできた値に適用する」という関数である。カリー化されていることにも触れなければコードが書けないが、考えたら負けである。

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

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

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

関連リンク

関連項目

  • Lazy K
  • ラムダ計算
  • カリー化
  • 関数型言語
  • プログラミング言語
  • プログラミング関連用語の一覧

おすすめトレンド

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

記事と一緒に動画もおすすめ!
夢月ロア[単語]

提供: 応援してる

もっと見る

急上昇ワード改

最終更新:2025/12/31(水) 10:00

ほめられた記事

最終更新:2025/12/31(水) 09:00

ウォッチリストに追加しました!

すでにウォッチリストに
入っています。

OK

追加に失敗しました。

OK

追加にはログインが必要です。

           

ほめた!

すでにほめています。

すでにほめています。

ほめるを取消しました。

OK

ほめるに失敗しました。

OK

ほめるの取消しに失敗しました。

OK

ほめるにはログインが必要です。

タグ編集にはログインが必要です。

タグ編集には利用規約の同意が必要です。

TOP