Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/loops/2.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Arrays Lisp变量未绑定_Arrays_Loops_Variables_Syntax Error_Lisp - Fatal编程技术网

Arrays Lisp变量未绑定

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

我试图创建一个函数,在输入7个值后,将它们放入一个数组中,然后从该数组中,将每个元素添加到另一个变量(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)

您使用的
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具有格式
(let((绑定表达式)…)body…
,因此在您的代码中,似乎
avg
应该是一个绑定列表,而body是
(reduce…)
,而不是您的建议?
(setq avg (/ (reduce #'+ testScore) 7))