首页 > 解决方案 > 方案中的 Luhn 算法

问题描述

当我的列表中有一个大于 9 的数字时,我想分隔这些数字并将它们添加到运行总和中。

我拥有的代码在我的sum-list定义中给了我和错误。

(define sum-list (lst) 
  (if (null lst)
      0
      (if (>9 car lst?) 
          (cons ((mod (car lst) 10)) + (* (remainder (/car lst 10) 10))))
      (if (>9 cdr lst?)
          (cons ((mod (cdr lst)10)) + (* (remainder (/cdr lst 10) 10)))) 
  (+ (car lst) (sum-list (cdr lst)))))

我收到一个错误“在名称 sum-list 之后只需要一个表达式,但发现了一个额外的部分。

标签: schemeracket

解决方案


我现在在mit-scheme中写了这个。我将问题拆分为 2 个子问题——将数字转换为数字列表,然后将结果列表中的数字相加。

(define n->l
  (lambda (n return)
    ((lambda (s) (s s n return))
     (lambda (s n col)
       (if (zero? n)
           (col '())
           (s s
              (quotient n 10)
              (lambda (rest)
                (col (cons (remainder n 10) rest)))))))))

(define sum-digits
  (lambda (n)
    (n->l n (lambda (l) (fold-left + 0 l)))))

(sum-digits 100)
(sum-digits 123)

推荐阅读