/examples/boids/pt-lib/source.scm

http://github.com/dharmatech/abstracting · Scheme · 70 lines · 37 code · 23 blank · 10 comment · 0 complexity · 49f462c0decbde41daea56dbf3a64355 MD5 · raw file

  1. ;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
  2. (define vector-nth (curry/ba vector-ref))
  3. (define set-vector-nth! (curry/b:ac vector-set!))
  4. ;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
  5. ;; pt
  6. ;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
  7. (define (pt a b) (vector 'pt a b))
  8. (define pt-x (vector-nth 1))
  9. (define pt-y (vector-nth 2))
  10. (define pt-x! (set-vector-nth! 1))
  11. (define pt-y! (set-vector-nth! 2))
  12. (define x (vector-nth 1))
  13. (define y (vector-nth 2))
  14. (define x! (set-vector-nth! 1))
  15. (define y! (set-vector-nth! 2))
  16. ;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
  17. (define binary-pt-procedure
  18. (lambda (op)
  19. (lambda (a b)
  20. (pt (op (x a) (x b))
  21. (op (y a) (y b))))))
  22. (define pt+ (binary-pt-procedure +))
  23. (define pt- (binary-pt-procedure -))
  24. (define pt* (binary-pt-procedure *))
  25. (define pt/ (binary-pt-procedure /))
  26. ;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
  27. (define (pt-n-procedure op)
  28. (lambda (a n)
  29. (pt (op (x a) n)
  30. (op (y a) n))))
  31. (define pt+n (pt-n-procedure +))
  32. (define pt-n (pt-n-procedure -))
  33. (define pt*n (pt-n-procedure *))
  34. (define pt/n (pt-n-procedure /))
  35. ;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
  36. (define (pt-neg p)
  37. (pt (- (x p)) (- (y p))))
  38. ;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
  39. (define (norm p)
  40. (sqrt (+ (sq (x p))
  41. (sq (y p)))))
  42. ;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
  43. (define (normalize p)
  44. (pt/n p (norm p)))
  45. ;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
  46. (define (dot a b)
  47. (bi (pt* a b) x y +))