在此代码中,
user> (= (apply partial partial [+])
(partial partial +))
false
user>
之间有什么区别
(应用部分部分[+])
和
(部分偏+)
在此代码中,
user> (= (apply + [])
(+))
true
为什么返回值不是假的呢?
答案 0 :(得分:3)
Clojure
中没有关于功能平等的一般定义。有一个微不足道的身份,如果两个对象是相同的,他们应用相同。但是partial会创建一个新对象。例如:
user> (= (partial + 0) (partial + 0))
false
作为人类读者,我们可以看到它们是相同的功能(两者都与+
本身具有相同的功能)。但是Clojure语言中没有逻辑可以确定这种平等。
答案 1 :(得分:1)
由于
(apply + [])
;0
(+)
;0
......然后
(= (apply + []) (+))
;true
......还有@noisesmith's answer,
(= (partial +) +)
;true
...因为带有一个参数的partial
会返回它。
(partial +)
;#<core$_PLUS_ clojure.core$_PLUS_@5746e7cc>
+
;#<core$_PLUS_ clojure.core$_PLUS_@5746e7cc>
但partial
有几个参数构造一个匿名函数对象。只有当它们相同时,功能才相同 - 相同的对象。对partial
的两个这样的调用 - 即使使用相同的参数 - 产生两个不同的因此不相等的对象。
(partial partial +)
;#<core$partial$fn__4198 clojure.core$partial$fn__4198@23f4ebfe>
(partial partial +)
;#<core$partial$fn__4198 clojure.core$partial$fn__4198@7d41b16b>