我们说我有一个长度为4的(list a b c d)
。
我也有一个对象,比如(circle 4 "solid" "white")
。
我想将该对象的列表设置为第一个列表的长度。
最终结果将是:
(list (circle 4 "solid" "white") (circle 4 "solid" "white") (circle 4 "solid" "white") (circle 4 "solid" "white"))
我宁愿不使用循环或任何高阶函数,除非它映射或应用。
答案 0 :(得分: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>)