情報科学概論
2000.5.23
#!/usr/bin/ruby #cat.rb while line = gets() print line end上のスクリプトでは、3行目のwhileから始まる行では、まずgetsを利用してファイルを読み込む。ここで、gets([rs])(p.38、表2-1)はrsという文字列を行末としてコマンドラインから引数として与えられたファイルを一行読み込むという動作をするメソッドである。rsが省略された場合には、組み込み変数である$/で与えられる行末区切り(p.51、表2-2)を参照するが、デフォルトでは\nが割り当てられる。すなわち、改行までが一行と見なされる。
#!/usr/bin/ruby #for.rb for i in [1,2,3] print i, "\n" endでは、iが1,2,3の場合について、iの値を出力させている。この場合、iの範囲があらかじめ確定しているのでfor文により簡単に記述できる。配列の要素を順に用いる、ある範囲の数に関して実行を行う、などがfor文に適した条件である。
#!/usr/bin/ruby #while.rb ary=[1,2,3] i = 0 while i < ary.size print ary[i], "\n" i = i + 1 endここでは、まず、iに0を代入し配列aryの1番目の要素を出力、次にiに1を加えることでaryの2番目の要素を出力、というように順次要素を出力している。
#!/usr/bin/ruby #cat2.rb for line in ARGF print line endここで出てくるARGFは重要な定数であり、p.52の表2-2に示されているようにコマンドラインからの引数として与えられたファイルの「仮想」ファイルハンドルである。for文により、ARGFに行がある範囲で1行を取り出し、変数lineに代入する。
#!/usr/bin/ruby #break.rb while line = gets() line.chomp! next if line == "skip" break if line == "quit" print line, "\n"上記のスクリプトをnextという名前の以下のような内容のファイル
#redo if line == "redo" end
#!/usr/bin/ruby #return.rb def print_n(n) i = 0 while true print i, "\n" return if n <= i i += 1 end end print_n(5)上のスクリプトでは任意の自然数nをprint_nという関数に与えることにより0,およびn以下の自然数を出力する。ここで、while文の書き方は無数にあるが、returnでprint_nというメソッドを終了させるために、上のような形式となっている。
#!/usr/bin/ruby #multi.rb def multi(n) return n, n*2, n*4 end v1, v2, v3 = multi(3) print "v1= ", v1, " v2= ", v2, " v3= ", v3, "\n"
#!/usr/bin/ruby #fact.rb def fact(n) return 1 if n ==0 f = 1 while n > 0 f *= n n -= 1 end return f end print fact(ARGV[0].to_i), "\n"
f *= n ( --> f = f * n )
n -= 1 ( --> n = n - 1 )
#!/usr/bin/ruby #pi.rb include Math printf("pi: %f = %f\n", PI, atan2(1,1)*4, "\n") printf("log10 = %f\n", log(10), "\n", log(10))
#!/usr/bin/ruby #count.rb require "kconv" print Kconv.toeuc(ARGF.read).gsub!(/\s+/p,"").scan(/./).size, "\n"