(define (parse-card c)
(let* ((match (string-match card-re c))
(value (cadr match))
(suit (caddr match)))
(cond ((equal? suit "H") (list value "<3"))
((equal? suit "D") (list value "<>"))
((equal? suit "S") (list value "{>"))
((equal? suit "C") (list value "qB"))
(else (error "Bad suit")))))
;; prints the output of fmt on each parsed card, with a space in
;; between each output.
;; fmt should take a value and a suit and return a single line string.
(define (pr-per-card cards fmt)
(if (null? cards)
(newline)
(begin (display (apply fmt (parse-card (car cards))))
(if (not (null? (cdr cards))) (display " "))
(pr-per-card (cdr cards) fmt))))