Ruby

Hash

Ruby の Hash で 文字列をキーとして与えると、文字列をコピーし、コピーを更新不可に設定(freeze)してキーとして使用します。 プログラミング言語 Ruby リファレンスマニュアル という仕様にひたすらハマる。むー。

文字列中のバックスラッシュ

OCaml では print_endline "\(^_^)/" を実行すると「illegal backslash escape in string」という警告が出るがエラーにはならず、「\(^_^)/」と表示される。 一方 Ruby の puts "\(^_^)/" は警告は出ずに「(^_^)/」と表示される。しかし、 puts '\(^_^)/' は…

舞波本

舞波本を買った。パラパラ見てみるとクゥ〜ンな AA が出てきてビビる。

ActiveSupport

今更ながら RoR を触ってみることに。ActiveSupport が変態的なメソッドを提供してくれるので楽しい。pluralize て。 irb(main):001:0> "person".pluralize => "people" irb(main):002:0> "sheep".pluralize => "sheep" irb(main):003:0> "mouse".pluralize …

%記法

Rubyの%記法は便利だ。正規表現に/を含めたいときとかはこれが無いとやってられない。 これは %r<\d{4}/\d{2}>というふうに使うわけだけど、%rの次の記号(上の例では<>)は何が使えるのだろうか。 マニュアルには 改行を含めた任意の非英数字を使うことができ…

続き

昨日のは「まだマッチしていない」時と「マッチしなかった」時を区別できていなかった。 修正。

Packrat Parsing

Packrat Parsingの論文の最初だけ読んだ。例がHaskellで書いてあっていまいちよく分からない…。遅延評価に慣れてないしなあ。 それでもArithPackrat.hsをなんとか解読してRubyで書き直してみた。 一応ちゃんと動いてるみたいだが、これがPackrat Parsingにな…

mapPartial

RubyにSMLのList.mapPartialに相当するものって無いのかな? module Enumerable def map_partial(&block) block ||= lambda{|x| x} res = [] each{| v | elm = block.call(v) res.push(elm) if elm } res end end [1,2,nil,3,6,nil,8].map_partial{| i | i &&…