ズンドコキヨシ with Common Lisp

  • 3
    いいね
  • 0
    コメント
この記事は最終更新日から1年以上が経過しています。

何の記事?

最近(?)流行のキヨシチェック、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っぽくない

ごめんね、一生懸命ズンドコするからゆるして><