0

二乗和を計算する Common Lisp 関数を実装しようとしています。私はこれを持っています:

[1]> (defun sum-of-squares (x)
           (reduce +
                   (mapcar
                       #'(lambda (x) (* x x))
                       (x)
            )))

REPL は問題なく受け入れますが、使用しようとすると、次のようになります。

[2]> (sum-of-squares '(1 2 3))

私はこれを得る:

*** - EVAL: undefined function X
The following restarts are available:
USE-VALUE      :R1      Input a value to be used instead of (FDEFINITION 'X).
RETRY          :R2      Retry
STORE-VALUE    :R3      Input a new value for (FDEFINITION 'X).
ABORT          :R4      Abort main loop

xin mapcar は関数として解釈されていると思います。私は何を間違っていますか?

4

2 に答える 2

2
(defun sum-of-squares (x)
  (reduce +                         ; <- 2nd mistake
          (mapcar
           #'(lambda (x) (* x x))
           (x))))                   ; <- 1st mistake

1 つ目の間違い:(x)関数の呼び出しです。という名前の関数がないように見えるxため、報告したエラーが生成されます。x代わりに使用してください。

2 番目の間違い:+おそらく値として関数にバインドされていません。function(または#'functionフォームに展開されるリーダー マクロ)を使用して、関数空間から "フェッチ" する必要があります。

3 番目の間違い:xはリストに適した名前ではなく、内部関数で別のものに使用すると混乱します。

(defun sum-of-squares (list)
  (reduce #'+
          (mapcar #'(lambda (element)
                      (* element element))
                  list)))
于 2013-05-11T10:25:29.640 に答える
1

関数に SUM-OF-SQUARES という名前を付けましたが、SS と呼んでいます。

于 2013-05-11T06:42:25.403 に答える