2017-06-18 48 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

相關問題