コードを別の形式にすると、何が起こっているかを簡単に確認できる場合があります。
(define (checksum-2 ls)
(if (null? ls)
0
(let ([n 0])
(+ (+ n 1))
(* n (car ls))
(checksum-2 (cdr ls)))))
フォーム内letでは、式は順番に評価されますが、それらの結果を使用していません (最後のものを除く)。加算と乗算の結果は単に破棄されます。
この場合、アキュムレータを使用して再帰呼び出しを実行する新しいヘルパー関数を定義する必要があります。これは宿題か学習課題だと思いますので、完全な答えを出すつもりはありません。
UPDATE : あなたがする必要があるかもしれないことの種類のデモンストレーションとして、ここに から1までの整数を合計するためのSchemeの同様の関数がありますn:
(define (sum n)
(define (sum-helper n a)
(if (<= n 0)
a
(sum-helper (- n 1) (+ a n))))
(sum-helper n 0))
同様のフレームワークを使用して関数を実装できるはずですchecksum-2。