В схеме как добавить элемент в список определенное количество раз?

Таким образом, функция будет состоять из 3 элементов: числового элемента и списка. Я хочу добавить элемент в список, сколько раз число говорит, так что, если бы я сделал (pad-front 3 'a '(b c)), он вернул бы (a a a b c) в качестве списка. Я думаю, что я хотел бы добавить элемент в список и просто сделать это n раз, я просто не уверен, как заставить его сделать это.

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 это ноль). На этом этапе мы просто добавляем хвостовой список в конец, и все готово!

Другие вопросы по тегам