[#46340] ASR 1.8.7 同梱の exerb で生成したプログラムが enumerator を見つけられない — "(株)ネットフォレスト 植田裕之" <ueda@...>
植田と申します。
10 messages
2009/09/01
[#46344] Re: ASR 1.8.7 同梱の exerb で生成したプログラムが enumerator を見つけられない
— arton <artonx@...>
2009/09/01
artonです。
[#46345] Re: ASR 1.8.7 同梱の exerb で生成したプログラムが enumerator を見つけられない
— "NARUSE, Yui" <naruse@...>
2009/09/01
成瀬です。
[#46346] Re: ASR 1.8.7 同梱の exerb で生成したプログラムが enumerator を見つけられない
— "(株)ネットフォレスト 植田裕之" <ueda@...>
2009/09/02
植田です。こんにちは。
[#46347] requireが失敗することについて — 北村寛 <kitayuta@...>
北村と申します。最近Rubyを始めた初心者です。
6 messages
2009/09/02
[#46378] 最も低コストの方法は? — 大田黒俊夫 <toshio.otaguro@...>
質問です.
8 messages
2009/09/11
[#46380] Re: 最も低コストの方法は?
— rubikitch@...
2009/09/11
From: 大田黒俊夫 <toshio.otaguro@gmail.com>
[#46386] Rubyの演習問題 — "Tetsuya Kamisawa" <kami@...2000.net>
はじめて投稿させていただきます、神沢と申します。
6 messages
2009/09/12
[#46403] moodle と連携した eラーニング教材開発について — "Hideo Konami" <konami@...>
京都女子大の小波です。
3 messages
2009/09/21
[#46408] html→csv変換|tableのセル結合に対応したものは? — YOSHIIZUMI <t-yoshiizumi@...>
吉泉といいます。
7 messages
2009/09/23
[#46410] 再送;;ruby1.8.7と1.9.2の文字処理について — eiichi_maekawa@...
6 messages
2009/09/24
[#46426] DateTime#to_time — "T.Soejima" <clev@...2.so-net.ne.jp>
相変わらず ruby 勉強中のそえじまです。
11 messages
2009/09/30
[#46427] Re: DateTime#to_time
— "NARUSE, Yui" <naruse@...>
2009/09/30
成瀬です。
[#46429] Re: DateTime#to_time
— "T.Soejima" <clev@...2.so-net.ne.jp>
2009/09/30
成瀬さん、ありがとうございます。
[ruby-list:46396] 高階関数的なメソッドの使い方について
From:
ツムジ <the.little.schemer@...>
Date:
2009-09-16 14:10:19 UTC
List:
ruby-list #46396
最近、Project Euler の問題を Ruby を使って解いているのですが、その時に
ちょっと疑問に思ったことがあったので、メールしてみました。
実際の Project Euler の問題は少し込み入っているので、内容を単純化した
もので例を示してみます。
例えば次のようなコードがあるとします。
class Integer
def triangle # 三角数
return (self + 1) * self / 2
end
def square # 四角数
return self * self
end
def pentagon # 五角数
return (3 * self * self - self) / 2
end
end
ここで、a[0]、a[1]、a[2] にそれぞれ 100 以下の三角数、四角数、五角数を
集めていくとします。
同じような処理を繰り返したくないので、 Integer#triangle、
Integer#square、Integer#pentagon をブロックで包んでオブジェクト化して使
うことを考えました。
func = [lambda{|x| x.triangle},
lambda{|x| x.square},
lambda{|x| x.pentagon}]
a = Array.new
3.times do |i|
a[i] = Array.new
1.upto(1/0.0) do |j|
n = func[i].call(j)
break if n > 100
a[i].push(n)
end
end
このコードでしっかり目的は達成できるのですが、ちょっと気になることがあ
ります。
もともと func[0], func[1], func[2] はブロックをオブジェクト化したもので
した。それをまたブロックで包んで使用するのは、ちょっとすっきりしない気
がします。でも、"lambda" を使うにはブロックの形でメソッドを渡す必要があ
るので、今回はこの形にしました。
今回私がとった方法以外に、高階関数のようにメソッドをうまく使う方法はな
いのでしょうか?
追記:
ちなみに、実際に Project Euler を解いたときのコードは
<http://tsumuji.cocolog-nifty.com/tsumuji/2009/09/project-euler-1.html>
に書いてあります。