サービス終了のお知らせ いつもYahoo! JAPANのサービスをご利用いただき誠にありがとうございます。 お客様がアクセスされたサービスは本日までにサービスを終了いたしました。 今後ともYahoo! JAPANのサービスをご愛顧くださいますよう、よろしくお願いいたします。
石井君*1が、2月19日セミナーのツイン・ホワイトボードを撮影してくれていたので、ハイライト(?)部分を紙芝居にしました。 紙と鉛筆の準備はいいかな -- では、はじまりはじまり。 g = <a, b, x| a*x + b> という関数があるとき、これを2回“ラムダ抽象”してみます。ラムダ抽象とは、右肩ハット(^)または大文字ラムダ(Λ)で表されるオペレータです。ラムダ抽象とカリー化は同義語です*2。ラムダ抽象すると、n引数関数は(n-1)引数関数に変化し、その代わり戻り値が関数型になります。ただし、ここで言う「関数型」は数学的な関数の型ではなくて、とある実行エンジンEで実行する関数コードのデータ型のことです。 gの2回ラムダ抽象g^^を絵に描くとこうです。 gの1回ラムダ抽象 g^ = Λg と、gの2回ラムダ抽象 g^^ = Λ(Λg) を計算してみます。Λの計算規則*3を使えば、こ
昨日の圏論勉強会に少し顔を出しました。そしたら、たけをさんがお絵描き計算(絵算;pictorial calculation)をしていました(この記事を参照)。けっこうめんどくさい計算をお絵描きしていたので、その場でお絵描き2級を授与しました(少し、はやまった気もするが)。 使っていた描き方は、「デカルト閉圏における絵算 詳細編」のものですが、実は「デカルト閉圏における絵算 オマケ」で補足訂正しているので、新しい流儀を使ってくださいな。新しい描き方を使うと、ベータ変換、イータ変換がより直感的になります。そのことを以下で説明。 内容: 新しい描き方 ベータ変換のアニメーション 引き伸ばしとジグザグ等式 関連するエントリー 新しい描き方 ラムダ抽象(カリー化)により分岐とループができますが、新しい描き方では: 分岐ノードを小さな丸で描く。必要なら文字「λ」で印を付ける。 ループの向きは逆方向だと
だいぶ前に、クロージャ(閉包)って言葉の意味がわからないと書いたことがあります(「クロージャ、それなに?」)。最近また「クロージャ」って言葉を聞いたのですが、やっぱり何を意味しているのかわかんなくて(詮索する余裕もなくて)落ち着かない気分になりました。これはどうも精神衛生上よくない。 「クロージャ」と「ラムダ式」はまったく同義に扱ってもいいんじゃないのかな。例えばラムダ式 λx.(a*x + b) があるとき、自由変数a, bを具体化するための環境(変数束縛)をラムダ式と一緒にした (λx.(a*x + b), {a : 2, b : 1}) が古典的な意味のクロージャでしょ、たぶん。letを使えば、(let a = 2 b = 1; λx.(a*x + b)) みたく書けるけど、これも結局 (λa.λb.(λx.(a*x + b)))(2)(1) だから1個のラムダ式ですよね。 「クロー
セミナーをやって良い点でもあり辛い点でもあるのは、終わった後で 「こういう説明ならもっと分かりやすかったのでは」 「あーいう順序で話すほうが合理的だった」 「あそこは省略すべきだった」 「駄洒落がスベッた」 「せっかく考えていたギャグを言い忘れた」 などなど、反省つうか後悔が、夏場(今、冬だけど)の入道雲のように湧き湧きしてくることです。 本人(檜山)はかなり強調しているつもりでも、それでもハッキリとは伝わらない事項がいくつかあったようです -- 別な機会(セミナー第1回も含め)で、檜山が何にこだわっているかを承知していれば話は別かもしれませんが。まーともかく、可能な限りアフターフォローします。 本エントリーは、「技術者/プログラマのためのラムダ計算、論理、圏」セミナーとなるべく独立に読めるようにしたつもりですが、次の資料をザッと眺めたほうがいいとは思います。 http://www.chi
組み込み関数の一覧は以下の通り。 ` 関数適用 s SKIコンビネータ計算のS k SKIコンビネータ計算のK i SKIコンビネータ計算のI v 引数を無視して v を返す d 厳密には関数というよりも特殊形式で、評価を遅延し、2回目の評価の時に初めて評価する c 継続。call-with-current-continuation。 e 継続を無視し、プログラムを終了させる r 改行を表示し、後はIと同じ振る舞い . 引数の文字を表示し、後はIと同じ振る舞い @ 標準入力から1文字読み込む ? 標準入力から1文字読み込み、引数と比較する | 標準入力から1文字読み込み、表示する 「.H」や「.e」などの、「.A」で表されるものは恒等関数 (引数として与えられた値を全く変更せずにそのまま返す関数) で、副作用として「A」を表示するものである。「i」は副作用を伴わない恒等関数である。上述の
ラムダ計算は, 多くのプログラミング言語, とくに関数型言語の原形になっています. ラムダ計算について理解しておくことは, 多くのプログラミング言語の習得に役立つでしょう. ラムダ計算はチューリング完全で, 計算能力としてはふつうのプログラミング言語と同じです. ラムダ計算で計算を書く訓練をしておくことは, 任意の計算を関数のみを使って(他の制御構文を用いずに)書くときに役立ちます. ふつうに書いたら煩雑な処理を, 関数型言語のやり方で書くとすっきりすることが多々あり, コードを自由自在に書くためには必須の考え方と言えるでしょう. 項 ラムダ計算の式を項(term)と言います. 項は変数, 抽象, 適用のいずれかです. 変数 変数(variable)はふつう1文字で書きます. 変数には関数内の束縛変数(bound variable)か自由変数(free variable)かという区別があり
この記事には参考文献や外部リンクの一覧が含まれていますが、脚注による参照が不十分であるため、情報源が依然不明確です。 適切な位置に脚注を追加して、記事の信頼性向上にご協力ください。(2020年5月) ラムダ計算(ラムダけいさん、英語: lambda calculus)は、計算模型のひとつで、計算の実行を関数への引数の評価(英語: evaluation)と適用(英語: application)としてモデル化・抽象化した計算体系である。ラムダ算法とも言う。関数を表現する式に文字ラムダ (λ) を使うという慣習からその名がある。アロンゾ・チャーチとスティーヴン・コール・クリーネによって1930年代に考案された。1936年にチャーチはラムダ計算を用いて一階述語論理の決定可能性問題を(否定的に)解いた。ラムダ計算は「計算可能な関数」とはなにかを定義するために用いられることもある。計算の意味論や型理論
リリース、障害情報などのサービスのお知らせ
最新の人気エントリーの配信
処理を実行中です
j次のブックマーク
k前のブックマーク
lあとで読む
eコメント一覧を開く
oページを開く