在申请和不申请和部分在clojure之间有什么区别?

时间:2014-09-28 14:13:03

标签: clojure functional-programming

在此代码中,

user> (= (apply partial partial [+])
     (partial partial +))
false
user> 

之间有什么区别
  

(应用部分部分[+])

  

(部分偏+)

在此代码中,

user> (= (apply +  [])
     (+))
true

为什么返回值不是假的呢?

2 个答案:

答案 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>