再帰で困っています。ここでの私のプログラムは単純です。寄付のリストを消費し、リストの寄付のいずれかが 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 になるはずです。
プログラムの再帰部分で何が間違っていますか?