Notes
;; vector_distance.clj
( defn square-of-distance [ s1 s2 ]
( Math/pow ( - s1 s2 ) 2 ))
( defn absolute-distance [ s1 s2 ]
( Math/abs ( - s1 s2 )))
( defn vector-distance [ v1 v2 ]
( ->> ( map square-of-distance v1 v2 )
( reduce + )
Math/sqrt ))
( defn manhattan-distance [ v1 v2 ]
( ->> ( map absolute-distance v1 v2 )
( reduce + )))
( vector-distance [ 0 0 ] [ 3 4 ])
( manhattan-distance [ 0 0 ] [ 3 4 ])
( vector-distance [ 0 0 7 ] [ 3 4 5 ])
;; lp_distance.clj
( defn absolute-distance [ s1 s2 ]
( Math/abs ( - s1 s2 )))
( defn lp-distance [ v1 v2 p ]
( as-> ( map absolute-distance v1 v2 ) x
( map # ( Math/pow % p ) x )
( reduce + x )
( Math/pow x ( / 1 p ))))
( defn vector-distance [ v1 v2 ]
( lp-distance v1 v2 2 ))
( defn manhattan-distance [ v1 v2 ]
( lp-distance v1 v2 1 ))
( lp-distance [ 0 0 ] [ 3 4 ] 1 )
( lp-distance [ 0 0 ] [ 3 4 ] 2 )
( manhattan-distance [ 0 0 ] [ 3 4 ])
( vector-distance [ 0 0 ] [ 3 4 ])