4

わかりました、私の友人と私はこれを何度も試みましたが、彼らが私たちに答えを与えるだけであり、それは私たちが何も学ぶのを助けないので、家庭教師に行くことを拒否しました。

今のところ、2つのことのいずれかを実行するコードを取得できます。リストの合計を返すか、リスト自体を返します。リストと合計の最後の桁を返すように、コードを取得する必要があります。これまでに持っている2つのものがあります:

(define (add-checksum ls)
  (cond
    [(null? ls) 0]
    [else (+ (car ls) (add-checksum (cdr ls)))]))

(define (add-checksum-helper ls)
  (cond
    [(null? ls) 0]
    [else (cons (car ls) (add-checksum-helper (cdr ls)))]))

コードの最初のセットは加算を行い、合計を返します。.02番目はリストに加えて合計の最後の桁がどこに行くべきかを返しますか?誰かが私たちを助けることができますか?ありがとう!

編集:

(define (checksum ls)
  (append ls ((cdr (add-checksum ls)))))

(define (add-checksum ls)
  (cond
    [(null? ls) 0]
    [else (+ (car ls) (add-checksum (cdr ls)))]))

戻り値は次のとおりです。

(checksum '(4 5 6 7 8))
((4 5 6 7 8) . 30)

(4 5 6 7 8 0)の代わりに返す必要があり(.30)ます。を取得する方法がわかりません0(cdr 30)そうすると、リストはペアになりません。今何か提案はありますか?

4

2 に答える 2

1

手順は問題ありませんが、元のリストの手順を使用しadd-checksumても同じ結果を得ることができます。apply+

2番目の部分:チェックサムを最後の位置に保存する必要がありますか?元のリストを使用してcons呼び出した結果を-ingすることにより、最初の位置に格納する方がはるかに簡単です。add-checksum

最後に、数値の最後の桁を抽出する必要がある場合はn、正の整数を使用して次のように試してください。

(remainder n 10)

例えば:

(remainder 28 10)
> 8
于 2012-09-25T23:52:58.910 に答える
0

これを行う簡単な方法は、2つの別々の関数を最終関数のヘルパーとして使用することのようです。1つは合計を計算し、もう1つはその数値を最後に置きます。

割り当てでは、リストを1回だけトラバースし、途中で計算する必要がある場合があります。ただし、どちらの場合も漸近的な複雑さは同じであるため、これはやや偽の要件です。

于 2012-09-25T23:52:11.227 に答える