0

そのため、この関数は数値項目とリストの 3 つの要素を取ります。番号が何回もリストに項目を追加したいので、(pad-front 3 'a '(bc)) を実行すると、リストとして (aaabc) が返されます。アイテムをリストにコンスしたいと思います。それをn回実行するだけで、それを実行する方法がわかりません。

4

1 に答える 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 に答える