(defun helper-2 (list)
(if (null (first (rest list)))
0)
(+ (distance ((car list) (first (rest list))))
(helper-2 (rest list))))
我是 lisp 的新手,我正在编写一个程序来计算任何多边形的周长,输入遵循顺时针顺序。我的逻辑是我使用辅助方法来计算彼此相邻的两个点的长度并求和。递归完成后,我将单独调用以计算从起点到终点的长度并将所有内容相加。我已经完成了需要 2 个点并返回长度的距离方法。
(distance '(2 0) '(4 0)) ;this will output 2
helper-2 逻辑: 假设我们有 3 个点 a (2 0) b (3 3) c (4 0) 这种方法有望求和 ab 和 bc 之间的距离。但是,我不断收到“(车头)应该是一个 lambda 表达式”错误。谁能帮忙?谢谢。或者谁能给我一个更好的方法来计算多边形的周长?
(defun square (n) (* n n))
(defun distance (a b)
(let ((h (- (second b) (second a)))
(w (- (first b) (first a))))
(sqrt (+ (square h) (square w)))))
最佳答案
您的 helper-2
函数有两处错误:
- 您应该使用双臂
if
,这样它就可以用作 if/else。 (car list)
两边的括号太多。
这是固定版本:
(defun helper-2 (list)
(if (null (first (rest list)))
0
(+ (distance (car list) (first (rest list)))
(helper-2 (rest list)))))
关于lambda - 为什么我的 lisp 代码给我...应该是一个 lambda 表达式?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/26941771/