トップ «前の日記(2010-06-09) 最新 次の日記(2010-06-11)» 編集

日々の破片

Subscribe with livedoor Reader
著作一覧

2010-06-10

_ 7月5日の予定

マイクロソフトの荒井さんにお誘い頂いて、Tech Fielders セミナー 東京 [邪道編〜Ruby × Windows で出来ること]でセッションを持つことになりました。

なんといっても注目したいのは、荒井さんのIronRubyセッションですね。

一方、僕のセッションは、札幌Ruby会議01で行ったASR(Ruby on Windows)セッションをリバイズして、DLやWin32OLE、SWin、DXRubyなどのデモを交えたものにしようと考えています。

というわけで、.NET上のRubyとWin32上のRubyがOSTに並ぶ日ということになります。

OSTの近くには紀伊國屋書店の1階もあれば、クリスピークリームドーナツ(さすがに今は普通に買える)とかもあるので、お誘いあわせのうえ、来ていただければいいなぁと思います。

参照:荒井さんのBlogでの告知

というか、実は邪道編10周年記念なんだなぁと月日の流れにはうんざりしますね。

Rubyを256倍使うための本 邪道編(arton)

_ プログラムプロムナードの2回目

乗りかかった船なので、今度は複数の文字を含む区間の検索をHaskellでやってみようとしたが、1時間くらいいじっていても作れない。

もしかして考え方が間違っているのかと、ためしにRubyで作ってみたら10分かからずにできた(どうやるかはHaskellで書こうとした時に考え済みだったので、実装時間ということかな。でもほとんどはEnumerator#find_allの名前が思い出せなくてirbをいじくっていた時間だったりする)。(下のリストは推敲後なので実際には40分くらいになったけど、出力内容の重要な点は最初のバージョンからそんなに変わってはいない)

class String
  def exclude?(x)
    !include?(x)
  end
  def each_char_with_index
    i = 0
    each_char do |x|
      yield x, i
      i += 1
    end
  end
end
 
def add(c, i, b, key)
  b.map do |e, k|
    if e.size == 1 && k.exclude?(c)
      k << c
      if k.size == key.size
        e << i
      end
    end
    [e, k]
  end
end
 
text = 'program-promenade'
key = 'pma'
 
bag = []
text.each_char_with_index do |x, i|
  if key.include? x
    bag << [[i], '']
    add(x, i, bag, key)
  end
end
 
bag = bag.find_all do |e, k|
  k.size == key.size
end
 
p bag

どうも解答例を見るとおれのやり方と違ってえらく空間の使い方が良いが、でも同じ長さだった場合の列挙のための保存とか無視しているから、結局は同じようになりそうな気もする。

で、Rubyで書いたらあまりに簡単に書けたので、逆になんでこうもHaskellで書くのが大変なのかなぁと考えると、結局、あまりにもライブラリ関数を知らないのが問題のような気がしてきた。少なくともpreludeで読まれる関数くらいは覚えておくべきなんだろうな。

ただ、手続き型言語だと用意されている関数(オブジェクト)を知らなくても自分で手続きを書いていけばどうにでもなるのだが、関数型だと手続き(つまり手順)が書けないので、知らないと手も足も出なくなるように感じる(というか手も足も出ない)。そこが手続き型と関数型の一番の違いではないだろうか。

本日のツッコミ(全1件) [ツッコミを入れる]
_ arai (2010-06-10 12:33)

10周年というのは気がついておりました。というのは、今回のことを思案していて、書籍を読み直していたからなんです。


2003|06|07|08|09|10|11|12|
2004|01|02|03|04|05|06|07|08|09|10|11|12|
2005|01|02|03|04|05|06|07|08|09|10|11|12|
2006|01|02|03|04|05|06|07|08|09|10|11|12|
2007|01|02|03|04|05|06|07|08|09|10|11|12|
2008|01|02|03|04|05|06|07|08|09|10|11|12|
2009|01|02|03|04|05|06|07|08|09|10|11|12|
2010|01|02|03|04|05|06|07|08|09|10|11|12|
2011|01|02|03|04|05|06|07|08|09|10|11|12|
2012|01|02|03|04|05|06|07|08|09|10|11|12|
2013|01|02|03|04|05|06|07|08|09|10|11|12|
2014|01|02|03|04|05|06|07|08|09|10|11|12|
2015|01|02|03|04|05|06|07|08|09|10|11|12|
2016|01|02|03|04|05|06|07|08|09|10|11|12|
2017|01|02|03|04|05|06|07|08|09|10|11|12|
2018|01|02|03|04|05|06|07|08|09|10|11|12|
2019|01|02|03|04|

ジェズイットを見習え