;;>\pre{ ;;> vector-keys - Utilities to accessing vector indexes ;;> ;;> Macros that make it easy to access vector indexes using "keys". ;;> ;;>} ;;>\section{Usage} ;;>\pre{ ;;> (define player (make-vector 10 0)) ;;> (vector-keys player ;;> (player.x 0) ;;> (player.y 1)) ;;> ;;> (player.x) ;; Returns 0 ;;> (player.x 10) ;;> (player.x) ;; Returns 10 ;;> ;;> (let ((enemy (make-vector 10 0))) ;;> (let-vector-keys enemy ;;> ((enemy.x 0) ;;> (enemy.y 1)) ;;> (enemy.x) ;; Returns 0 ;;> (enemy.x 100) ;;> (enemy.x) ;; Returns 100 ;;> )) ;;>} ;;>\section{Reference} ;;> Define set of keys to access vector indexes (define-syntax vector-keys (syntax-rules () ((_ vec (key index) ...) (begin (define-syntax key (syntax-rules () ((_) (vector-ref vec index)) ((_ new-value) (vector-set! vec index new-value)))) ...)))) ;;> Define set of keys to access vector indexes inside let body (define-syntax let-vector-keys (syntax-rules () ((_ vec ((key index) ...) body ...) (let-syntax ((key (syntax-rules () ((_) (vector-ref vec index)) ((_ new-value) (vector-set! vec index new-value)))) ...) body ...))))