【发布时间】:2019-09-06 22:37:26
【问题描述】:
我整理了一个高阶函数,在某些情况下调用函数参数,但根据函数的不同,它似乎有不同的效果。我能够通过一个简单的函数重现相同的行为:
(defn foo [f a b] (f a b))
对于“正常”功能,它可以正常工作:
user=> (foo list 2 3)
(2 3)
user=> (foo cons 1 '(2 3))
(1 2 3)
user=> (foo println 2 3)
2 3
nil
但是对于操作符来说,它没有,它似乎只是返回了最后一个元素:
user=> (foo '+ 2 3)
3
user=> (foo '* 2 3)
3
user=> (foo '- 2 3)
3
为什么会这样?
【问题讨论】:
-
作为一个有趣的事实,为什么“它似乎只是返回最后一个元素”,请参阅here(给定的第二个参数是默认值,它是默认值)。我不知道您为什么需要这样做,但它可以让您执行类似
('+ {'+ 2})的操作返回 2。 -
@Carcigenicate 当然,出于同样的原因,您希望对关键字执行此操作。有时,无论出于何种原因(例如,实现解释器时的词法环境),您可能只是有一个以符号为键的映射,并且希望能够使用符号作为函数来查找自己并不疯狂。
-
@amalloy 是的。我只是认为我从来没有需要进行这样的查找。
标签: clojure