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

Determining if a number is negative in Scheme with one function

我一直在学习小阴谋家,我开始对如何处理负数感到好奇。弄清楚如何构建一个函数来确定数字是负数还是正数似乎是一个很好的挑战。

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

(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?

这可能不是您要找的答案,但 "helper" 函数绝对没有问题。

您可能喜欢在 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