Previous: structs sysops, Up: structs [Contents][Index]
The code below shows how we could define a public API to handle structures:
(define-syntax-rule (make-<colour> ?red ?green ?blue) (##sys#make-structure '<colour> ?red ?green ?blue)) (define-syntax-rule (colour? ?obj) (##sys#structure? ?obj '<colour>)) (define-syntax-rule (check-colour ?obj ?loc) (##core#check (##sys#check-structure ?obj '<colour> (quote ?loc)))) (define-syntax-rule (colour-red ?stru) (check-colour ?stru 'colour-red) (##sys#slot ?stru 1)) (define-syntax-rule (colour-green ?stru) (check-colour ?stru 'colour-green) (##sys#slot ?stru 2)) (define-syntax-rule (colour-blue ?stru) (check-colour ?stru 'colour-blue) (##sys#slot ?stru 3)) (define-syntax-rule (colour-red-set! ?stru ?new-red-value) (check-colour ?stru 'colour-red) (##sys#setslot ?stru 1 ?new-red-value)) (define-syntax-rule (colour-green-set! ?stru ?new-green-value) (check-colour ?stru 'colour-green) (##sys#setslot ?stru 2 ?new-green-value)) (define-syntax-rule (colour-blue-set! ?stru ?new-blue-value) (check-colour ?stru 'colour-blue) (##sys#setslot ?stru 3 ?new-blue-value))
here are some usage examples:
(let ((col (make-<colour> 0.2 0.3 0.4))) (check-colour col 'here) (##sys#slot col 0)) ⇒ <colour> (colour? (make-<colour> 0.2 0.3 0.4))) ⇒ #t (colour? "ciao")) ⇒ #f (let ((col (make-<colour> 0.2 0.3 0.4))) (values (colour-red col) (colour-green col) (colour-blue col))) ⇒ 0.2 0.3 0.4 (let ((col (make-<colour> 0.2 0.3 0.4))) (colour-red-set! col 0.5) (colour-green-set! col 0.6) (colour-blue-set! col 0.7) (values (colour-red col) (colour-green col) (colour-blue col))) ⇒ 0.5 0.6 0.7
Previous: structs sysops, Up: structs [Contents][Index]