使用一个函数确定Scheme中的数字是否为负数

时间:2016-02-03 06:01:25

标签: scheme the-little-schemer

我一直在经历The Little Schemer,我开始对如何处理负数感到好奇。如何构建一个函数来确定一个数字是负数还是正数似乎是一个很好的挑战。

到目前为止,我有这个解决方案:

(define negative?
  (lambda (a)
    (cond
      ((zero? a) #f)
      (else (negativeHelper (sub1 a) (add1 a))))))

(define negativeHelper
  (lambda (a b)
    (cond
      ((zero? a) #f)
      ((zero? b) #t)
      (else (negativeHelper (sub1 a) (add1 b))))))

这看起来效果很好,但我的问题是,如果没有辅助函数可以正确negative?吗?

1 个答案:

答案 0 :(得分:3)

这可能不是您正在寻找的答案,但“帮助”功能绝对没有错。

您可能希望在negative?函数内嵌套

(define (negative? x)
  (define (aux a b)
    (cond ((zero? a) #f)
          ((zero? b) #t)
          (else (aux (sub1 a) (add1 b)))))
  (aux x x))

验证结果

(negative? 4)  ; => #f
(negative? -4) ; => #t
(negative? 0)  ; => #f