vector2.scm 808 B

12345678910111213141516171819202122232425262728293031323334353637
  1. ; Part of Scheme 48 1.9. See file COPYING for notices and license.
  2. ; Authors: Richard Kelsey
  3. (define-local-syntax (define-primitive id nargs)
  4. (let ((args (reverse (list-tail '(z y x) (- '3 nargs)))))
  5. `(define (,id . ,args)
  6. (call-primitively ,id . ,args))))
  7. (define-primitive + 2)
  8. (define-primitive - 2)
  9. (define-primitive * 2)
  10. (define-primitive < 2)
  11. (define-primitive make-vector 2)
  12. (define-primitive pointer-add 2)
  13. (define (vector-ref vec index)
  14. (call-primitively contents (pointer-add vec index)))
  15. (define (vector-set! vec index value)
  16. (call-primitively set-contents! (pointer-add vec index) value))
  17. (define (cons x y)
  18. (let ((p (make-vector 2 0)))
  19. (vector-set! p 0 x)
  20. (vector-set! p 1 y)
  21. p))
  22. (define (car p)
  23. (vector-ref p 0))
  24. (define (cdr p)
  25. (vector-ref p 1))