そのため、この関数は数値項目とリストの 3 つの要素を取ります。番号が何回もリストに項目を追加したいので、(pad-front 3 'a '(bc)) を実行すると、リストとして (aaabc) が返されます。アイテムをリストにコンスしたいと思います。それをn回実行するだけで、それを実行する方法がわかりません。
質問する
1431 次
1 に答える
1
Racket では、組み込みのプロシージャを使用して簡単に行うことができます。
(define (pad-front n x lst)
(append ; append together both lists
(build-list n (const x)) ; create a list with n repetitions of x
lst)) ; the list at the tail
(pad-front 3 'a '(b c))
=> '(a a a b c)
...しかし、ゼロから実装したいのでしょう。考え方は上記と同じですが、基本的な手順のみを使用します。詳細を理解できるように、いくつかのヒントを提供します。空欄を埋める:
(define (pad-front n x lst)
(if <???> ; base case: if `n` is zero
<???> ; then return the tail list
(cons <???> ; else cons the element to be repeated
(pad-front ; and advance the recursion
<???> ; subtract one unit from `n`
x lst)))) ; pass along `x` and `lst`
トリックは、x
繰り返しが不要になるまで (つまり、n
ゼロになるまで) 要素を追加し続けることに注意してください。その時点で、末尾のリストを最後に貼り付けるだけで完了です。
于 2013-09-26T21:34:54.713 に答える