vector-keys: Made this
This commit is contained in:
parent
4f71f50312
commit
890c7d4886
|
|
@ -0,0 +1,49 @@
|
|||
;;>\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 ...))))
|
||||
|
||||
|
|
@ -0,0 +1,6 @@
|
|||
(define-library
|
||||
(retropikzel vector-keys)
|
||||
(import (scheme base))
|
||||
(export vector-keys
|
||||
let-vector-keys)
|
||||
(include "vector-keys.scm"))
|
||||
|
|
@ -0,0 +1 @@
|
|||
Utilities to accessing vector indexes
|
||||
|
|
@ -0,0 +1 @@
|
|||
LGPL-3.0-or-later
|
||||
|
|
@ -0,0 +1 @@
|
|||
1.0.0
|
||||
|
|
@ -0,0 +1,35 @@
|
|||
(import (scheme base)
|
||||
(scheme write)
|
||||
(retropikzel tap)
|
||||
(retropikzel vector-keys)
|
||||
(srfi 64))
|
||||
|
||||
(test-runner-current (tap-runner))
|
||||
|
||||
(test-begin "vector-keys")
|
||||
|
||||
(test-begin "vector-keys")
|
||||
(define player (make-vector 10 0))
|
||||
(vector-keys player
|
||||
(player.x 0)
|
||||
(player.y 1))
|
||||
|
||||
(test-equal 0 (player.x))
|
||||
(player.x 10)
|
||||
(test-equal 10 (player.x))
|
||||
(test-end "vector-keys")
|
||||
|
||||
|
||||
(test-begin "let-vector-keys")
|
||||
(let ((enemy (make-vector 10 0)))
|
||||
(let-vector-keys enemy
|
||||
((enemy.x 0)
|
||||
(enemy.y 1))
|
||||
(enemy.x 100)
|
||||
(test-equal 100 (enemy.x))))
|
||||
(test-end "let-vector-keys")
|
||||
|
||||
(test-end "vector-keys")
|
||||
|
||||
|
||||
|
||||
Loading…
Reference in New Issue