完全な解決策ではなく、いくつかの指針を示します。
まず第一に、これを行うには 2 つの異なる方法があります。再帰または高階関数 + 再帰です。この場合は、単純再帰の方が理解しやすいと思います。
したがって、リストを取り込んで処理を行う関数が必要になります。
(define count-odd
(lambda (ls) SOMETHING))
これは再帰的なので、リストを分割したいと思います
(define count-odd
(lambda (ls)
(let ((head (car ls)) (rest (cdr ls)))
SOMETHING)))
これには問題があります。これは空のリスト (例: (count-odd '())
) のエラーですが、それを修正する方法を説明します。ヒント、scheme の case 式を確認してください。空リストの確認と処理が簡単になります
今何かが私たちの再帰なので、次のようなものです:
(+ (if (is-odd head) 1 0) (Figure out how many odds are in rest))
それはあなたに何かを始めるための何かを与えるはずです。後で特定の質問がある場合は、お気軽にさらに質問を投稿してください。