Advertisement
Guest User

Untitled

a guest
Apr 2nd, 2019
79
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
  1. (defn common-op [type? op]
  2.   (fn [& vs]
  3.     (apply mapv op vs)))
  4.  
  5. (def v+ (common-op vector? +))
  6. (def v- (common-op vector? -))
  7. (def v* (common-op vector? *))
  8.  
  9. (defn matrix? [m]
  10.   (and (vector? m) (every? vector? m)))
  11.  
  12. (def m+ (common-op matrix? v+))
  13. (def m- (common-op matrix? v-))
  14. (def m* (common-op matrix? v*))
  15.  
  16. (defn scalar [a, b]
  17.   (apply + (v* a b)))
  18.  
  19. (defn vect [a b]
  20.   [(- (* (nth a 1) (nth b 2)) (* (nth a 2) (nth b 1)))
  21.    (- (* (nth a 2) (nth b 0)) (* (nth a 0) (nth b 2)))
  22.    (- (* (nth a 0) (nth b 1)) (* (nth a 1) (nth b 0)))
  23.    ])
  24.  
  25. (defn v*s [a, b]
  26.   (mapv (fn [n] (* n b)) a))
  27.  
  28. (defn m*s [a, b]
  29.   (mapv
  30.     (fn [n]
  31.       (v*s n b)) a))
  32.  
  33. (defn m*v [a b]
  34.   (mapv
  35.     (fn [n]
  36.       (scalar n b)) a))
  37.  
  38. (defn transpose [m]
  39.   (apply mapv vector m))
  40.  
  41. (defn m*m [a b] (mapv (fn [n] (mapv (fn [m] (scalar n m)) (transpose b))) a))
  42.  
  43. (defn common-deep-op [op]
  44.   (fn calc [a b]
  45.     (if (vector? a)
  46.       (mapv calc a b)
  47.       (op a b))))
  48.  
  49. (def s+
  50.   (common-deep-op +))
  51. (def s*
  52.   (common-deep-op *))
  53. (def s-
  54.   (common-deep-op -))
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement