/src/math/vector/source.scm

http://github.com/dharmatech/abstracting · Scheme · 78 lines · 31 code · 30 blank · 17 comment · 0 complexity · 507e748db84f220a6236108596abbc2c MD5 · raw file

  1. ;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
  2. ;; vector
  3. ;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
  4. (define (vector+ . args) (apply vector-map + args))
  5. (define (vector- . args) (apply vector-map - args))
  6. (define (vector* . args) (apply vector-map * args))
  7. (define (vector/ . args) (apply vector-map / args))
  8. ;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
  9. (define (vector*n v n) (vector-map (multiplier n) v))
  10. (define (vector/n v n) (vector-map (divide-by n) v))
  11. ;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
  12. (define (vector-sum v)
  13. (let ((sum 0))
  14. (let ((add-to-sum
  15. (lambda (elt)
  16. (set! sum (+ sum elt)))))
  17. (vector-for-each add-to-sum v))
  18. sum))
  19. ;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
  20. (define (vector. a b) (vector-sum (vector* a b)))
  21. ;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
  22. ;; vec
  23. ;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
  24. (define (vec+ . args) (vec-obj (apply vector+ (map (lambda (v) (-> v 'raw)) args))))
  25. (define (vec- . args) (vec-obj (apply vector- (map (lambda (v) (-> v 'raw)) args))))
  26. (define (vec* . args) (vec-obj (apply vector* (map (lambda (v) (-> v 'raw)) args))))
  27. (define (vec/ . args) (vec-obj (apply vector/ (map (lambda (v) (-> v 'raw)) args))))
  28. ;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
  29. (define (vec*n v n) ((-> v 'map) (multiplier n)))
  30. (define (vec/n v n) ((-> v 'map) (divide-by n)))
  31. ;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
  32. ;; (define (vec-norm v)
  33. ;; (sqrt (-> ((-> v 'map) sq) 'sum)))
  34. ;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
  35. (define (v. a b)
  36. (-> (vec* a b) 'sum))
  37. ;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
  38. (define v+ vec+)
  39. (define v- vec-)
  40. (define v*n vec*n)
  41. (define v/n vec/n)
  42. ;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
  43. (define (norm v)
  44. (sqrt
  45. (vector-sum
  46. (vector-map sq (vector-ref v 1)))))
  47. (define (normalize v) (v/n v (norm v)))
  48. ;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;