部分求值与部分应用当对函数进行部分求值时,会得到一个新的函数。
该函数接受一个参数,并返回原来的那个函数,只不过有一个参数被固化了。部分求值又名柯里化,
部分应用
你需要的是部分应用,那么部分求值只不过是个过渡步骤罢了。事实上, faux-curry 并不是真正的部分求值。真正的部分求值,返回的是结果,而不是一个没有参数的函数(一旦所有参数都被固化了)。你可以借助 true?函数来辨明其间的差异。此时,true?函数只接受一个参数。
由于Clojure函数可以接受变长的参数列表,Clojure无从得知参数何时才算是全部都确定了。但作为程序员,却很清楚参数是什么时候添加完毕的。一旦固定了足够多的参数以后,调用这个函数就行。意思就是,在前面的那个表达式外面再增添一对额外的括号。
部分求值在 Clojure 中的缺席,算不上是什么大问题。因为不管怎样,即使没有curry,也还有partial可用,而且一般来讲,后者才是人们所期望的。
事实上,许多程序员并未区分术语“部分求值”与“部分应用”。
相比直接编写递归或惰性代码,通过组合现有序列库中的函数,能创建更为简单且更加通用的解决方案。