概要
トランプゲームなどのカード(山札)のモジュールです。
動作環境
Windows 10
DrRacket 7.6
内容
(require "./my-lib.rkt") に関しましては、こちらをご参照下さい。
#lang racket
(module cards racket
(provide deck54
deck52
draw-card54
draw-card52)
(require racket/generator)
(define (make-gen lst) ; ジェネレータの生成
(generator ()
(let loop ([l lst])
(if (null? l) '()
(begin
(yield (car l))
(loop (cdr l)) ) ) ) ) )
(define (map-mark mark)
(map (λ (n)(cons mark n)) ; '(マーク . 数字)
(range 1 14) ) ) ; 1 ~ 13
(define deck54 ; 山札
(append '((j0 . 0) (j1 . 0)) ; ジョーカー
(map-mark 's) ; スペード
(map-mark 'c) ; クラブ
(map-mark 'd) ; ダイヤ
(map-mark 'h) ) ) ; ハート
(define draw-card54 ; 山札から1枚めくる
(make-gen (shuffle deck54)) )
(define deck52 (cddr deck54)) ; 山札(ジョーカー無し)
(define draw-card52 ; 山札から(ジョーカー無し)1枚めくる
(make-gen (shuffle deck52)) )
) ; end module
; ----------------------------------------------------------------
(require racket/require 'cards) ; モジュールの読込
(require "./my-lib.rkt")
; (do-times 60 (displayln (draw-card54)))
#|
;=>
(d . 4)
(d . 2)
(h . 6)
(s . 8)
(c . 3)
(c . 13)
(h . 3)
(j0 . 0)
(d . 5)
(s . 9)
(d . 8)
(j1 . 0)
(h . 10)
(c . 5)
(c . 2)
(d . 6)
(h . 13)
(d . 7)
(h . 9)
(s . 5)
(d . 12)
(c . 6)
(s . 6)
(d . 1)
(h . 1)
(c . 11)
(s . 10)
(c . 4)
(s . 3)
(s . 7)
(c . 9)
(c . 10)
(c . 7)
(d . 11)
(h . 2)
(s . 11)
(h . 5)
(d . 3)
(c . 12)
(s . 4)
(h . 8)
(h . 11)
(s . 12)
(c . 1)
(d . 13)
(d . 9)
(s . 2)
(s . 13)
(s . 1)
(h . 7)
(h . 12)
(c . 8)
(d . 10)
(h . 4)
()
()
()
()
()
()
()
|#