2017-06-18 6 views
1

私はまだかなり新しいです。私の関数(この場合testと呼ばれます)の目的は、リスト内のすべての値を平方和し、新しいリストを返すことです。Lisp:リスト内のすべての値を二分する

たとえば、元のリスト(1 2 3)。 新しいリストは、これは私がこれまで持っているもの現在(1 4 9)

する必要があり、

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

は、しかし、私はエラーを取得しておくと、続行する方法へと全くわからないです。 ご迷惑をおかけして申し訳ございません。

+0

これが行われます'(mapcar(lambda(x)(* xx))yourlist)'または '(mapcar# '* yourlist yourlist)'で置き換えます。 Lispプログラミングにおける最も重要なことは、既存の言語とそのライブラリ、および 'mapcar'のようなアプリケータで上位関数を使うようなイディオムを活用することです。 – Kaz

答えて

3

コードには、condの構文(他の言語のelseに相当)と、乗算演算子がないという2つの問題があります。

これは作業バージョンである:ifは、単一条件のために使用される複数の条件が存在する場合condが最も一般的に使用されることに注意し、また

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

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

ああ、私はtを忘れてしまった!とにかく、乗算演算子も含めて忘れてしまったので、私はそれを修正します。助けてくれてありがとう! –

+0

もう一度お悔やみして申し訳ありませんが、この中からテストと呼ばれる別の機能を呼び出すのに問題があります。 –

+0

私はあなたのコードとあなたが得ている正確なエラーを示す新しい質問を投稿するべきだと思います。 – Renzo

関連する問題