基本的に怠Diary

技術ブログにはなれなかった。

モンティ・ホール問題

モンティ・ホール問題

(ql:quickload '(:alexandria) :silent t)

;;; チ○イス、そこのリストの中からどれか一つ取ってくれ。
(defun list-random-choise (lst)
           (nth (random (length lst)) lst))
;;; リスト生成してシャッフルしてモンティホールの問題のアレしていく。
;;; 0が車、1はヤギ。
(defun monty-hall-q (user-choise-p)
           (let* ((choise-lst (alexandria:shuffle '(1 1 0)))
                  (user-choise (list-random-choise choise-lst))
                  (remainder-lst (remove user-choise choise-lst :count 1))
                  (monty-do-after-lst (remove 1 remainder-lst :count 1)))
             (cond (user-choise-p user-choise)
                   (t (car monty-do-after-lst)))))
;;; モンティ・ホール問題のアレをひたすら繰り返し、結果のリストをカウントする。
(defun count-monty-hall-lst (user-choise-p &optional (num 1000))
           (let ((monty-hall-lst (loop for x from 0
               for y = x
              while (< y num)
            collect (monty-hall-q user-choise-p))))
             (count 0 monty-hall-lst)))

未だにしっくりくる理解できてなかったので実装したらしっくりき

ませんでした。どうすりゃいいんだ・・・。

後今回からalexandria使い始めました。中身見てみると結構よさ気なものあるので

これからも使っていきたい。むしろ今までCommon Lisper名乗ってて使ってなかったのが

かなり謎です。