rubyco(るびこ)の日記 2006年4月
このコンテンツに含まれるページ一覧
Perlのスクリプトを実行
Rubyのソースを読んでいて、オプション-lを付けるとPerlのスクリプトを実行する、という機能がインタプリタに含まれていることに気づきました。
さっそ...
rubyo (るびお) の日記登場! 最初、エイプリルフールかと思ってしまいました < 失礼ですね。
initializeの引数をインスタンス変数に引き渡す
initialize に渡された値を自動的にインスタンス変数にするを読んで。
ちょっと主旨が違うような気もしますが、書いてみました(1)。
...
ある級数の収束
$\sum_{k=1}^{\infty}\frac{k}{2^k} = 2$を実験的に調べてみます。
sum = Rational(0, 1)
n = 1
p = 2
while n < 50
sum += Rational(n, p)
p sum.to_f
n += 1
p *= 2
end
実行結果です。
0.5
1.0
1.375
1.625
1.78...
定数とクラス変数
クラス変数へは、外部から直接代入できません(コンパイル時(?)のエラー)。
定数には、外部から代入ができます。再代入すると警告がでます。
class Rubyco
Message =...
調和数
数学物語テトラちゃんとハーモニック・ナンバーに出てきた、調和数のグラフ用のデータを作ります。
まずは、Floatを使って、ナイーブに。
def harmonic(n)
s = 0.0
(1..n).each do |...
abort
abort(message)でmessageを標準エラー出力に出して終了します。終了ステータスはEXIT_FAILUREになります。
Permalink | コメント(0)
if修飾子が付いた式の値
「式A if 式B」のとき、式Bが...
自己言及
とても眠いので自己言及プログラムを書きました。ついでにトラックバックもしておきましょう。
q=%q(print"q=%q(#{q});#{q}");print"q=%q(#{q});#{q}"
Permalink | コメント(7)
何となく...
HTMLファイルを集めてindex.htmlを作る
カレントディレクトリにあるHTMLファイルを集めてindex.htmlを作るスクリプトです。
HTMLであれこれ実験した後、ちらばったHTMLをとりまとめるた...
RubyスクリプトをLaTeXで整形(?)
RubyのスクリプトをLaTeXで美しく整形するツールがほしい、と思った。
いきなり書きかけて、ふと「絶対すでに誰かが作っているはず」と思い直した...
LaTeXでグラフ描画
数学ガール最新作、テトラちゃんとハーモニック・ナンバーに出てきた、反比例・調和数・対数関数のグラフを描くLaTeXのソースを生成するRubyスクリプトを作り...
instance_eval
Object#instance_evalは、レシーバのコンテキストでevalを行います。インスタンス変数にもアクセスできるので注意が必要です。
以下のプログラムは、Object#instance_variablesと...
gcdlcm
Integer#gcdlcmで最大公約数と最小公倍数をいちどに得られます。
p 36.gcdlcm(24) #=> [12, 72]
Permalink | コメント(0)
eval
入力をevalすると…ええと…evalされます。
while true
print "> "
line = gets.chomp!
break if line == "quit"
puts eval(line)
end
実行結果です。
> 1
1
> "Hello"
Hello
> 1 + 2
3
> "Hello" + "!"
Hello!
> Math::PI
3.141...
三角関数 / メソッド一覧
三角関数はMathモジュールで関数として定義されています。
p Math::PI #=> 3.14159265358979
x = rand
p Math.cos(x) ** 2 + Math.sin(x) ** 2 #=> 1.0
では...
フィボナッチ数列
id:pyletさんのフィボナッチ数列(fib2)をRubyにて。
Pythonのrange(n)の意味は(0...n)でよいのかしらん。
def fib(n)
a, b = 1, 1
for i in (0...n)
a, b = b, a + b
end
a
end
for i in (0...20)
pri...
lambdaとproc
lambdaとprocはいずれもProc.newの同義語です。
p lambda {} #=> #<Proc:0x00000000@a.rb:1>
p proc {} #=> #<Proc:0x00000000@a.rb:2>
p Proc.new {} #=> #<Proc:0x00000000@a.rb:3>
追記:あ、ささださん...
フィボナッチ数列、もっと
おとといのフィボナッチ数列の続きです。id:sumimさんが、call/cc を使ったコルーチンもどきでフィボナッチ数列という楽しいプログラムを書いていらし...
between?
Comparable#between?(min, max)はselfがmin以上max以下のときにtrueのようです。つまりinclusive.
p 0.between?(1, 3) #=> false
p 1.between?(1, 3) #=> true
p 2.between?(1, 3) #=> true
p 3.between?(1, 3) #=> true
p 4...
仮想的な無限列(2)
昨日の続きで、仮想的な無限列を作っております。とりあえず、こんなのできましたというご紹介を。
Sequenceクラスは、初期値が与えられれば無限列を作るひ...
仮想的な無限列(8)
有限列も使えるようにしました。OfGivenを使います。
Call = lambda {|f, *a|
lambda { f[f, *a] }
}
Walk = lambda {|n, xs, eachf, lastf|
Call[
lambda {|fs, xs, n, eachf, lastf|
if n > 0
y, ys = xs[]
...
仮想的な無限列(9)
今回の主な修正点は…
nilを_で表示
Ten = Sequence[OfConstant, 10]
PowerOf = lambda {|s| Zip[Power, s, Natural]}
PowerOfTen = PowerOf[Ten]
Show[PowerOfTen]
class NilClass
def to_s
"_"
end
end
Call = lamb...
仮想的な無限列(12)
今回の主な修正点は…
AccumulateWithの引数をfold風にした。
念願のMapを作成。
無意味な同一引数渡しを省略(op, eachfなど)。
Mapを使ってFibonacciの各項が偶数か奇数...
accumulate
世の中ではaccumulateが流行っているらしいので(ひげぽんさんとtociyukiさん)、最近のラムダ遊びで私もaccumulateしてみます。
Add = lambda{|x, y| x + y}
Call = lambda {|f, *a| f[f, *a]}
Sequen...
srand
srandは疑似乱数の種を与えます。同じ種からは同じ乱数列が生成されます。これは再現性のテストで重要。
5.times do
srand 12345
10.times do
print rand(10), " "
end
puts
end
実行結果です。
...
プログラミング言語の勉強を継続する三つのポイント
「ほほえみつつ、Ruby。」をキャッチフレーズにしてRubyの勉強を続けています。早いもので、今日で96日目(二進法では1100000...
upto, downto
Integer#upto, Integer#downtoは引数で指定した限界までイテレートします。uptoは増やしていく、downtoは減らしていく。限界も含みます。
0.upto(10) do |k|
print "#{k}, "
end
puts
10.downto(0...
Date::MONTHNAMES
月の名前、日の名前。
require 'date'
p Date::MONTHNAMES
p Date::DAYNAMES
p Date::ABBR_MONTHNAMES
p Date::ABBR_DAYNAMES
実行結果です。
[nil, "January", "February", "March", "April", "May", "June", "July", "Au...
パスカルの三角形
何となくパスカルの三角形を描きたくなったので。
def combination(n, k)
if k == 1 or k == n
return 1
else
return combination(n - 1, k) + combination(n - 1, k - 1)
end
end
def line(n)
a = Array.ne...
これで一区切りとします
「るびこの日記」は今日で100日になりました。毎日更新を心がけて来ましたが、今後はペースを大きくダウンいたします。
こういうやり方で勉強するの...