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

第一个错误:(x)是函数调用。好像没有named函数x,所以产生了你报的错误。改为使用x

第二个错误:+大概没有绑定到一个函数作为一个值。您需要通过使用function(或#',这是一个扩展为function表单的阅读器宏)从函数空间“获取”它。

第三个错误: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 回答