LoginSignup
4

More than 5 years have passed since last update.

ズンドコキヨシ with Common Lisp

Posted at

何の記事?

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

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

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
4