Boa tarde!
Quanto tempo que não acesso e nem posto nada nesse fórum que tanto me ajudou!
Como sempre estou aprendendo uma linguagem nova, vou voltar a solicitar ajuda…
Alguém poderia me ajudar com o paradigma funcional? Fiz um código para uma funcionalidade, mas não sei se está utilizando os conceitos e APIs da linguagem corretamente:
(defn calculate-distance
"Calcula distância entre duas coordenadas geográficas"
([] nil)
([x] nil)
([source to]
(def raio 6372.795477598)
(let [convert-to-rad (fn[value] (/ (* value Math/PI) 180))
delta-latitude (fn [ltdSource ltdTo] (convert-to-rad (- ltdTo ltdSource)))
delta-longitude (fn [lgtSource lgtTo] (convert-to-rad (- lgtTo lgtSource)))
a (fn [delta-lgt delta-ltd source-ltd to-ltd] (+ (Math/pow (Math/sin (/ delta-ltd 2)) 2)
(* (Math/cos source-ltd) (Math/cos to-ltd) (Math/sin (/ delta-lgt 2)) (Math/sin (/ delta-lgt 2)) ))
)
b (fn [value] (* 2 (Math/atan2 (Math/sqrt value) (Math/sqrt (- 1 value)))))
c (fn [value] (* (* raio value) 1000))
]
(if (or (not (and (map? source) (map? to)))
(not (and (and (and (contains? to :to/lgt) (contains? to :to/ltd)) (contains? source :source/lgt)) (contains? source :source/ltd)))
)
(throw (new Exception "Invalid Parameters"))
;faz o cálculo
(c (b (a (delta-longitude (val (find source :source/lgt)) (val (find to :to/lgt)))
(delta-latitude (val (find source :source/ltd)) (val (find to :to/ltd)))
(convert-to-rad (val (find source :source/ltd)))
(convert-to-rad (val (find to :to/ltd))))))
)
)
)
)
