如何计算方案中数字列表中的除数数

How to calculate the number of divisors in a list for a number in scheme

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

函数调用示例 (numDivisors 10 '(1 20 30 2 5 40 10 60)) returns 4 来自 (1 2 5 10)

当前代码:

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

您的解决方案很接近。

首先要把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)))

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