首页 文章

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

提问于
浏览
0

在这段代码中,

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

有什么区别

(应用部分局部[])

(部分偏)

在这段代码中,

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

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

2 回答

  • 1

    Clojure 中没有函数相等的一般定义 . 有一个微不足道的身份,如果两个对象是相同的,他们应用相同 . 但是partial会创建一个新对象 . 例如:

    user> (= (partial + 0) (partial + 0))
    false
    

    作为人类读者,我们可以看到它们是相同的功能(两者都是与 + 本身相同的功能) . 但是Clojure语言中没有逻辑可以确定这种平等 .

  • 3

    以来

    (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>
    

相关问题