首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >为什么我的lisp代码给我的...should是一个lambda表达式?

为什么我的lisp代码给我的...should是一个lambda表达式?
EN

Stack Overflow用户
提问于 2014-11-15 02:15:04
回答 1查看 1.7K关注 0票数 1
代码语言:javascript
复制
(defun helper-2 (list) 
  (if (null (first (rest list)))
      0)
  (+ (distance ((car list) (first (rest list)))) 
     (helper-2 (rest list))))

我是lisp的新手,我正在编写一个程序来计算任意多边形的周长,并按顺时针顺序输入。我的逻辑是,我使用一种辅助方法来计算彼此相邻两个点的长度,然后进行和。在完成递归之后,我将执行一个单独的调用来计算从起点到终点的长度,并对所有的内容进行汇总。我已经完成了距离法,它取2分,并返回长度。

代码语言:javascript
复制
(distance '(2 0) '(4 0)) ;this will output 2

助手-2逻辑:假设我们有3点a (2 0) b (3 3) c (4 0),这个方法可以用来总结ab和bc之间的距离。然而,我不断得到“(车头)应该是一个lambda表达式”错误。有人能帮忙吗?谢谢。或者有人能给我一个更好的方法来计算多边形的周长?

代码语言:javascript
复制
(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)))))
EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2014-11-15 02:50:35

您的helper-2函数有两处错误:

  1. 您应该使用一个双武装的if,这样它就可以作为if/else运行。
  2. (car list)的括号太多了。

以下是固定版本:

代码语言:javascript
复制
(defun helper-2 (list) 
  (if (null (first (rest list)))
      0
      (+ (distance (car list) (first (rest list))) 
         (helper-2 (rest list)))))
票数 4
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/26941771

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档