如何计算方案中数字列表中的除数数
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)))
如果这完全没有意义,您可能应该等待几周。我相信您的导师很快就会让您编写那样的代码。
如何创建名为 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)))
如果这完全没有意义,您可能应该等待几周。我相信您的导师很快就会让您编写那样的代码。