2006-04-01から1ヶ月間の記事一覧

三角関数 / メソッド一覧

三角関数はMathモジュールで関数として定義されています。 p Math::PI #=> 3.14159265358979 x = rand p Math.cos(x) ** 2 + Math.sin(x) ** 2 #=> 1.0では一覧を出してみましょう。 require 'pp' pp Math.singleton_methods.sort実行結果です。 ["acos", "a…

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.14159265358979 > Math.sin(Math::P…

gcdlcm

Integer#gcdlcmで最大公約数と最小公倍数をいちどに得られます。 p 36.gcdlcm(24) #=> [12, 72]

all_symbols

Symbol.all_symbolsでRubyのシンボルテーブルにあるシンボルの配列を得ることができます。 p Symbol.all_symbols疑問:Symbol.all_symbols.sortすると、以下のようなエラーになるのはなぜでしょう? p Symbol.all_symbols.sort #=> in `sort': undefined met…

instance_eval

Object#instance_evalは、レシーバのコンテキストでevalを行います。インスタンス変数にもアクセスできるので注意が必要です。 以下のプログラムは、Object#instance_variablesと合わせて「全インスタンス変数にnilを代入する」という処理をしています。 cla…

prototype.js

prototype.jsを読んでいると、まるでRubyのプログラムを読んでいるような気分になります。

abbrev

abbrevを使うと、与えた文字列の配列を元にして、各文字列を特定するための省略形が得られます。 詳細は、ri Array#abbrevとri Abbrev#abbrevを参照してください。ri Array#abbrevの例にはrequire 'abbrev'が書いてなかったので最初悩みました。 はてなで言…

パーセント

もう桜も終わりですね。"%"を桜の花に見立ててみました。 p eval(%(eval(%(eval(%(eval(%(eval(%(%(%))))))))))) #=> "%"

inject

Enumerable#injectの練習をします。 p (1..10).inject(0) { |result, k| result + k } #=> 55最初、以下のように書いてはてな?となりました。 p (1..10).inject(0) do |result, k| result + k end #=> in `inject': no block given (LocalJumpError){ ... }…

LaTeXでグラフ描画

数学ガール最新作、テトラちゃんとハーモニック・ナンバーに出てきた、反比例・調和数・対数関数のグラフを描くLaTeXのソースを生成するRubyスクリプトを作ります。 まずは、p.21, p.22に出てきた反比例と調和数のグラフ(make_invx_graph.rb)。 #!/usr/local…

RubyスクリプトをLaTeXで整形(?)

RubyのスクリプトをLaTeXで美しく整形するツールがほしい、と思った。 いきなり書きかけて、ふと「絶対すでに誰かが作っているはず」と思い直した。 Ruby LaTeXで検索した。 hyuki.comの日記がトップに来てこけた。 1997年のまつもとさんのメールでrd2texと…

partition

Enumerable#partitionは、与えられたブロックが真を返す要素と偽を返す要素の2つのグループに分け、配列にして返します。 p (1..10).partition { |n| n % 2 == 1 } p <<"EOD".partition { |s| /^R/ =~ s } I'm Rubyco. Ruby is cool. Is Ruby cool? EOD実行…

HTMLファイルを集めてindex.htmlを作る

カレントディレクトリにあるHTMLファイルを集めてindex.htmlを作るスクリプトです。 HTMLであれこれ実験した後、ちらばったHTMLをとりまとめるために作りました。 出力するindex.htmlは手抜き index.htmlは毎回上書き ファイル操作といえばPathnameを使う…と…

コマンドライン引数を数として扱う

Danさんのたらいを回すならHaskellをおもしろく読みました。 その中に「コマンドラインに3個の引数があったらそれを数として得る。なかったら10, 5, 0とする」が一行で書いてあったので楽しかった。 x, y, z = ARGV.size == 3 ? ARGV.map{|s| s.to_i } : [10…

何となく#

眠いので何となく#を書きました。 p "#{"#{"#{"#"#"#" }"}"}"#=>"#"

自己言及

とても眠いので自己言及プログラムを書きました。ついでにトラックバックもしておきましょう。 q=%q(print"q=%q(#{q});#{q}");print"q=%q(#{q});#{q}"

if修飾子が付いた式の値

「式A if 式B」のとき、式Bが偽ならばこの式全体の値はnilになります。式Bが真ならば式Aの値に等しくなります。unlessも同様。 w = 12 if true p w #=> 12 x = 32 if false p x #=> nil y = 56 unless true p y #=> nil z = 78 unless false p z #=> 78追記…

abort

abort(message)でmessageを標準エラー出力に出して終了します。終了ステータスはEXIT_FAILUREになります。

casecmp

String#casecmpは、大文字小文字を無視したです。 p "ABC" <=> "ABD" #=> -1 p "ABC" <=> "ABB" #=> 1 p "ABC" <=> "abc" #=> -1 p "ABC".casecmp("ABD") #=> -1 p "ABC".casecmp("ABB") #=> 1 p "ABC".casecmp("abc") #=> 0

るびた登場

id:rubyco(るびこ), id:rubyo(るびお), id:rubyta(るびた), ……みんなでRubyのお勉強。 追記:たまちゃんのコメントに大笑いしました♪ 追記:id:javazo(じゃばぞう)発見!(^_^)……Javaのお勉強。 追記:id:pyletはなんて読むのかな?……Pythonのお勉強。 追記:…

調和数

数学物語テトラちゃんとハーモニック・ナンバーに出てきた、調和数のグラフ用のデータを作ります。 まずは、Floatを使って、ナイーブに。 def harmonic(n) s = 0.0 (1..n).each do |k| s += 1.0 / k end s end def print_harmonic(n) print "H(#{n}) = #{har…

定数とクラス変数

クラス変数へは、外部から直接代入できません(コンパイル時(?)のエラー)。 定数には、外部から代入ができます。再代入すると警告がでます。 class Rubyco Message = "Hello" @@message = "hello" end # p Rubyco.Message #=> undefined method `Message' f…

ある級数の収束

$\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.78125 1.875 1.9296875 1.9609375 1.978515625…

gsub, gsub!

String#subは置換した文字列を返す。gsubはすべてを置換した文字列を返す。gsub!はselfを書き換える。 以下は与えられた文字列中の数字を\dに置き換えるスクリプト。 s = "This coin is 100yen." puts s.sub(/\d/, '\d') #=> This coin is \d00yen. puts s #…

initializeの引数をインスタンス変数に引き渡す

initialize に渡された値を自動的にインスタンス変数にするを読んで。 ちょっと主旨が違うような気もしますが、書いてみました(1)。 # (1) class Rubyco def initialize(name, age) %w(name age).each do |s| eval("@#{s} = #{s}") end end def to_s "name:#…

るびおの日記

rubyo (るびお) の日記登場! 最初、エイプリルフールかと思ってしまいました < 失礼ですね。

Perlのスクリプトを実行

Rubyのソースを読んでいて、オプション-lを付けるとPerlのスクリプトを実行する、という機能がインタプリタに含まれていることに気づきました。 さっそくPerlのスクリプトsample.plを作って実験してみました。 以下、実行結果です。 > type sample.pl print …