Clojure中的嵌套部分

3 clojure

数据是如何得到的结构与嵌套评估partial在下列:((partial (partial - 3)6)9).内部partial收益率-3,然后我们有((partial -3)9).但是为什么部分原因如何(-3 -9)?它从何处获得减法指令?

我想对Clojure阅读和评估这种数据表示的方式有所帮助.

Cha*_*ffy 10

((partial - 3) 6)在评估此表达式的过程中调用的声明是不正确的,这是误解的核心.

为了简化这一点,让我们分解一下:

((partial (partial - 3) 6) 9)
Run Code Online (Sandbox Code Playgroud)

...而是将其重写为:

(let [p1 (partial - 3)]
  ((partial p1 6) 9)
Run Code Online (Sandbox Code Playgroud)

现在,(partial p1 6)返回什么?一个函数,它调用p1第一个参数6,并附加任何后续参数.因此,我们可以再次详细地写它:

(let [p1 (partial - 3)
      p2 (partial p1 6)]
  (p2 9)
Run Code Online (Sandbox Code Playgroud)

因此,(p2 9)呼叫(p1 6 9),呼叫(- 3 6 9).(- 3 6)永远不会在执行过程中的任何地方调用,因此-在最终调用所有参数之前,永远不会消耗初始函数调用.

(实际的实现可以优化中间调用,将p1的参数折叠为p2,但不需要将这些优化合并到概念模型中;行为等同于上面的内容).