请耐心等待我,因为我还是新手。我的函数的目标(在本例中称为test)是对列表中的所有值进行平方并返回一个新列表。
例如,原始列表(1 2 3)
。
新列表应为(1 4 9)
这是我目前所拥有的,
(defun test (n)
(cond ((null n) nil)
(t (cons * (car n) (car n))
(test (cdr n)))))
然而,我不断收到错误,我不确定如何继续。 任何帮助将非常感激!
答案 0 :(得分:3)
在您的代码中存在两个问题:cond
的语法(相当于其他语言的else
为T
),以及缺少乘法运算符的事实。
这是一个有效的版本:
(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)))))