4
Help us understand the problem. What are the problem?

More than 5 years have passed since last update.

posted at

ズンドコキヨシ with Common Lisp

何の記事?

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

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

Why not register and get more from Qiita?
  1. We will deliver articles that match you
    By following users and tags, you can catch up information on technical fields that you are interested in as a whole
  2. you can read useful information later efficiently
    By "stocking" the articles you like, you can search right away
4
Help us understand the problem. What are the problem?