タグ

rubyとFunctionalに関するyuguiのブックマーク (8)

  • あなたならどう書く - 可変個のネストしたブロックつきメソッドの呼び出し - ruby trunk changes

    Ruby では Dir.chdir とか Kernel#open, Mutex#synchronize のように、ブロックを渡してそのブロックの呼び出しの前後に準備/後片付けの処理で挟むためのメソッドというのがありますね。ブロックから抜けると自動的に後始末をしてくれるので便利です。 ブロックの中でそのようなメソッドをネストさせることもできます。 @mutex.synchronize do open(file) do ... end end そこで複数のオブジェクトについてそのようなブロックつきメソッドをネストさせて呼びだしたい、しかもオブジェクトの数は可変個(たとえば配列に入ってくる)にしたいという時にどう書くのか考えてみました。思ったよりも難しかったです。 class A def initialize(n) @n = n end def guard(&blk) begin p [:bef

    あなたならどう書く - 可変個のネストしたブロックつきメソッドの呼び出し - ruby trunk changes
  • http://yowaken.dip.jp/tdiary/20060615.html

  • Scheme:たらいまわしべんち

    たらいまわし関数Haskell (hugs December 2001版)Ruby (1.8.0-preview2)Gauche (0.6.8)クロージャ版delay/force版クロージャでは何故計算量が減らないか議論 たらいまわし関数 tarai(x, y, z) := y if x <= y tarai(tarai(x-1, y, z), tarai(y-1, z, x), tarai(z-1, x, y)) otherwise eagerに評価すると、不要な枝の先の先まで計算してしまって大いなる無駄となる。 lazy evaluationの利点が光る一品である。 参考: 竹内郁雄 どう転んでもLisp WikipediaJa:竹内関数(WikipediaEn:Tak (function)) たらいまわし関数 たらいまわしべんち Haskell vs Ruby たらいまわしべんち最終

    Scheme:たらいまわしべんち
  • Re: String#succ - babie, you're my home

    元々は Excel でセルの座標指定の為に列名を作ろうと思ったけど、途中で「あ、要らんわ」(数値で指定できた)と気づき、放っておいたのを作ってくれた方がいましたよ。勉強になります。 再帰を使って:「指定した回数分String#succ - I sort my thought...」 Ruby の再帰ってスタックオーバーフロー起こさないようにする方法は無いのかな? continuation ワカラナス。scheme やってるからそのうちぶつかるだろう。 汎用的に:「任意のメソッドを指定した回数分繰り返すメソッド - I sort my thought...」 count = count.to_i ってのは防御的プログラミングというやつか? 引数の並びは逆の方がいいよなぁ("a".repeat(3, :succ) じゃなくて "a".repeat(:succ, 3))と思ったけど、繰り返すメソ

    Re: String#succ - babie, you're my home
  • フィルタ (2) - babie, you're my home

    長い道のりだった……、id:babie:20050921:p7 の続き。って9月かよ! PHP の Smarty や Perl の TT のように 「|」 でフィルタチェインができたらええなー、と考えてたやつ。 カリー化を使ったお! 使えるお! もっと簡単な実現方法があっても気にしない。カリー化使えて満足。 #!/usr/bin/ruby # this method was written by HORIKAWA Hisashi. # See: http://www.nslabs.jp/ramble-200601.rhtml#28 def currying(name, *args) if name.kind_of?(Proc) or name.kind_of?(Method) m = name else m = method(name) end arity = m.arity >= 0 ?

    フィルタ (2) - babie, you're my home
  • Rubyで関数プログラミング Part 1 【関数プログラミングの特徴 】

    関数プログラミングの特徴とは何かという問題は、現在でもまだ定まっているとは言い難いような感じですので、ズバリ述べることはできませんが、それでも、命令型言語と比較した場合の関数型言語の特徴を挙げれば、それに対する大体の回答にはなると思います。 というか、正直に言って、それに関しては、Programming Language Conceptsの頁で説明していますので、そちらを参考にしてもらえれば良いということになってしまいます(例えば、その頁のimperative paradigmやfunctional paradigm等)。 しかし、それにもかかわらずこの頁を設けた理由は、Rubyは関数プログラミング言語ではないので、主要なものを全て説明できるわけではなく、それならば、その特徴の中でも、Rubyでもなんとか実現できそうなものを示そうと思ったからです。 そうしてみると、以下のものを列挙で

  • 仮想的な無限列(3) - rubyco(るびこ)の日記

    昨日の続きで、無限列を考えています。zipの意味を変えて少し整理しました。 class Sequence < Proc def self.create(*a, &block) self.new(&block).define(*a) end def define(*a) lambda { return a[0], self.call(self, *a) } end end class Proc def to_s(n=10) return "..." if n == 0 x, xs = self.call() x.to_s + ", " + xs.to_s(n - 1) end def drop(n) return self if n == 0 _, s = self.call() s.drop(n - 1) end def zip(s, t) x, xs = s.call() y, ys =

    仮想的な無限列(3) - rubyco(るびこ)の日記
  • OBB vs AABB - Radium Software Development

    iPhoneの一般修理店は予約なしでも来店できる? 基的には飛び込みで修理に行ってもOK iPhoneを置いていたソファにうっかりと腰かけてしまい、パネルを割ってしまった、こんな時はスマホの一般修理店へ行きましょう。画面割れは、スマホやタブレットの故障原因として非常に多いものです。予約なしで突然お店に行っても平気かしらと、不安に思う方々もいらっしゃるかもしれません。結論としては特に問題はなく、予約なしで訪問しても画面割れの修理はお願いできます。 ただし他のサービス業のお店同様、予約なしの場合、お店が混雑していると順番待ちをしなければいけないです。特に繁盛しているスマホ修理のお店だと、行列が店内で出来ており、予約なしだと、自分の順番が巡ってくるまで長時間待たされる可能性があります。平日の朝、昼なら利用客が少ない場合が多く、飛び込みでも比較スムーズに修理が頼めます。 予約は入れた方が時短に、

  • 1