ia = ia + 1と書く代わりに
ia++とか
++iaと書くことができます.しかし,Ruby言語ではインクリメント(デクリメント)演算子を採用していません.これは, Ruby言語の設計者のまつもとゆきひろさんのポリシーによるものだと思います.
ia++と書くと文法エラーになりますし(irbでは,次の行の入力待ち状態になります),
++iaと書くと,
+(+(ia))と解釈されて,単にiaと書いたのと同じ意味になります.なお,
ia = ia +1の代わりに
ia += 1と書くことはできるので,少しでも短く書きたい場合はこのように書くのが良いでしょう.
irb(main):001:0> load("./merge.rb") SyntaxError: ./merge.rb:22: syntax error, unexpected kELSE, expecting kEND ./merge.rb:26: syntax error, unexpected $end, expecting kEND from (irb):1:in `load' from (irb):1
if ia==a.length() for k in ib..(b.length()-1) c[a.length()+k]=b[k] elseの「else」の行が22行目にあたると思いますが,たしかに,20行目から始まるforをendで閉じた後に「else」を書く必要があります.同様のendの書き忘れがあるので,それを直せばこのエラーは出なくなるはずです.
なお,2つめ以降のエラー,
./merge.rb:26: syntax error, unexpected $end, expecting kENDは,さきほどとほぼ同じですが「merge.rbの26行目でruby処理系が 'end' というキーワード(keyword)が来るのを期待したら,ファイルの最後(end of file)になったのでびっくりした」という意味です.
include Math def f(k) a=(1+5**0.5)/2.0 b=(1-5**0.5)/2.0 (a**(k*1.0)-b**(k*1.0))/(a-b) endで、フィボナッチ数列が求まりますね?表示が整数になりませんけど。
while ia < a.length() c[ic]=a[ia] ia=ia+1 ic=ic+1 end while ib < b.length() c[ic]=b[ib] ib=ib+1 ic=ic+1 end
if ib==b.length() while ia < a.length() c[ic]=a[ia] ia=ia+1 ic=ic+1 end else while ib < b.length() c[ic]=b[ib] ib=ib+1 ic=ic+1 end end
c = c[0..ic-1] + a[ia..a.length()] + b[ib..b.length()]のように書いた人もいた.
ruby vote.rb 選択肢番号のように使います.