イカ娘語変換関数を書いてみた

このところ、LISPの学習にいそしんでいるのでゲソが、テキストを読んでるだけでは身につかないと思ったので、試しにイカ娘語変換関数を書いてみたでゲソ。

Ika-Musume-Go-Translator(イカ娘語トランスレーター)、略してika-latorでゲソ。これを.emacsに書いておけば、M-x ika-latorでバッファの文章を変換できるでゲソ。

これを書くに際して、2010-11-06をおおいに参考にさせてもらったでゲソ。というか、ベースになる正規表現をほぼそのまま使っているでゲソ。感謝してるでゲソ。

(defun ika-laitor ()
  (interactive)
  (let (ikago-ptn)
    (setq ikago-ptn '(
		      ("ないですか" "なイカ")
		      ("\\(だろうか\\|か\\|かな\\|でしょうか\\)\\(\\?\\|?\\|。\\)" "じゃなイカ?")
		      ("ありません" "ないんじゃなイカ?")
		      ("である" "でゲソ")
		      ("いか" "イカ")
		      ("\\(でした\\|だった\\)" "\\1ゲソ")
		      ("ください" "くれでゲソ")
		      ("あります" "ある")
		      ("いいます" "いう")
		      ("します" "する")
		      ("ます" "る")
		      ("ました" "た")
		      ("でした" "だ")
		      ("\\(き\\|来\\)ます" "きる")
		      ("あなた\\|あんた\\|貴方\\|貴女\\|キミ" "おまえ")
		      ("だけれど\\|だけど\\|だが" "でゲソが")
		      ("たけれど\\|たけど\\|たが" "たでゲソが")
		      ("\\(で\\)\\(す\\)" "\\1ゲソ")
		      ("\\(る\\|た\\|す\\|い\\|う\\|く\\|つ\\|む\\|ぐ\\|ぶ\\)\\(よ\\|ね\\|な\\)?\\(。\\|$\\)" "\\1でゲソ\\2\\3")
		      ("\\(だ\\)\\(よ\\|ね\\|な\\)?\\(。\\|$\\)" "でゲソ\\2\\3")
		      ("でゲソじゃなイカ" "でゲソか")
		      ))
    (while ikago-ptn
      (goto-char (point-min))
      (while (re-search-forward (car (car ikago-ptn)) nil t)
	(replace-match (cadr (car ikago-ptn))))
      (setq ikago-ptn (cdr ikago-ptn)))))