【发布时间】:2014-07-22 19:13:44
【问题描述】:
我正在使用一个接受参数的函数,如下所示:
(test-function '((gate 1) (gate 3) (gate 2)))
列表参数可以包含任意数量的元素,其中每个元素的形式为(gate x),其中x 可以是从0 到8 的整数。我有一个函数generate-gate-list,它可以生成随机长度的列表(最多 10 个)和内容,尽管它们始终是上述形式。
generate-gate-list 的示例输出:((gate 2))、(())、((gate 1) (gate 6)) 等
我希望能够将generate-gate-list 嵌套在test-function 中,这样我就可以测试一堆随机生成的列表,而无需预先生成它们。换句话说,我想要这样的东西:(test-function '(generate-gate-list)) 除非已经评估了 generate-gate-list。我尝试了某种宏语法引用和取消引用,但这会导致解析变量,例如(user/gate 3),它搞砸了测试功能。这是我的生成门列表代码:
(defn generate-gate-list []
(map symbol (repeatedly (rand-int 10) #(random-gate))))
random-gate 将门元素输出为字符串,即"(gate 3)" 或"(gate 2)"。
简而言之,我希望(test-function (something-here (generate-gate-list))) 或(test-function (modified-generate-gate-list)) 等同于(test-function '((gate 1) (gate 4) (gate 2))) 或generate-gate-list 的其他任意输出。谢谢!
【问题讨论】:
-
gate是一个函数吗?如果是这样,它有什么作用? -
gate是一个函数,但是我不能修改它。
标签: list macros clojure clojurescript