我正在尝试编写一个宏,将“泛型”表达式转换为针对特定给定值计算的表达式。
让我们说我有一个未经评估的表格形式的载体,
'[(map? %)
(-> % :value string?)
(fn[x] (apply #(pos? %) (- x 2))]
我有一个gensymed值v,我希望在运行时“传递”到上面的表达式。因此,假设v将是编译时使用的符号的名称。我也希望断言转换后的表达式。基本上,对于上面的例子,我希望将上面的矢量表达式转换为下面的表格。请注意,我在前两个表达式中将值v传递给%,在第三个表达式中传递给x。下面的代码不正确,但只说明了我想要发生的事情。我不知道如何实际获得v以下任何表达式断言。
'[(assert (map? %)) ;; % is equal to v
(assert (-> % :value string?)) ;; % is equal to v
(assert (fn[x] (apply #(pos? %) (- x 2)))] ;; x is equal to v
作为一个指导性的例子,我希望能够做到:prepost-map的一部分?做一个明确的表达。任何帮助表示赞赏。
答案 0 :(得分:1)
请勿使用表达式执行此操作。相反,使用功能。然后很容易用你想要的任何值调用每个函数。