10/26 関数から「計算」へ(1)


前回の補足


前回の感想,質問より

Q.
x < y < z という条件を
  if x < y < z
のように書きたかったのですが,
NoMethodError: undefined method `<' for true:TrueClass
Ruby言語では書けないのですか?
A.
このように書けるプログラミング言語はありますが(Pythonなど),Ruby言語では書けません.代わりに
  if x < y && y < z
のように書いてください.なお,Javascriptというプログラミング言語では,
js> 1 < 2 < 3
true
となるので,一見このような書き方ができるのかと思ってしまいますが,これは罠で,
js> -1 < 0 < 1
false
となるので,想定したようには動いていないことがわかります.これは (-1 < 0) をまず評価して,true となり,trueを数字と比較する時は1と見なして比較するため,
js> true < 1
false
となるという仕組みなのですが,エラーになるだけRubyの方がましかもしれません.
Q.
match.rbの3行目は
while j < w && s[i+j] == p[j]
ではダメなのでしょうか?
A.
配布プログラムのsubmatchの定義の部分ですね.講義中に口頭で触れたのですが,Ruby言語の古い規格では文字列pのj文字目だけからなる文字列を作るには p[j..j] と書く必要があったのですが,現在のRuby言語では p[j] と書くことができます.したがって,その書き方で構いません.
Q.
irb中で,
isrb(main):022:2>        1
isrb(main):023:2> Display all 188 possibilities? (y or n)
のような表示が出る.
A. (TA 森永さん)
irbでtabキーによる空白を入れるとファイルを全表示するコマンドと解釈されてしまいます。
  > Display all *** possibilities? (y or n)
と出るので、空白はspaceキーで入れるようにしてください。 文字列+tabを入力すると現在のディレクトリ中でその文字列から始まるファイル名を表示してくれるので、ファイル名を補完したり探したりするのに使えます。 irb起動前でも起動後でも同じ動作をします。

前回の課題について

今日の練習,投票

授業の登録方法


講義資料


講義フォルダの作成


配付プログラムのダウンロード


投票システム

vote.rbをダウンロードして(「リンク先のファイルを別名で保存」で,ホームフォルダの下のalgo16を選択(なければ作る).".txt"を「追加しない」を選ぶ),ホームディレクトリに保存します.ドックからターミナルを起動して,
cd algo16
を済ませてから,
ruby vote.rb 選択肢番号
のように使います.

irbを使いながら(一旦終了せずに),投票システムも使うには,ターミナルのメニューバーの「シェル」->「新規タブ」を選ぶか,[Command]+[T]で別のタブを開いて(あるいは[Command]+[N]で別のウィンドウを開いて),投票システムを使うことをお勧めします.このあたりのことは,「はいぱーワークブック」15.4 ターミナルの便利な使い方に書いてあるので参考にしてください.


テキストの補足


今日の課題


自宅で自習をする人のために

アルゴリズム入門共通資料の中に講義で使うRuby言語の処理系のインストール法があります.