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 選択肢番号のように使います.