有没有办法使用if语句而不是cond编写此函数?以下内容按预期工作,但我很好奇看到另一个选择。
(define (harmonic-numbers n)
(cond ((= n 1) 1)
((> n 1) (+ (/ 1 n)
(harmonic-numbers(- n 1))))))
当然,acond
可以实现为一系列嵌套if
s。请注意,您的代码中存在潜在的错误,如果n
小于会发生什么1
?
(define (harmonic-numbers n)
(if (= n 1)
1
(if (> n 1)
(+ (/ 1 n) (harmonic-numbers (- n 1)))
(error 'undefined))))
根据所使用的Scheme解释器的不同,该if
表格可能会要求您始终为所有条件提供一个“其他”部分(这就是为什么如果n
小于,我会提示错误1
)。其他口译员没有那么严格,很乐意允许您编写单臂条件:
(define (harmonic-numbers n)
(if (= n 1)
1
(if (> n 1)
(+ (/ 1 n) (harmonic-numbers (- n 1))))))
编辑
现在我们已经确定了如果n
小于1会发生什么,我们可以使用编写一个更简单的版本if
:
(define (harmonic-numbers n)
(if (<= n 1)
1
(+ (/ 1 n) (harmonic-numbers (- n 1)))))
这是使用的等效版本cond
:
(define (harmonic-numbers n)
(cond ((<= n 1) 1)
(else (+ (/ 1 n) (harmonic-numbers (- n 1))))))
本文收集自互联网,转载请注明来源。
如有侵权,请联系[email protected] 删除。
我来说两句