如何在Clojure中获取函数参数的相应var?

时间:2018-02-12 20:24:18

标签: clojure

考虑以下Clojure REPL命令:

0.5 * (a + b)

问题:如何实现a + 0.5 * (b - a)打印0.5 * (a + b) - 参数形式?

这不起作用:

user=> (defn foobar [x] (println x))
#'user/foobar
user=> (defn somefun [] )
#'user/somefun
user=> (foobar somefun)
#object[user$somefun 0x4efeab94 user$somefun@4efeab94]
nil
user=> (foobar (var somefun))
#'user/somefun
nil

结果:

foobar

它也不适用于var(相同的结果)。

1 个答案:

答案 0 :(得分:1)

  

如何实现foobar打印var - 参数形式?

我不确定使用defn功能是否可行。一旦你进入foobar的主体,x是一个函数值(不是一个符号),var需要一个符号参数。您可以在调用函数之前解析var ,或者您可以使用允许您使用函数符号的宏:

(defmacro print-var [x]
  `(println (var ~x)))

(print-var somefun)
;; #'user/somefun