第2回 相撲で学ぶ Emacs Lisp。

この記事は 第1回 相撲で学ぶ Emacs Lisp。 の続きです。
はっきり言って出落ちなんですが、この記事のポイントは次の2つです。

  • Elisp の関数名 (シンボル名) は漢字も使える。
  • 2択を1/2で行なう方法を考えてみた。

相撲を取って勝ち名乗りを上げる相撲関数。

(defun 相撲 (east west)
  (if (= (random 2) 0)
      east west))

使い方は、以下のように東と西に四股名を渡すと、勝った方の四股名を返します。

(相撲 "朝青龍" "白鵬") ; lisp-interaction-mode で C-j
"白鵬"

という具合です。では、10番勝負を行なってみましょう。

(loop for i from 1 to 10 collecting
      (相撲 "朝青龍" "白鵬")) ; C-j で実行すると以下が返ってきた。
("朝青龍" "朝青龍" "白鵬" "白鵬" "白鵬" "白鵬" "朝青龍" "朝青龍" "白鵬" "朝青龍")

綺麗に対戦成績が5分になりました。

オマケ:Elisp の関数名にコロンとか使っているアレ何?

(cfw:contents-debug-data) ; 動作確認用データを表示するようにする

のコードなどで見られる : (コロン) など、最初見たときに「これ何?」と思ったりするんですが、実は機械的には何の意味もありません。
単に cfw: という接頭辞を使うことで、他のシンボル名との衝突を防いでいるだけなのです。初めてこういうコードを見たときは Lisp 怖い! と思ったりもしたのですが、慣れるとホント単純明快です。

第2回終わり。

まさかの1年越しのネタでしたが、第3回があるかどうかは全くの謎です。