gpt4 book ai didi

clojure - 将列表和元素连接到向量中的优雅方式

转载 作者:行者123 更新时间:2023-12-02 06:46:22 27 4
gpt4 key购买 nike

有没有更简洁和/或优雅的方式来表达 let 中的最后一行。

(let [a ... ; int
b ... ; int
xs ... ; list
y ... ; int
z ... ; int
]
(into [a b] cat [xs [y z]]))

结果应该是一个向量。对于它完成的简单任务,上面的表达式看起来相当复杂。在 Python 中,这将是[a, b] + xs + [y,z] 更好地捕捉了两个追加操作的相似性。可以捕获相似性的更长的变体是

(into [] cat [[a b] xs [y z]])

我尝试使用 concat 似乎很冗长,但也许更具可读性?

(vec (concat [a b] xs [y z]))

最佳答案

into/cat 绝对是最受欢迎的方法。如果您极度追求简洁,您可以改用 syntax-quote,这是构建列表的强大工具:

`[~a ~b ~@xs ~y ~z]

它非常有表现力并且可以工作,但它肯定会更慢:它主要设计用于在编译时使用少量输入。不过,开销很小;您可以通过引用它来查看这将扩展到什么代码:

user=> '`[~a ~b ~@xs ~y ~z]
(apply vector
(seq (concat (list a)
(list b)
xs
(list y)
(list z))))

我编辑了输出以使其更具可读性,删除了 clojure.core/ 前缀并添加了空格,但从语义上讲这是 REPL 打印的内容。

关于clojure - 将列表和元素连接到向量中的优雅方式,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/60196344/

27 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com