代码之家  ›  专栏  ›  技术社区  ›  User

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

  •  0
  • User  · 技术社区  · 8 年前

    假设我有一个 (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"))
    

    我宁愿不使用循环或任何高阶函数,除非它是map或apply。

    1 回复  |  直到 8 年前
        1
  •  2
  •   Sylwester    8 年前

    你正在寻找 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>)
    

    自从 列出清单 是一个函数,它将计算参数 (circle ...) 表达式,以便列表元素将指向同一对象,而不是单独创建的对象。如果你想要,你可以使用 map

    (map (λ (ignored) (circle 4 "solid" "white")) other-list)
    ; ==> (#<object1> #<object2> #<object3> #<object4>)