;;;; (- x) negates: an integer wraps, a float flips its sign — the negation of ;;;; 0.0 is -0.0, which 1/x tells apart — and a dyn does either by its tag. (defn negi [x i32] i32 (- x)) (defn negf [x f64] f64 (- x)) (defn negf32 [x f32] f32 (- x)) (defn negu [x u8] u8 (- x)) (defn negd [x dyn] dyn (- x)) (defn negg [x $t] $t {:where (is-numeric $t)} (- x)) (defn main [] i32 (println (negi 3)) (println (negi -7)) (println (negf 2.5)) (println (/ 1.0 (negf 0.0))) (println (negf32 (f32 1.5))) (println (negu (u8 1))) (println (negd 4)) (println (negd 2.5)) (println (/ 1.0 (negd 0.0))) (println (negg (i64 9000000000))) (println (negg 0.5)) (let [a (- 5) b (i64 (- 3))] (println (+ a (i32 b)))) (println (- f64-inf)) (println (< (- f64-inf) (- f64-max))) 0)