Vector 添加矢量元素(方案R5R)-请参见修订的代码部分

Vector 添加矢量元素(方案R5R)-请参见修订的代码部分,vector,scheme,Vector,Scheme,我想在方案中添加向量中的所有项 我相信我的问题在于我使用lambda的方式(非常不确定这个表达式的正确用法),将向量的长度分配给变量I,并将我试图从向量中的每个元素获得的值相加。不确定如何根据错误消息修复错误 我得到的错误只是: # 守则: (define (sum X) (define length (vector-length X)) ;potential problem area (lambda (length) (lambda (total)

我想在方案中添加向量中的所有项

我相信我的问题在于我使用lambda的方式(非常不确定这个表达式的正确用法),将向量的长度分配给变量I,并将我试图从向量中的每个元素获得的值相加。不确定如何根据错误消息修复错误

我得到的错误只是:

# 守则:

(define (sum X)
   (define length (vector-length X)) ;potential problem area
       (lambda (length)
       (lambda (total)
          (do (
              (i length (- i 1))
              (a (vector-ref X i)(+ a total)) ; potential problem area
              )
           ((zero? i) total)
            )
         )
         )
  )
修改代码(感谢用户479988)-我已经删除了lambdas,意识到我不需要它们。并将变量i定义为初始值0

现在错误是输出显示为0。

The code:

(define (sum X)
  (define length (vector-length X)) ;potential problem area
  (define total 0)
  (define i 0)
  (do (
       (i length (- i 1))
       (a (vector-ref X i)(+ a total)) ; potential problem area
       ((zero? i) total)
       )
    )
  )
你能给我一些建议吗 i) 错误 ii)算法的逻辑


谢谢

由于括号不匹配,缩进很难读取,因此我无法确定您的程序结构,但我认为您没有给lambda任何输入,因此,您可以返回使用lambda生成的函数,而不是返回总和,因为您没有对它们进行求值。

谢谢您的回复。我想澄清一下lambdas:第一个应该有向量的长度,而第二个是计算向量中元素的总和……赋值怎么没有完成,我如何改进代码?(很抱歉缩进,我会编辑它,但不确定括号如何不匹配,程序会编译。)如果你只有一个lambda,那么它只是一个过程。您需要为lambda提供参数。((lambda(x)(*x))4)将返回16,因为lambda将被馈送4作为x的参数。对于您的,如果您希望lambda使用长度,那么您通常需要类似((lambda(length)…)length)的东西,尽管您不需要使用接受长度的lambda,因为您已经定义了它,并且在调用do时它将在范围内。不用担心,谢谢您的详细说明。我已经在此基础上修改了代码,删除了lambda并初始化了计数器变量,现在问题是输出显示为0,即元素没有求和。知道为什么了吗?确保你正确地编写了do循环,而且我认为你会想使用set!要更改total的值。同样对于do循环,请确保迭代的边界正确。如果从向量的长度开始,向量引用将不起作用,因为向量位置从0开始。此外,您可能希望在do循环的主体中进行合计,这只是一种旁白,您的代码样式(布局),如图所示通常被认为是不好的形式。查看这本Lisp风格指南中的一些指针。