[#44818] [ANN] rcairo 1.6.0 — Kouhei Sutou <kou@...>
須藤です。
5 messages
2008/04/11
[#44827] 計算するハッシュ — "5.5" <5.5@...>
5.5 です。こんなこと考えました。
6 messages
2008/04/14
[#44828] freeTDS経由のアクセスでの文字化け — suna <suna4903@...>
皆さんはじめまして。
7 messages
2008/04/14
[#44848] [Q] Ruby のパーサについて — "Makoto Kuwata" <kwa@...>
桑田といいます。
6 messages
2008/04/20
[#44858] Method#arity — "ARAI Shunichi" <arai@...>
Rubyist 九州のあらいです。
9 messages
2008/04/25
[#44861] Ruby 1.9のARGVのエンコーディング — rubikitch@...
るびきちです。
17 messages
2008/04/26
[#44862] Re: Ruby 1.9のARGVのエンコーディング
— Yukihiro Matsumoto <matz@...>
2008/04/26
まつもと ゆきひろです
[#44863] Re: Ruby 1.9のARGVのエンコーディング
— "NARUSE, Yui" <naruse@...>
2008/04/26
成瀬です、パッチ用意してから投げようと思ったら出遅れた、
[#44864] Re: Ruby 1.9のARGVのエンコーディング
— Yukihiro Matsumoto <matz@...>
2008/04/26
まつもと ゆきひろです
[#44865] Re: Ruby 1.9のARGVのエンコーディング
— "U.Nakamura" <usa@...>
2008/04/28
こんにちは、なかむら(う)です。
[#44866] Re: Ruby 1.9のARGVのエンコーディング
— "NARUSE, Yui" <naruse@...>
2008/04/28
成瀬です。
[#44868] Re: Ruby 1.9のARGVのエンコーディング
— "U.Nakamura" <usa@...>
2008/04/30
こんにちは、なかむら(う)です。
[#44870] Re: Ruby 1.9のARGVのエンコーディング
— "NARUSE, Yui" <naruse@...>
2008/04/30
成瀬です。
[#44871] Re: Ruby 1.9のARGVのエンコーディング
— "U.Nakamura" <usa@...>
2008/04/30
こんにちは、なかむら(う)です。
[#44875] Re: Ruby 1.9のARGVのエンコーディング
— "NARUSE, Yui" <naruse@...>
2008/04/30
成瀬です。
[#44877] Dir.entriesのエンコーディング (was Re: Ruby 1.9のARGVのエンコーディング)
— "U.Nakamura" <usa@...>
2008/05/01
こんにちは、なかむら(う)です。
[#44872] NKFでの文字変換について — ishida@...
石田です。
8 messages
2008/04/30
[ruby-list:44827] 計算するハッシュ
From:
"5.5" <5.5@...>
Date:
2008-04-14 14:27:45 UTC
List:
ruby-list #44827
5.5 です。こんなこと考えました。
Ruby の Hash#new でブロックを与えるのは,
Hash.new{|hash, key| hash[key]=[]}
のように,「デフォルト値を設定したいけど,同一オブジェクトでは困る」
という場合が多いと思います。
しかし,ブロックをもっと積極的に使えば,たとえば以下のように i 番目
の素数を返すハッシュを定義することができます。
PRIME_NUMBERS=Hash.new do |hash, index|
if index<3
hash.update({1=>2, 2=>3})
hash[index]
else
i_max=hash.size
if i_max+1==index
n=hash[i_max]+2
loop do
is_prime=(2..i_max).each do |i|
p_i=hash[i]
break false if n%p_i==0
break true if n<p_i**2
end
break(hash[index]=n) if is_prime
n+=2
end
else
(i_max+1...index).each{|i| hash[i]}
hash[index]
end
end
end
puts PRIME_NUMBERS[93774] # => 12121
このようなハッシュは,“連想記憶”というより“キャッシュ付き関数”
とでも呼びたい感じですね。
(“フィルムカメラ”と“レンズ付きフィルム”みたいな関係?)
ハッシュ生成時に与えるブロックは,もはやデフォルト値を与えるとい
う職務を超え,〈知らないキー〉に対する値を泥縄で計算させるものと
見ることもできそうです。(訊かれて慌てて考える,みたいな)
「で,それが何か?」とツッコまれると困るのですが,Ruby のブロック
の威力を示す例になってるかな,と素人なりに思いまして。
ちなみに,上記の PRIME_NUMBERS は,Ruby 1.8 の Prime よりも格段に
速く,ある程度大きな素数になってくると,Ruby 1.9 の Prime よりもさ
らに速いです。
--
5.5@moji.gr.jp