首页 > 解决方案 > 如何计算方案中数字的列表中除数的数量

问题描述

如何创建一个名为 numDivisors 的函数。该函数定义为 (numDivisors n listOfNums),它计算列表中除 n 且没有余数的整数个数。

函数调用示例 (numDivisors 10 '(1 20 30 2 5 40 10 60)) 从 (1 2 5 10) 返回 4

当前代码:

(define numDivisors
  (lambda (x lst)
    (cond
      ((null? lst) 0)
      ((eq? (remainder 10 (car lst)) 0) (+ 1 (numDivisors x (cdr lst))))
      )
    )
  ) 

标签: schemeracketcountingfactorsfactorization

解决方案


您的解决方案很接近。

首先,您需要更改eq?=测试数字是否相等,然后更改(remainder 10 ...)(remainder x ...),以便 10 不再硬连线到您的解决方案中。

其次,你需要在你的后面添加第三个子句来cond处理余数不为0的情况。我让你考虑一下;鉴于您到目前为止所做的事情,我相信您会弄清楚的。

并且您应该将这三个右括号堆叠在最后一行代码的末尾,而不是将它们单独放在行上。

一个有经验的 Scheme 程序员可能会写:

(define (numDivisors n xs)
  (define (divides? d n) (zero? (modulo n d)))
  (length (filter (lambda (d) (divides? d n)) xs)))

如果这根本没有意义,您可能应该等待几周。我相信你的导师很快就会让你编写这样的代码。


推荐阅读