この問題の解決策は、よく知られたパターンに従います。ヒントをいくつかあげますので、自分なりに答えを見つけてみるのも楽しいです。
(define (SumNeighbors lst)
(if <???> ; if there's only one element left
<???> ; we're done, return the empty list
(cons ; otherwise call `cons`
(+ <???> <???>) ; add first and second elements
(SumNeighbors <???>)))) ; and advance recursion
次の点に注意してください。
- あなたのソリューションには基本的なケースが欠けています - トラバースしているリストに 1 つの要素しか残っていない場合はどうなりますか? 再帰を終了する時が来ました!また、出力としてリストを作成しているため、返される値は何でしょうか?
- 通常
cons
、 ではなく、出力リストを作成するために使用しappend
ます。それがリストを作成する自然な方法です
- ソリューション テンプレートの範囲外にあるこの手順の部分は、(通常の場合のように) リストが空になったときではなく、リストに 1 つの要素が残ったときに停止するという事実です。
入力リストを反復処理し、出力としてリストを返す多くのプロシージャが同じソリューション テンプレートに従っていることがわかります。これがどのように、なぜ機能するかを学ぶことは非常に重要です。これは、他の同様の問題に対するソリューションを記述するための基礎となります。