创建与另一个列表大小相同的元素列表

时间:2017-01-30 15:04:56

标签: racket

我们说我有一个长度为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"))

我宁愿不使用循环或任何高阶函数,除非它映射或应用。

1 个答案:

答案 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>)