【问题标题】:Luhn algorithm in scheme方案中的 Luhn 算法
【发布时间】:2019-07-26 03:15:11
【问题描述】:

当我的列表中有一个大于 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 之后只需要一个表达式,但发现了一个额外的部分。

【问题讨论】:

  • 这看起来不像 Scheme 代码。你在看什么书?

标签: scheme racket


【解决方案1】:

我现在在 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)

【讨论】:

  • (fold + 0 (unfold zero? (cut remainder <> 10) (cut quotient <> 10) 1337)) ; ==> 14
  • @Sylwester 谢谢。我忘记指定 mit-scheme。
  • 我的单线也适用于 mit-scheme,因为 MIT 附带 SRFI-1,所以只需要 SRFI-26。
猜你喜欢
  • 2013-08-10
  • 1970-01-01
  • 2015-01-01
  • 2021-05-16
  • 2023-04-05
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多