常见的lisp纬度和经度

epl*_*692 2 location common-lisp

我当前项目的基础是编写一些可以计算两点之间直接过程的代码.我没有在网上找到普通lisp的代码,所以我不得不翻译我现有的代码.我想我做得很好,但它仍然无法运行.任何帮助,将不胜感激.

我遇到了障碍,有什么想法吗?发生以下错误:

;Compiler warnings for "nav.lisp" :
;   In COURSE-CALC: Undefined function LAT1
;   In COURSE-CALC: Undefined function LAT1
;   In COURSE-CALC: Undefined function LAT2
Run Code Online (Sandbox Code Playgroud)

我不明白的是编译器认为变量是函数的原因.

这是我到目前为止:

 (defparameter *earth-radius* 6372.8)
 (defparameter *e* (exp 1))
 (defparameter *rad-conv* (/ pi 180))

 (defun km->miles (km)
    (* km .621371))
(defun miles->km (miles)
    (* miles 1.60934))

 (defun mph->mpm (mph)
    (/ mph 60))

(defun kph->kpm (kph)
    (/ kph 60))

(defun deg->rad (deg)
  (* deg *rad-conv*))

(defun haversine (x)
  (expt (sin (/ x 2)) 2))

(defun dist-rad (lat1 lng1 lat2 lng2)
  (let* ((hlat (haversine (- lat2 lat1)))
         (hlng (haversine (- lng2 lng1)))
         (root (sqrt (+ hlat (* (cos lat1) (cos lat2) hlng)))))
    (* 2 *earth-radius* (asin root))))

(defun dist-deg (lat1 lng1 lat2 lng2)
  (dist-rad (deg->rad lat1)
            (deg->rad lng1)
            (deg->rad lat2)
            (deg->rad lng2)))

;acos(sin(lat2)-sin(lat1)*cos(d)) / (sin(d)*cos(lat1))
(defun course-calc (lat1 lng1 lat2 lng2)
  (acos(/(*(- (sin(lat2)) (sin(lat1))) (cos(dist-rad lat1 lng1 lat2 lng2))) (* (sin(dist-rad lat1 lng1 lat2 lng2)) (cos(lat1))))))

(defun course (lat1 lng1 lat2 lng2)
  (if (< (sin (- lng1 lng2)) 0)
      (course-calc lat1 lng1 lat2 lng2) 
      (-(* 2 pi)(course-calc lat1 lng1 lat2 lng2))))
Run Code Online (Sandbox Code Playgroud)

jla*_*ahd 6

在定义中有太多括号course-calc.表达方式

(sin(lat2))
Run Code Online (Sandbox Code Playgroud)

调用函数lat2,然后调用sin任何lat2返回.你的lat2,不仅仅是一个功能,而是一个变量.你想说的是

(sin lat2)
Run Code Online (Sandbox Code Playgroud)

这同样适用于(cos(lat1))在该行的末尾.