vec.scm 941 B

1234567891011121314151617181920212223242526272829
  1. (module (arguile data vec)
  2. #:export (vec vec? vec-fn vec-fn!))
  3. (use (arguile base)
  4. (arguile data)
  5. (srfi srfi-43))
  6. ;;; TODO: add optional fill
  7. (trans vec (v)
  8. #:init (%mke-vec v)
  9. #:app (let v (vec-v self)
  10. (fn-case
  11. (() v)
  12. ((k) (vector-ref v k))
  13. ((k obj) (vector-set! v k obj)))))
  14. (defp mke-vec (len #:o fill)
  15. (%mke-vec (make-vector len fill)))
  16. (defp vec: (v k) (v k))
  17. (defp vec! (v k obj) (v k obj))
  18. (defp vec-len (v) (vector-length (v)))
  19. (defp vec->lst (v) (vector->list (v)))
  20. (defp lst->vec (lst) (%mke-vec (list->vector lst)))
  21. (defp vec-cpy (v) (%mke-vec (vector-copy (v))))
  22. (defp vec-fill! (v fill) (vector-fill! (v) fill))
  23. (defp vec<-! (v1 s1 e1 v2 s2) (vector-move-left! (v1) s1 e1 (v2) s2))
  24. (defp vec->! (v1 s1 e1 v2 s2) (vector-move-right! (v1) s1 e1 (v2) s2))
  25. (defp vec-map (fun v . vs) (apply vector-map fun (v) (map (fn (v) (v)) vs)))
  26. ;;; Etc...