考虑以下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
(相同的结果)。
答案 0 :(得分:1)
如何实现
foobar
打印var
- 参数形式?
我不确定使用defn
功能是否可行。一旦你进入foobar
的主体,x
是一个函数值(不是一个符号),var
需要一个符号参数。您可以在调用函数之前解析var ,或者您可以使用允许您使用函数符号的宏:
(defmacro print-var [x]
`(println (var ~x)))
(print-var somefun)
;; #'user/somefun