2017-01-30 3 views
0

Допустим, у меня есть (list a b c d), который имеет длину 4Создать список идентичных элементов размера другого списка

У меня также есть объект, скажем (circle 4 "solid" "white").

Я хочу составить список этого объекта, чтобы длина первого списка.

Так конечный результат будет:

(list (circle 4 "solid" "white") (circle 4 "solid" "white") (circle 4 "solid" "white") (circle 4 "solid" "white")) 

я, а не использовать цикл или какой-либо функции высшего порядка, если это не карта или применить.

ответ

2

Вы ищете make-list

(make-list 4 'some-value) 
; ==> (some-value some-value some-value some-value) 

Так что, если вы хотите, как много элементов, как какой-то другой список вам просто нужно знать length

(make-list (length other-list) (circle 4 "solid" "white")) 
; ==> (#<object1> #<object1> #<object1> #<object1>) 

Поскольку make-list функция будет оценивать аргумент (circle ...), прежде чем он сделает список, чтобы ваши элементы списка указывали на один и тот же объект, а не на индивидуально созданные объекты. Если вы хотите, чтобы вы могли использовать map

(map (λ (ignored) (circle 4 "solid" "white")) other-list) 
; ==> (#<object1> #<object2> #<object3> #<object4>) 
Смежные вопросы