List Lisp:对列表中的所有值进行平方运算
请容忍我,因为我对lisp还是相当陌生的。我的函数(在本例中称为test)的目标是将列表中的所有值平方,然后返回一个新列表 例如,原始列表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))))) 然而,我不断地得到一个错误,我很不确定如何继续。 任何帮助都将不胜感激 在您的代码中有两
(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
)之类的习惯用法。