タグ

ブックマーク / m-hiyama.hatenablog.com (7)

  • プログラミング言語の処理系と、デカルト圏の部分閉構造 - 檜山正幸のキマイラ飼育記 (はてなBlog)

    デカルト閉圏は計算(computations)のモデルとして大変に使いやすいものです。しかし、どうもデカルト閉圏が矮小化されて理解され、応用範囲を狭めているような印象も持ちます。デカルト閉圏が型付きラムダ計算のモデルであるのは事実ですが、このことが強調されすぎて、デカルト閉圏は「型付きラムダ計算にしか適用できない」という誤解があるのかもしれません。 静的に強く型付けされるプログラミング言語処理系は、デカルト閉圏でうまくモデル化できます。いま、「プログラミング言語」ではなくて、「プログラミング言語処理系」と言ったのに注意してください。プログラミング言語の構文に意味を付与する話ではなくて、コンパイラやランタイムを含んだメカニズム全体の定式化にもデカルト閉圏が使えます。 デカルト閉圏とプログラミング言語処理系 デカルト閉圏の特徴は、C(A×B, C) = C(A, [B, C]) という同型があ

    プログラミング言語の処理系と、デカルト圏の部分閉構造 - 檜山正幸のキマイラ飼育記 (はてなBlog)
  • 檜山正幸のキマイラ飼育記 - 世界で一番か二番くらいにやさしい「モナド入門」

    気まぐれと偶然となりゆきで、ここ2,3回はモナドを話題にしました。googleで「モナド」を引いてザッと眺めると、「モナドはむずかしいー」とか「モナドで挫折した」みたいな雰囲気が感じられて、説明芸人の血が少し騒ぎましたね。「なら、予備知識ゼロでモナドの説明をしてやろうじゃねーか」と。 タイトルはだいぶ煽っちゃった…… けど、ハッタリじゃないつもり…… けど、実際はどうかな? ※印刷のときはサイドバーが消えます。 内容: とりあえず、あたりさわりなくモナドの来歴を紹介する こんな課題を考えてみよう:副作用付き計算 カウントアップする関数達 カウントアップしたい意志を戻り値で伝える それでは、いったい誰がカウントアップをするのだ 関数の引数の型をCountup型にまで拡張する そして、これがモナドだ とりあえず、あたりさわりなくモナドの来歴を紹介する 今からここで説明する「モナド(monad)

    檜山正幸のキマイラ飼育記 - 世界で一番か二番くらいにやさしい「モナド入門」
    TaKUMA
    TaKUMA 2010/12/13
    モナドが少し分かった気になった。
  • 絵を描いて学ぶ・プログラマのためのラムダ計算 - 檜山正幸のキマイラ飼育記 (はてなBlog)

    JavaScriptで学ぶ・プログラマのためのラムダ計算」は、1回では述べ切らなくて、一段落付いたところで区切りました。これはかえって良かったですね、ブックマークやトラックバックでフィードバックが得られたので。 そのフィードバックなどをかんがみて、「残り=次回の話題」として予告した内容とはい違ってしまうのだけど、今回は、文章では伝わりにくい(前回うまく伝わらなかったと思える)ラムダ計算の大事なツボを、なんとか表現してみようと思います。 [このエントリーの内容はだいぶ前にほぼ出来上がっていたのだけど、ココに書いてある事情で、“お絵描き”がなかなか出来なかったのです。] ※印刷のときはサイドバーが消えます。 内容: 知っていて損はない 計算は身体的に理解しよう ラムダ項のツリー表示:準備 ラムダ項のツリー表示:描く! β変換に対応するツリーの描き換え もっとβ変換をやってみよう 計算現象を

    絵を描いて学ぶ・プログラマのためのラムダ計算 - 檜山正幸のキマイラ飼育記 (はてなBlog)
  • 檜山正幸のキマイラ飼育記 - JavaScriptによるテンプレート・モナド、すっげー簡単!

    先週書いたエントリー「圏論やモナドが、どうして文書処理やXMLと関係するのですか?」の内容を実際に確認するためのJavaScriptプログラムを書いてみました。 3つの関数を含み、全部で12行のライブラリです。 /* templ-process.js */ function processTemplate(templ, con) { var a = (templ.replace(/\}/g, '{')).split('{'); for (var i = 0; i < a.length; i++) if (i%2 == 1) a[i] = con(a[i]); // コンテキストconは関数 return a.join(''); } function processContext(con1, con2) { return function (k) {return processTemplat

    檜山正幸のキマイラ飼育記 - JavaScriptによるテンプレート・モナド、すっげー簡単!
  • 檜山正幸のキマイラ飼育記 - JavaScriptで学ぶ・プログラマのためのラムダ計算

    JavaScriptによるテンプレート・モナド、すっげー簡単!」にて: 紙と鉛筆でラムダ計算を実行できることは必要だな、やっぱり。 なんて強調したので、ラムダ計算の入門、いってみよう。 [追記]練習問題集を追加しました。説明を読みながら、あるいは読んだ後で是非やってみてください。→「JavaScriptで学ぶ・プログラマのためのラムダ計算 問題集」[/追記] ※印刷のときはサイドバーが消えます。 内容: JavaScriptの関数リテラル ラムダ式ってなんだ ラムダ計算の体系と適用操作 ラムダ式の例をいくつか β変換 -- ラムダ計算のキモ! β変換を何度か実行してみる 中間まとめ、まだ続きがあるよ JavaScriptの関数リテラル 最初に、JavaScriptに関する知識を確認しておきましょう。なお、JavaScriptの対話的実行環境については「もっともお手軽な対話的JavaScr

    檜山正幸のキマイラ飼育記 - JavaScriptで学ぶ・プログラマのためのラムダ計算
  • 檜山正幸のキマイラ飼育記 (はてなBlog)

    2023-10-25 圏スタンピング・モナドの代数は前層/余前層 雑記/備忘 「左加群は前層、右加群は余前層、双加群はプロ関手」の続きです。余前層としての右加群(または前層としての左加群)が、ファミリー〈集合族〉の圏上のモナドのアイレンベルク/ムーア代数になってるよ、という話です。$`\newcommand{\mrm}[1]{\mathrm{#1}}… 2023-10-24 続・有向コンテナと多項式コモナド: 錯綜整理 雑記/備忘 「有向コンテナと多項式コモナド」にて: モノイド類似構造である有向コンテナ〈圏〉構造が、多項式自己関手を台とするコモノイド構造として反映されるわけです。面白いですね。 面白そうなので、アーマン/ウウスタル〈Danel Ahman, Tarmo Uustalu〉以外の… 2023-10-23 Diag構成の変種とその書き方 雑記/備忘 ある文脈では、図式と関手は同

    檜山正幸のキマイラ飼育記 (はてなBlog)
  • はじめての圏論 その第1歩:しりとりの圏 - 檜山正幸のキマイラ飼育記

    全体目次: 第1歩:しりとりの圏 (このエントリー) 第2歩:行列の圏 第3歩:極端な圏達 第4歩:部分圏 第5歩:変換キューの圏 第6歩:有限変換キューと半圏 第7歩:アミダの圏 第8歩:順序集合の埋め込み表現 第9歩:基に戻って、圏論感覚を養うハナシとか 付録/番外など: 中間付録A:絵を描いてみた 番外:同期/非同期の結合 中間付録B:アミダとブレイド 番外:米田の補題に向けてのオシャベリ 一部のプログラミング言語の背景として、圏論(カテゴリー論)が使われたりするせいか、以前に比べれば多少は圏論に興味を持つ人が増えたような気がしなくもないような。でも、安直な入門的文書はあまり見かけないですね。もちろん、シッカリした教科書や論説はあるんですが、どうもシッカリし過ぎているような。例えば、圏の例として「コンパクト・ハウスドルフ空間と連続写像の圏」とか言われてもねぇ(この例はいい例なんです

    はじめての圏論 その第1歩:しりとりの圏 - 檜山正幸のキマイラ飼育記
  • 1