scheme - 方案中的 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 之后只需要一个表达式,但发现了一个额外的部分。
解决方案
我现在在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)
推荐阅读
- java - 执行选择排序时线程“主”java.lang.NullPointerException 中的异常?
- python - Savefig 未正确保存显示的图
- php - 通过 json.stringify/ajax 传递多个参数不起作用
- javascript - Javascript 触摸事件在 Mobile Safari 中不起作用
- sql - SQL:是否可以在选择查询的列中返回表数据类型?
- sql - sql或excel映射
- python - 如何在 Beautiful Soup 中打印出表格行的所有单元格
- php - 获取将 BigQuery 的结果存储到 Google Cloud Storage 的作业的进度或状态
- firebase - 为小部件调用两个不同端点的最佳实践?
- r - r 如何使用 lpSolve 和限制选定的行