List Lisp:对列表中的所有值进行平方运算

List Lisp:对列表中的所有值进行平方运算,list,lisp,elements,List,Lisp,Elements,请容忍我,因为我对lisp还是相当陌生的。我的函数(在本例中称为test)的目标是将列表中的所有值平方,然后返回一个新列表 例如,原始列表(1 2 3)。 新列表应为(14 9) 这就是我目前所拥有的 (defun test (n) (cond ((null n) nil) (t (cons * (car n) (car n)) (test (cdr n))))) 然而,我不断地得到一个错误,我很不确定如何继续。 任何帮助都将不胜感激 在您的代码中有两

请容忍我,因为我对lisp还是相当陌生的。我的函数(在本例中称为test)的目标是将列表中的所有值平方,然后返回一个新列表

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

这就是我目前所拥有的

(defun test (n)
  (cond ((null n) nil)
        (t (cons * (car n) (car n))
           (test (cdr n)))))
然而,我不断地得到一个错误,我很不确定如何继续。
任何帮助都将不胜感激

在您的代码中有两个问题:
cond
的语法(与其他语言的
else
等价的是
T
),以及缺少乘法运算符这一事实

这是一个工作版本:

(defun test (n)
  (cond ((null n) nil)
        (t (cons (* (car n) (car n))
                 (test (cdr n))))))
此外,请注意,
cond
在存在多个条件时最常用,而
如果
用于单个条件:

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

啊,我忘了t!非常感谢,我忘了也包括乘法运算符,我将修改它。谢谢你的帮助!很抱歉再次打扰您,但是我很难从这个名为test的函数中调用单独的函数。当我调用它时,我一直收到一个函数未定义的错误。我想你应该发布一个新问题,显示你的代码和你得到的确切错误。这是通过
(mapcar(lambda(x)(*x))yourlist)
,或
(mapcar#'*yourlist yourlist)
完成的。Lisp编程中最重要的事情是利用现有的语言及其库,以及诸如使用高阶函数和应用程序(如
mapcar
)之类的习惯用法。