获取方案中给定数字的总和

Get the Sum of given number in scheme

您好,我希望我的函数对数字求和,使得结果小于 10 (77 = 14=5)。不知道为什么它通过了基本案例

(define (reduct n)
  (if(< n 10) n
     (+(modulo n 10)(reduct (truncate(/ n 10))))))

您添加后忘记再次调用reduct。这是固定版本:

(define (reduct n)
  (if (< n 10)
      n
      (reduct (+ (modulo n 10) (reduct (quotient n 10))))))

请注意,内部 reduct 递归实际上是多余的,可以删除,留下:

(define (reduct n)
  (if (< n 10)
      n
      (reduct (+ (modulo n 10) (quotient n 10)))))

或者,如果您只想除法一次(并且也获得模数),您可以使用 R7RS floor/ 过程:

(define (reduct n)
  (if (< n 10)
      n
      (reduct (call-with-values (lambda () (floor/ n 10)) +))))

(顺便说一下,这是一个纯循环。Ruby 版本可能如下所示:

def reduct(n)
  n = n % 10 + n / 10 while n >= 10
  n
end

或(仅一除法)

def reduct(n)
  n = n.divmod(10).reduce(:+) while n >= 10
  n
end

除了它使用不同于 Scheme 版本的变异。)

然而,正如我的评论已经说过的,结果将始终与 (modulo n 9) 相同(除了 0 应该变成 9,所以 (+ (modulo (- n 1) 9) 1) 可能更正确),所以如果你我这样做是为了命理目的,或者不是要求你做的家庭作业 "hard way",就用它吧。