在这段代码中,
user> (= (apply partial partial [+]) (partial partial +)) false user>
有什么区别
(应用部分局部[])
和
(部分偏)
?
user> (= (apply + []) (+)) true
为什么返回值不是假的呢?
Clojure 中没有函数相等的一般定义 . 有一个微不足道的身份,如果两个对象是相同的,他们应用相同 . 但是partial会创建一个新对象 . 例如:
Clojure
user> (= (partial + 0) (partial + 0)) false
作为人类读者,我们可以看到它们是相同的功能(两者都是与 + 本身相同的功能) . 但是Clojure语言中没有逻辑可以确定这种平等 .
+
以来
(apply + []) ;0 (+) ;0
... 然后
(= (apply + []) (+)) ;true
......还有@noisesmith's answer,
(= (partial +) +) ;true
...因为带有一个参数的 partial 会返回它 .
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>
2 回答
Clojure
中没有函数相等的一般定义 . 有一个微不足道的身份,如果两个对象是相同的,他们应用相同 . 但是partial会创建一个新对象 . 例如:作为人类读者,我们可以看到它们是相同的功能(两者都是与
+
本身相同的功能) . 但是Clojure语言中没有逻辑可以确定这种平等 .以来
... 然后
......还有@noisesmith's answer,
...因为带有一个参数的
partial
会返回它 .但
partial
有几个参数构造一个匿名函数对象 . 只有当它们相同时,功能才相同 - 相同的对象 . 对partial
的两次调用 - 即使是相同的参数 - 产生两个不同的不相等的对象 .