在列表球拍中计数数字

问题描述:

我有疑问,我使用的是球拍,我想列出一个列表的数字,但我不能。我试着用长,但我想,因为在列表球拍中计数数字

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

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

+2

'(define count-digits(compose1 string-length string-a podd *(咖喱地图〜a)))' –

+0

真的很有用,我的想法完全错了,它的工作,谢谢 –

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

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

说明:

  • 对于列表中,我们把它转换为字符串
  • 然后,我们获得每个字符串的长度每一个数字 - 那会告诉我们的位数
  • 最后我们把所有长度加在一起

例如:

(countDigits '(4 5 6 78)) 
=> 5 
+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))])) 
+0

它抛出我出错:+:违反合同 预期:数量? 给出:# 参数位置:2nd 其他参数...: –

+0

哈哈......我的不好。如果你看,在我的常规递归函数中,我有一个错位的逗号,我只是直接输入到SO。语法应该是现在 –