2017-06-18 62 views
1

请耐心等待,因为我对lisp还是比较陌生的。我的函数(在这种情况下称为测试)的目标是将列表中的所有值平方并返回一个新列表。例如,原始列表(1 2 3)。 新的名单应该是(1 4 9)Lisp:将列表中的所有值平方

这是目前我有什么到目前为止,

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

但是我不断收到一个错误,我为如何进行相当不确定。 任何帮助将不胜感激!

+0

这样做('mapcar(lambda(x)(* xx))yourlist)',或'(mapcar#'* yourlistlistlist')'。 Lisp编程中最重要的是利用现有的语言及其库,以及像使用mapcar这样的应用程序来使用高阶函数的习惯用法。 – Kaz

回答

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))))) 
+0

ahhh我忘了t!并且非常感谢我忘记了包含乘法运算符,我会修改它。谢谢您的帮助! –

+0

对不起,再次打扰你,但即时通讯调用一个单独的函数,在这个称为测试内的麻烦。当我将它叫做 –

+0

时,我总是收到一个函数undefined错误我想你应该发布一个显示你的代码的新问题,以及你得到的确切错误。 – Renzo

相关问题