需要帮助将径向距离转换为lisp程序的反向波兰概念吗

需要帮助将径向距离转换为lisp程序的反向波兰概念吗,lisp,common-lisp,rpn,Lisp,Common Lisp,Rpn,极坐标的距离公式如下所示: 我试过这样做: (defun distant-formula (r1 r2 t1 t2) (setq d ( sqrt (*(-(+ (expt r1 2)(expt r2 2))(* 2 r1 r2)) (cos(- t1 t2)))))) 但是减法和乘法之间的附加括号改变了公式,但是如果没有正确的方法,我不太确定怎么做,如果没有任何帮助,我们将不胜感激 查看原始公式: sqrt(r1**2 + r2**2 - 2 * r1 *

极坐标的距离公式如下所示:

我试过这样做:

(defun distant-formula (r1 r2 t1 t2)
(setq d ( sqrt (*(-(+ (expt r1 2)(expt r2 2))(* 2 r1 r2))
                (cos(- t1 t2))))))

但是减法和乘法之间的附加括号改变了公式,但是如果没有正确的方法,我不太确定怎么做,如果没有任何帮助,我们将不胜感激

查看原始公式:

sqrt(r1**2 + r2**2 - 2 * r1 * r2 * cos(t1 - t2))
您希望从外到内工作:

(sqrt (+ (* r1 r1) (* r1 r1) (* -2 r1 r2 (cos (- t1 t2)))))

您需要注意运算符的优先级。转换的一种方法是对中缀符号中的所有隐式括号进行转换(因此
a*b+c
转到
((a*b)+c)
),然后重新排列,使运算符位于前面。

查看原始公式:

sqrt(r1**2 + r2**2 - 2 * r1 * r2 * cos(t1 - t2))
您希望从外到内工作:

(sqrt (+ (* r1 r1) (* r1 r1) (* -2 r1 r2 (cos (- t1 t2)))))

您需要注意运算符的优先级。转换的一种方法是对中缀表示法中的所有隐式括号进行转换(因此
a*b+c
转到
((a*b)+c)
),然后重新排列,使运算符位于前面。

代码中的变量D没有用处。不应将值分配给未定义的变量。Lisp还返回计算值。这使得这样的任务特别无用

你可以这样写公式:

(defun distant-formula (r1 r2 t1 t2)
  (+ (expt r1 2)
     (expt r2 2)
     (* -2 r1 r2 (cos (- t1 t2)))))

请注意,代码在三行上的布局比只使用一行更容易理解公式。使用编辑器的自动缩进帮助布局。

代码中的变量D没有用处。不应将值分配给未定义的变量。Lisp还返回计算值。这使得这样的任务特别无用

你可以这样写公式:

(defun distant-formula (r1 r2 t1 t2)
  (+ (expt r1 2)
     (expt r2 2)
     (* -2 r1 r2 (cos (- t1 t2)))))

请注意,代码在三行上的布局比只使用一行更容易理解公式。使用编辑器的自动缩进来帮助布局。

@Gabe:我现在就这么做了。谢谢你的建议。@Gabe:我现在就这么做了。谢谢你的建议。变量D在哪里定义?变量D在哪里定义?