Lisp变量未绑定

时间:2018-04-14 21:08:33

标签: arrays loops variables syntax-error lisp

我正在尝试创建一个函数,在输入7个值之后,将它们放入一个数组中,并从该数组中将每个元素添加到另一个变量(avg)。

我一直得到“变量AVG未绑定”。我不知道问题出在哪里。

(defun readTestScores()
    (let ((examScore 0)
          (avg 0)))
    (setf testScore (make-array 7))

    (format t "~&ENTER EXAM SCORE ~23T: ")
    (setq examScore(read))

    (format t "~&ENTER ALL TEST SCORES ~23T: ")
    (dotimes (i 7)
        (setf (aref testScore i) (read))
    )

    (dotimes (i 7)
        (setq avg (+ avg (aref testScore i)))
    )
)
(readTestScores)

2 个答案:

答案 0 :(得分:1)

您对let的使用不正确。它应该是:

(let ((examScore init-value)
      (avg 0))
    let-body)  

这样您就可以声明并初始化两个局部变量,其中examScore将初始化为init-value但是,您已声明examScore并将其初始值定义为(avg 0) ,这将是使用参数值0调用函数avg的结果。 avg函数可能未定义,因为这不是您的意图,因此是未绑定的消息。

答案 1 :(得分:0)

将testScore数组的总和分配给avg变量。

(let avg (reduce #'+ testScore))

编辑:

(setq avg (/ (reduce #'+ testScore) 7))