0

再帰で困っています。ここでの私のプログラムは単純です。寄付のリストを消費し、リストの寄付のいずれかが 2500 を超える場合は true を返します。

(define-struct donation (donor amount))

これは私のヘルパーです

;;helper
(define (bad-donations bad-d)
  (cond
    [(number? bad-d) (<= 50 bad-d)]
    [(donation? bad-d) (< 2500 (donation-amount bad-d))]))

(check-expect (bad-donations 51) true)
(check-expect (bad-donations 30) false )
(check-expect (bad-donations 50) true)


(define (any-bad-donations? lod)
  (cond
    [(empty? lod) true]
    [(cons? lod)
     (bad-donations (first lod))]
    [else
     (any-bad-donations? (bad-donations   (rest lod)))]))

次のようなことをするとうまくいきます

(any-bad-donations? (list (make-donation "Marry" 50000))

2500 の制限を超えているため、True を生成する必要があります。

でももしそうなら

(any-bad-donations? (list (make-donation "Marry" 50) (make-donation "Marry 50000)) 

残りは 2500 を超えているので、False になるはずがありません。したがって、True になるはずです。

プログラムの再帰部分で何が間違っていますか?

4

1 に答える 1