この記事は 第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回があるかどうかは全くの謎です。