12/19の業務報告

こんにちは,図書館情報メディア研究科の安永です.
12/19の質問と回答です.
=================================================================================
<プログラミング演習II>
Q1.(演習3-9)
“(”とその両隣のスペースを正規表現でマッチできない
A1./^\s\(/という正規表現を使っていました。その正規表現は何を意味しているかを説明してもらったところ、”^”の意味が曖昧だったようなのでテキストを見て確認してもらいました。
Q2.(演習3-9)
実行してみると指定の記号の隣のスペース記号が取れていないものがいくつか出る
A2.まず記号と周りのスペースをマッチさせる際に+を用いていたために片方しかスペースがない時にはマッチしないようになっていました。カンマに関しては、カンマも括弧と同じようなメタ記号であることに気付いていないためでしたので、そこを指摘しました。
Q3.(演習3-9)
記号の周りのスペースを取ろうとすると取れているものと取れていないものが出てしまう
A3.読み込んだ文字列に対してgsubを一つずつ適用していく部分で、gsubを行う文字列の指定が間違っていたのが原因でした。gsubを適用して行く部分を確認してもらって気付いてもらいました。
Q4. (演習3-9)
記号等の前後にある空白が削除される部分とされない部分がある。何が間違っているのでしょうか。
A4.実行結果で空白が削除されていない箇所と正規表現を照らし合わせて、正規表現が正しくないことを説明しました。その後、記号の前後に空白がある場合は何通りあるか考えてもらい、それに対応する正規表現を記述すればよいとアドバイスしました。
Q5.(演習3-8)
プログラムを書いてみたが、現時点で合っているか。プログラムの作り方がわからない。
A5.2つ以上の空白を1つの空白に置換するプログラムで、正規表現を/\s+/としていました。これでは「1つ以上の空白」になっているので「2つ以上の空白」にする必要があることを指摘しました。(1)(2)の要件を満たす正規表現も分からなかったようなので、教科書を使って一緒に考えました。プログラムの全体的な流れ、作り方はWebの第3回説明スライドを参照するように言いました。
Q6.(演習3-8)
エラーが出ました
A6.エラーが出ているのが何行目が尋ねました。次に,その行で何をしたいのか尋ねると,「空白とタブを取ること」だと返ってきました。次に,その行で何をしているか,本を見ながら説明してもらいました。そこで,空白やタブ記号を意味するのは「バックスラッシュs」であり,「スラッシュs」ではない,ということに気づいてもらいました。
Q7.(演習3-8)
でこの実行結果でいいのでしょうか
A7.どう思うか尋ねると,「実行結果例と違うので良くないと思う」と返ってきたので,どこが違うか尋ねました。実行結果例と違い,改行されていなかったのですが,これは質問者同士(2人)で話して解決しました。
Q8.(演習3-8)
期待通りの実行結果が出力されないが,プログラムのどこが間違っているのか分からない
A8.どのような場合に期待通りの動きをしていないのかを尋ね,入力が空行の時であると気づいてもらいました。同時に,プログラムを勘違いして書いていたことに本人が気づき,そちらが原因だと思うので,書き直します,と言って質問は終わりました。
Q9.(演習3-8)
次のようなエラーが出ます undefined local method `io’
A9.本を参考にして書いたとのことだったので,その部分を見せてもらいました。ioはファイルクラスのメソッドであること,今回の演習はファイルではなく,リダイレクトで入力を読み込むことを確認しました。その上で,過去にリダイレクトで入力を読み込んだプログラムを参考に書き直してもらいました。
(回答:Q1-3北山 Q4-5栗原 Q6-8安永)
=================================================================================
プログラムを書く時には,一気に完成形を目指さずに,問題を分割してその1つ1つを解く,という気持ちで取り組むとよいですね。例えば演習3-8や9のような問題だったら,「リダイレクトでファイルを読み込む」「文字列に対してメソッドを呼び出す」「メソッドの返り値を表示する」「メソッドの内容が要件を満たすようにする」「リダイレクトでファイルを読み込んで,1行ずつ文字列に格納する」と分けて作業すると分かりやすいかもしれません。
(文責:安永)