タグ

functionalに関するtokadaのブックマーク (9)

  • ラムダ計算とチューリングマシンの違い 2009-04-13 - きしだのはてな

    ぼくもYコンビネータがわかるようになるまではそうだったのだけど、Yコンビネータを使うとどのような処理ができるのかがよくわからなくて悩んでいる人が多いように思う。他の人のブログを見ても、名前をつけずに再帰ができるのがすばらしいとか書いてあったりするのだけど、それによってどういう処理ができるのかわからずにいた。 結論をいえばYコンビネータには、なにかの処理を便利にする能力はない。関数であらゆる計算ができるということが示せれば、あとは用なしだ。理論の礎としてうまってしまえばいい。 結局、Yコンビネータによってどのような処理ができるかというのは、ラムダ計算の要素のメリットをチューリングマシンの中に見出そうとしてるといえる。 ラムダ計算とチューリングマシンは、どちらも計算モデルという点では一致しているけど、全く違う。 無限であるか有限かの違いといってもいい。 チューリングマシンでは、データの量と処理

    ラムダ計算とチューリングマシンの違い 2009-04-13 - きしだのはてな
  • リストモナドの動作原理を考える - あどけない話

    Haskell のリスト内包表記はとっても便利です。あまり意味がないのですが、よく出される例は、こんな感じです。 [(x,y)|x<-[1,2],y<-[3,4,5]] → [(1,3),(1,4),(1,5),(2,3),(2,4),(2,5)] このように、このリスト内包表記は、あたかも二重のループであるかのように動きます。 リスト内包表記は、実は糖衣構文であり、do に直すと以下のようになります。 do x<-[1,2] y<-[3,4,5] return (x,y) → [(1,3),(1,4),(1,5),(2,3),(2,4),(2,5)] 僕は、この意味をずっと理解できませんでした。 "<-" は、モナドという箱の中から、中身を取り出します。たとえば、Just "str" から中身を取り出すと "str" となるように、Maybe モナドを理解するのは簡単です。 でも、リスト

    リストモナドの動作原理を考える - あどけない話
  • 関数の話をしよう(1/2)- @IT

    第2回 関数の話をしよう 山下 伸夫 株式会社タイムインターメディア 2008/11/28 関数型言語に分類されるHaskell。C言語などの手続き型言語とまったく異なるプログラミングの世界に踏み出してみよう(編集部) Haskellは関数プログラミングのための言語だというのだから、関数が出てこなくては話にならない。今回は、関数の話をしよう。 関数抽象と関数適用 前回、話した標準体重値を計算するパターンは、 (〈身長値〉 ^ 2 )*〈標準BMI〉 である。〈標準BMI〉は固定された値(22.0)だから、標準体重値は〈身長値〉が変わればそれに応じて変化する。標準体重値の計算は、 (〈?〉 ^ 2 )*〈標準BMI〉 の〈?〉の部分を具体的な身長の値で「置き換え」てやればいいということになる。〈?〉を一種の穴のようなものだと考えれば、そこへ値をはめ込めばよいわけである。 この計算パターンを、

  • 珠玉のリスト・プログラミング - あどけない話

    僕は Haskell を知るまで、再帰に関しては、もう学ぶべきことはないと思っていました。しかし、繰り返しさえ再帰で実現しなければならない純粋関数型言語に触れてはじめて、再帰の深淵を見た気分になりました。 以下、Programming in Haskell から 3 つ問題を出します。あなたには、実装できるでしょうか? 問題 以下の関数を実装しなさい。 与えられたリストのすべての部分リストを生成する関数 subs 第一引数を第二引数のリストへ挿入したすべてのリストを生成する関数 interleave 与えられたリストの順列を生成する関数 perms 言葉だけではよく分らないと思いますので、実行例を示します。 subs [1,2,3] → [[],[3],[2],[2,3],[1],[1,3],[1,2],[1,2,3]] interleave 1 [2,3,4] → [[1,2,3,4],

    珠玉のリスト・プログラミング - あどけない話
  • inforno :: Python: パターンマッチしてみる

    なんか、趣味では最近はC言語ばっかりだったりするわけですが。 さて、関数型言語系をカジった人なら誰しも取り付かれる、モノ、それがパターンマッチ。パターンマッチが使えると、とにかく直感的にコードをかけますよね。 つーわけで、Pythonでパターンマッチを実装してみました。機能的には リスト,タプルに対するパターンマッチ パターン変数への束縛 ガード条件 任意のオブジェクトに対するパターンマッチ 部分パターンの束縛(Ocamlのas) あたりを実装してみました。これだけあれば、かなり便利にコードをかけます。できるだけ、手軽に書けるように工夫してみました。こんな感じです。 変数束縛とガード。 getattr でごにょごにょしてるので簡単にかけます。 1m = Match([1,2,3]) 2if m.when([1,2,m.var]) and m.var > 2: 3 print m.var 4

  • そろそろ分かっておきたいY Combinator - I am Cruby!

    Rubyもうすぐ年明けだし,Yコンビネータの魔法みたいな動きに惑わされる人たちがでてくるんじゃないかなと思ってRubyで解説してみます. 参考に[ruby-list:35058] Y CombinatorY CombinatorY Combinator Y Combinatorって何?3年周期くらいでお騒がせのYさんってそもそも何なのかという話ですが,動機として 再帰の時に自分の名前を使わずに,なんとかして関数そのものを呼びたい というのがあって,例えば階乗とかしたいときに def fact(n); n == 0 ? 1 : n * fact(n-1); end # ここを消したい! と言う事です.何が嬉しいのかというと,さっぱり分かりませんし,arguments.calleeとか普通に名前使える所では使えばいいんじゃないのかな. 前置きRuby1.9のlambdaでは ->{|n| pu

  • Confreaks: RubyConf 2008

    RubyConf 2008 Get the Flash Player to see this player. width = 640 height = 260 var s1 = new SWFObject('player.swf', 'mpl', width, height, '9') s1.addParam('allowfullscreen', 'true') s1.addParam('allowscriptaccess', 'always') s1.addParam('allownetworking', 'all') s1.addVariable('file', "videos/better-ruby-through-functional-programming-2-small.mp4") s1.addVariable('image', "images/better-

  • 帰納の新しいツンデレ2 - うつし世はゆめ / 夜のゆめもゆめ

  • 本物のプログラマはHaskellを使う:ITpro

    筆者 shelarcy Haskellは,関数型プログラミングというジャンルに属する言語です。Haskellや関数型プログラミングを題材に物事を見ていくことで,今まで思いもよらなかったような未知の世界を知ることができるでしょう。 プログラミング言語を学ぶという行為には, 言語の基的な文法や考え方を理解する 言語の文化圏で広く使われている考え方に親しんでその言語らしい書き方を習得する 単に言語を使ってできること以上の知恵を学ぶ の3段階があります。この連載では,三つ目の段階を目標に,Haskellプログラミングの世界を一つひとつ丁寧に紹介していきます。 更新は毎月第1水曜日(1月のみ第2水曜日)

    本物のプログラマはHaskellを使う:ITpro
  • 1