gpt4 book ai didi

macros - 我是在重新发明(方形)轮子吗?

转载 作者:行者123 更新时间:2023-12-01 17:30:00 27 4
gpt4 key购买 nike

我们应该知道,Clojure 的 map 可以应用于序列:

(map #(* %1 %1) [1 2 3])           ; (1)

..或者多个,通过这种方式:

(map vector [0 1] [2 1])           ; (2)
;=> ([0 2] [1 1])

现在我想获得与 (2) 相同的结果,但我将参数存储在序列中。换句话说,以下内容没有给出所需的结果:

(map vector [[0 1] [2 1]])         ; (3)
;=> ([[0 1]] [[2 1]])

所以我编写了这个简单的宏,其中 umap 代表“unsplice map”:

(defmacro umap [fun args-list]
"umap stands for unspliced map.
Let args-list be a list of args [a1 a2 ... an].
umap is the same of (map fun a1 a2 .. an)"
`(map ~fun ~@args-list))

显然它的作用就像一个魅力:

(umap vector [[0 1] [2 1]])        ; (4)
;=> ([0 2] [1 1])

所以这是我的问题:我是在重新发明轮子吗?还有其他方法可以实现与(4)相同的功能吗?

提前再见,谢谢

阿尔弗雷多

最佳答案

apply 解压参数列表末尾序列中的所有元素。

user> (apply map vector [[0 1] [2 1]])
([0 2] [1 1])

关于macros - 我是在重新发明(方形)轮子吗?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/5597873/

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