Arrays Lisp变量未绑定
我试图创建一个函数,在输入7个值后,将它们放入一个数组中,然后从该数组中,将每个元素添加到另一个变量(avg) 我一直得到“变量平均值未绑定”。我看不出问题出在哪里Arrays Lisp变量未绑定,arrays,loops,variables,syntax-error,lisp,Arrays,Loops,Variables,Syntax Error,Lisp,我试图创建一个函数,在输入7个值后,将它们放入一个数组中,然后从该数组中,将每个元素添加到另一个变量(avg) 我一直得到“变量平均值未绑定”。我看不出问题出在哪里 (defun readTestScores() (let ((examScore 0) (avg 0))) (setf testScore (make-array 7)) (format t "~&ENTER EXAM SCORE ~23T: ") (setq examS
(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)
您使用的
let
不正确。应该是:
(let ((examScore init-value)
(avg 0))
let-body)
这样您就可以声明并初始化两个局部变量,其中
examcore
将被初始化为init value
但是,您已经声明了examcore
,并将其初始值定义为(avg 0)
,这将是使用值为0的参数调用函数avg
的结果。avg
功能可能未定义,因为这不是您的意图,因此未绑定消息 将testScore数组的总和分配给avg变量
(let avg (reduce #'+ testScore))
编辑:
这是什么方言?Common Lisp?是的,它是Common Lisp(据我所知,我刚刚开始)您的
let
在绑定变量后立即关闭。为了能够引用avg
,您将剩余的代码放在let
的主体中。该函数不返回任何内容。它应该做什么?它仍然未绑定:错误:变量AVG未绑定。1(继续)再次尝试评估平均值。2指定本次使用的值,而不是计算平均值。3指定要设置平均值的值。4(中止)返回到级别0。5返回顶部循环级别0。键入:b表示回溯,或键入:c表示继续。键入:错误报告模板的错误表单“”,或:?对于其他选项。不确定您使用的是什么lisp,但行(setq avg(+(avg)(aref testScore i))可能应该是:(setq avg(+avg(aref testScore i))),avg不是一个没有参数的函数,而是一个局部变量。同样的错误。。顺便说一句,更新了代码。在Clozure CL中运行Common Lisp。@chemoBrain现在您的let子句中有一个额外的括号(avg 0))****即使我尽可能将其拆分,它仍然是未绑定的:(let examcore 0)(let avg 0)不,它没有(let((绑定表达式)…)body…
,因此在您的代码中,似乎avg
应该是一个绑定列表,而body是(reduce…)
,而不是您的建议?
(setq avg (/ (reduce #'+ testScore) 7))