#! /bin/sh #| Hey Emacs, this is -*-scheme-*- code! exec mzscheme -qu "$0" ${1+"$@"} |# (module call mzscheme (require (planet "test.ss" ("schematics" "schemeunit.plt" 1)) (planet "text-ui.ss" ("schematics" "schemeunit.plt" 1))) (provide make-bid level denomination make-call) (define-values (struct:bid make-bid bid? bid-ref bid-set!) (make-struct-type 'bid #f 2 0 #f null #f #f '(0 1) (lambda (level denom name) (unless (and (integer? level) (<= 1 level 7)) (raise-type-error name "integer in [1,7]" level)) (case denom ((clubs diamonds hearts spades) 'ok) (else (raise-type-error name "a real suit" denom))) (values level denom) ))) (define level (make-struct-field-accessor bid-ref 0)) (define denomination (make-struct-field-accessor bid-ref 1)) (define-values (struct:call make-call call? call-ref call-set!) (make-struct-type 'call #f 1 0 #f null #f #f '(0) (lambda (thing name) (if (bid? thing) (values thing) (case thing ((pass double redouble) (values thing)) (else (raise-type-error name "pass, double, or redouble" thing))))))) (display (make-call 'pass)))