计算列表中的数字球拍

时间:2017-09-02 23:39:03

标签: list racket

我有一个疑问,我正在使用Racket,我想计算一个列表的数字,但我不能。我尝试长度,但它不能按我的意愿工作,因为

(countDigits'(4 5 6 78))> 5

答案必须是5但是,我不知道如何,我有一个数字中的计数位数的代码,但我不知道如何在列表中这样做。 ¿我怎么能这样做?

2 个答案:

答案 0 :(得分:2)

这是一个可能的解决方案:

(define (countDigits lst)
  (apply +
         (map (compose string-length number->string)
              lst)))

说明:

  • 对于列表中的每个数字,我们将其转换为字符串
  • 然后,我们获取每个字符串的长度 - 这将告诉我们数字的位数
  • 最后,我们将所有长度加在一起

例如:

(countDigits '(4 5 6 78))
=> 5

答案 1 :(得分:0)

一个更天真的例子,不会让你的教授看起来两次:)

常规递归:

(define (countDigits list-of-digits)
  (cond [(empty? list-of-digits) 0]
        [else (+ 1 (countDigits (rest list-of-digits)))]))

尾递归:

(define (countDigits list-of-digits sum)
  (cond [(empty? list-of-digits) sum]
        [else (countDigits (rest list-of-digits) (+ 1 sum))]))