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