1

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?、ヘルパー関数なしで正しくできるかどうかです。

4

1 に答える 1

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
于 2016-02-03T17:36:23.860 に答える