何の記事?
最近(?)流行のキヨシチェック、Common Lispはなかったようなのでやってみました。
ズンドコズンドコ
zundoko.lisp
;;;; zundoko problem
;; 初期化
(defun init-zundoko ()
; ズンドコ状態
(defparameter *zundoko-stat* '())
; ズンドコ定義
(defvar +zun+ 0)
(defvar +doko+ 1)
; キヨシ判定時のズンドコパターン
(defvar +zundoko-pat+ (list 0 0 0 0 1)))
;; キヨシチェック関数
(defun zundoko (out-stream)
(setf *zundoko-stat* (append *zundoko-stat* (list (random 2))))
;; ズンドコしすぎないようにcdrする
(if (> (length *zundoko-stat*) 5)
(setf *zundoko-stat* (cdr *zundoko-stat*)))
(if (equal (length *zundoko-stat*) 5)
;; 要素が5個ならキヨシ判定
(progn
;; 現在の状態でズンドコする
(mapcar
(lambda (x)
(if (equal x +zun+)
(format out-stream "ズン ")
(format out-stream "ドコ ")))
*zundoko-stat*)
;; パターンにマッチしたら\キヨシ/する
(if (reduce (lambda (x y) (and x y)) (mapcar #'equal *zundoko-stat* +zundoko-pat+))
(progn
(format out-stream "\キヨシ/")
t)
nil))
;; 要素が5個未満ならズンドコチャージ中
(progn
(format out-stream "ズンドコチャージ中")
nil))
)
;; 初期化
(init-zundoko)
(zundoko t)
するとキヨシチェックしてくれます。
(zundoko nil)
すれば画面出力はなくなるので、たとえば初心者の勉強用に、
「この関数を10,000回実行した際に\キヨシ/する確立を求めよ」みたいな課題にきっとつかえるだろう
という希望を少なくとも書いてる時点ではもっています。:)
#Lispっぽくない
ごめんね、一生懸命ズンドコするからゆるして><