我正在编写一个函数来计算一个数字的除数。例如,4将有3个除数。我写了一个辅助函数如下:
(define (divisors-upto n k)
(cond((= k 0) 0)
((= n 0) 0)
((= k 1) 1)
((divides k n) (+ 1 (divisors-upto n (- k 1))))
(else (divisors-upto n (- k 1)))))
但在我的下一个功能中,我无法正常使用我的辅助功能。以下函数是否可用于计算除数?
(define ( divisors n ) ( divisors-upto n n ))
答案 0 :(得分:1)
该程序原则上 。只要程序divides
得到正确实施,它就可以正常运行。例如:
(divisors 10)
=> 4 ; 10, 5, 2 and 1 are divisors of 10
仅供参考,当你有一个辅助程序被一个或多个来自“主”程序,和的额外参数调用时,辅助程序永远不会在其他地方使用,这是一个好主意将帮助器声明为内部定义,例如:
(define (divisors n)
(define (divisors-upto n k)
(cond ((= k 0) 0)
((= n 0) 0)
((= k 1) 1)
((divides k n) (+ 1 (divisors-upto n (- k 1))))
(else (divisors-upto n (- k 1)))))
(divisors-upto n n))