タグ

functionalに関するkageroh_のブックマーク (10)

  • ラムダ計算基礎文法最速マスター - 貳佰伍拾陸夜日記

    ラムダ計算は, 多くのプログラミング言語, とくに関数型言語の原形になっています. ラムダ計算について理解しておくことは, 多くのプログラミング言語の習得に役立つでしょう. ラムダ計算はチューリング完全で, 計算能力としてはふつうのプログラミング言語と同じです. ラムダ計算で計算を書く訓練をしておくことは, 任意の計算を関数のみを使って(他の制御構文を用いずに)書くときに役立ちます. ふつうに書いたら煩雑な処理を, 関数型言語のやり方で書くとすっきりすることが多々あり, コードを自由自在に書くためには必須の考え方と言えるでしょう. 項 ラムダ計算の式を項(term)と言います. 項は変数, 抽象, 適用のいずれかです. 変数 変数(variable)はふつう1文字で書きます. 変数には関数内の束縛変数(bound variable)か自由変数(free variable)かという区別があり

    ラムダ計算基礎文法最速マスター - 貳佰伍拾陸夜日記
  • 「モナドは象だ」の翻訳まとめ - Fight the Future

    とてもエントリが多くの回にわたったので、まとめます。 One Div Zero: Monads are Elephants Part 1 モナドについて調べていく(7) - Fight the Future じゅくのblog モナドについて調べていく(8) - Fight the Future じゅくのblog モナドについて調べていく(9) - Fight the Future じゅくのblog モナドについて調べていく(10) - Fight the Future じゅくのblog モナドについて調べていく(11) - Fight the Future じゅくのblog モナドについて調べていく(12) - Fight the Future じゅくのblog One Div Zero: Monads are Elephants Part 2 モナドについて調べていく(14) - Fig

    「モナドは象だ」の翻訳まとめ - Fight the Future
  • Route 477(2009-06-24)

    ■ [vim] VimでESCを押すたびにファイルを保存する .vimrcに inoremap <ESC> <ESC>:<C-u>w<Return> と書いておくと、ESCでインサートモードから抜けるたびに「:w」でファイルを保存するようになる。 やりすぎだ、と言われるかも知れないが、svnやgit等のバージョン管理システムを使っていれば特に 問題になることはない。むしろ、いちいち「:w<Return>」などと3つもキーを叩いてファイルを保存するのが無駄に思えるくらいだ。 (6/26追記:一方Vimハッカーはこうした:) http://vim.g.hatena.ne.jp/ka-nacht/20090625/1245857600 ■ [ruby] オブジェクト?それクロージャでできるよ という話はLisp系の人ならご存じかもしれないが、最近Schemeでやってみたらなかなか心地よかったので

    Route 477(2009-06-24)
  • さあ、Yコンビネータ(不動点演算子)を使おう! - よくわかりません

    前回、おとうさんにもわかるYコンビネータ!(絵解き解説編) - よくわかりませんというエントリで、Yコンビネータ(不動点演算子)と再帰の絵解き解説をしました。 Yコンビネータ自身は、結局のところ再帰を産み出してくれるだけです。関数(正確にはλという単純な文字列変換ルール)だけで出来て、プログラミングに関するいろんな原理の研究を可能にするのが凄い訳です。その辺のさわりを、きしださんが解説されています。しかし、単なる再帰なら、実際のプログラミングではYコンビネータなんて使わなくても出来ます。 じゃあ、Yコンビネータとか不動点とかは、偉い学者さんとかが研究に使えばいいもので、普通のプログラマには何の意味もないモノなのでしょうか? というわけで、今回はポジティブに、Yコンビネータや不動点で出てくる考え方を、理論だけじゃなく、実際のプログラミングに応用する例を見てみましょう。 今回、プログラムの例を

  • おとうさん、ぼくにもYコンビネータがわかりましたよ! - 2009-04-09 - きしだのはてな

    やっと、Yコンビネータが何を意味するものなのか、どういう意義があるのかがわかりました。 名前を使わず再帰ができますよ!というだけのものじゃなかったのですね。 まずλありき 関数の話をしたいのです。 そのとき、いちいち hoge(x) = x * 2 としてhogeを・・・、とか名前をつけて話を進めるのがめんどうなので、関数を値としてあらわすと便利ということで、λという値を定義するのです。 そうすると、上のhoge関数なんかはλ(x)(x*2)などとあらわせますが、引数をあらわすのに()を使うといろいろまぎらわしいので、 λx.x*2 のように表記します。 というのがλ。 このとき、λになにかわたされたら、引数としてあらわされる部分を単純におきかえます。 (λx.x*2)y とあったら、xの部分をyでおきかえて (λx.x*2)y → y * 2 となります。λの引数部分を与えられた引数で置

    おとうさん、ぼくにもYコンビネータがわかりましたよ! - 2009-04-09 - きしだのはてな
  • Coqで遊ぶその2: 風が吹けば桶屋が儲かるか - 言語ゲーム

    前回の Coq はいきなり難しすぎました。forall とか、数学やってる人には常識なのかも知れないけど一介のプログラマには高度すぎます。ikegami さんに単純な例 http://www.youtube.com/watch?v=f9XOdpmeJ0o を教えてもらったんだけど同じじゃつまらないのでちょっと変えてやってみます。 風が吹く -> 桶屋が儲かる 風が吹く 以上の二つが成り立つ時、「桶屋が儲かる」が成り立つ。 矢印 -> は、条件と結果を現す記号です。「としたら」とか、「ならば」のように読みます。ここで一体何を証明しようとしているのか確認するのは大切だと思うので強調しますが、ここでは「風が吹く -> 桶屋が儲かる」こと自体を証明しようとしているわけではありません。もしも「風が吹く -> 桶屋が儲かる」と「風が吹く」の二つが正しいとしたら、「桶屋が儲かる」も正しいと言う事、つまり

    Coqで遊ぶその2: 風が吹けば桶屋が儲かるか - 言語ゲーム
  • Coqで遊ぶその1: - 言語ゲーム

    CafeOBJ の雰囲気が分かった所で今度は Coq に挑戦。かなり難しいですが、あきらめずに Coq in a Hurry http://cel.archives-ouvertes.fr/inria-00001173 を元に勉強しています。 起動と終了 起動は coqtop で終了は Quit. です。また、macports でインストールすると emacs 用のスクリプトがついてきます。 M-x load-library coq-inferior M-x run-coq で実行すると便利。 Check: 要素から型を探す。 Check コマンドを使うと、関数型言語みたいに使えます。ただし計算はせずに型だけ表示します。nat が自然数型で、Prop が命題型(「ある」か「ない」かをあらわす)、Prop と似たようなのに bool (論理型) がありますが、使い分けるそうです。 Coq <

    Coqで遊ぶその1: - 言語ゲーム
  • なんでも継続

    Shiro Kawai まだ下書き Schemeの特徴をあげるときに、「継続」や「call/cc」が出て来ないことはない。 でも、R5RSのcall/ccの項をいくら読んでも、どうもよくわからない。 call/ccを使えばC言語のbreakみたいなのとか、コルーチンとかいう スレッドもどきとかが書ける、というのはわかったけど、一体そういうのが書けて 何が嬉しいのか、そこんとこがピンと来ないんだ。 今、そこにある継続 プログラミングの世界の概念には、禅の公案のようなものがある。 それを説明する文章はほんの一文なのに、最初に目にする時、 その文は全く意味をなさない、暗号のように感じられる。 だがひとたびその概念を理解すると、 その概念の説明は確かにその一文で説明されているのがわかるのだ。 そんな、「分かれば分かる」という禅問答の中でも 「継続」は最も謎めいたものの一つと言えるだろう。 文献を

  • 紫藤のページ

    紫藤のページにようこそ! Lisp, Haskell, Python, Sather などの関数型言語の解説、小品プログラムを載せています。 ここでは関数型プログラミング言語をものすごく広い意味で使っており、 手続きをデータとして扱える言語を指します。 (Python, Sather などは普通はオブジェクト指向言語に分類されます。) また、xyzzy のマクロに関するメモもあります。 面白そうな割りに、web 上に文書が少ない題材を取り上げています。 リンクはご自由にお張りください。 更新ログ [Sep 15, 2014](Python) Set を用いたライフゲームの実装 を作成 [Jul 21, 2014]デコレータを用いた bottle.py のアクセスコントロール を作成 [Jul 13, 2014]Maildir のバックアップ を作成 [Jun 28, 2014]自宅サーバの

  • Karetta|Gaucheプログラミング|「Lisp脳」の謎に迫る - Schemeプログラマの発想

    この原稿の最新版について この原稿に加筆した最新版が書籍「プログラミングGauche」に収録されています。 引用や紹介をされる方はなるべく書籍収録版を参照してください。 他の言語のプログラマがSchemeプログラムを書くとき、 どうしても発想が手続き的(procedural)になりがちです。 LispプログラマやSchemeプログラマの発想は手続き的な発想とはどうも違うらしい、 ということは分かるのですが、具体的に何が違うのでしょうか? ここではこの謎に迫ってみましょう。 実例 例えばこんな例題があります。 1から100までの数をプリントするプログラムを書け。ただし3の倍数のときは数の代わりに「Fizz」と、5の倍数のときは「Buzz」とプリントし、3と5両方の倍数の場合には「FizzBuzz」とプリントすること。 どうしてプログラマに・・・プログラムが書けないのか? (原題: Why

  • 1