方案谐波功能

约翰·弗里德里希

有没有办法使用if语句而不是cond编写此函数?以下内容按预期工作,但我很好奇看到另一个选择。

(define (harmonic-numbers n)
    (cond ((= n 1) 1)
       ((> n 1) (+ (/ 1 n)
       (harmonic-numbers(- n 1))))))
奥斯卡·洛佩兹(Oscar Lopez)

当然,acond可以实现为一系列嵌套ifs。请注意,您的代码中存在潜在的错误,如果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] 删除。

编辑于
0

我来说两句

0条评论
登录后参与评论

相关文章