コメント応答

>ども、Plus です。

どもども。コメントありがとう!


>>> #ただし美人教師とのマンツーマン放課後居残り補習なら積極的に受けさせてもらいますw
>> ちなみに補修担当は,体育会系のゴツイ,ハードゲイの先生だそうです。
>
> あーはいはい、物を修理するのはガチホ○先生にまかせておきますから
> #だって【補修】だもんね。
> 補習の方は、びじんセンセー щ(゜□゜щ)カモォォォン
緊急連絡ですが,美人センセーも一緒に`補修'を行うようです。


> …気を取り直して Exercise ですけど、
あいw


> region 内で何かを処理する場合は
> narrowing すると開始位置/終了位置の point を気にしなくていいので便利ですよ〜

ほほう・・・。ゴクリ。


> と書いた所で Chapter 13 を読んでみたら、
> そちらの解説も同じように point で判定を行ってるんですね。
> とりあえず再帰版を narrowing を使用して修正してみました。どうでしょうか。
ほ〜。
グレイトッ!!
その発想はなかたヨー。
narrowing してしまえば,その範囲全てが対象になるわけですね。


Emacs Lisp Intro では,たぶん re-search-forward で,
引数で BOUND を指定することを学ばせたかったのかなぁ,
なんて思っちょります。
つまり,指定しないと行き過ぎちゃうよ〜,ということを。
でも,narrowing するのも1つの方法だし,
widen は出てきたけど,narrow-to-region は出てなかったはず。

教訓

region を対象にごにょごにょする関数を書くときは,
narrow-to-region を使うと楽になることがあるぞ。
ただし,save-restriction を忘れるなよっ!

ありがとうございました。うっす。ごっつぁんです。

(defun recursive-count-punctuation-marks (beg end)
  "Print the number of punctuation marks in the region.
A punctuation mark is period, comma, semicolon, colon,
exlamation mark, or question mark."
  (interactive "r")
  (save-excursion
    (save-restriction
      (narrow-to-region beg end)
      (goto-char (point-min))
      (message "There are %d punctuation marks." (count-puncs-recursively)))))

(defun count-puncs-recursively ()
  (if (re-search-forward "[.,;:!?]" nil t)
      (1+ (count-puncs-recursively))
    0))