Lisp:在列表中平移所有值

时间:2017-06-18 19:40:20

标签: list lisp elements

请耐心等待我,因为我还是新手。我的函数的目标(在本例中称为test)是对列表中的所有值进行平方并返回一个新列表。

例如,原始列表(1 2 3)。 新列表应为(1 4 9)

这是我目前所拥有的,

(defun test (n)
  (cond ((null n) nil)
        (t (cons * (car n) (car n))
           (test (cdr n)))))

然而,我不断收到错误,我不确定如何继续。 任何帮助将非常感激!

1 个答案:

答案 0 :(得分:3)

在您的代码中存在两个问题:cond的语法(相当于其他语言的elseT),以及缺少乘法运算符的事实。

这是一个有效的版本:

(defun test (n)
  (cond ((null n) nil)
        (t (cons (* (car n) (car n))
                 (test (cdr n))))))

此外,请注意,当有多个条件时,cond最常用,而if用于单个条件:

(defun test (n)
  (if (null n)
      nil
      (cons (* (car n) (car n))
            (test (cdr n)))))