我看到很多关于currying技术的文档和问题,但是我发现很少有关于为什么会在实践中使用它的信息.我的问题是,currying有什么好处?也许你可以提供一个简单的例子,其中currying比传统的方法调用更可取.
太阳升起的时候我用C++工作,所以到目前为止,除了工作以外的语言修补外,我几乎没有接触过curry.
在从SICP学习了一点Scheme之后,我开始阅读The Little Schemer(我发现它非常有趣)并且大约完成了四分之一.我注意到我可以在不使用lambda的情况下编写许多(大多数?全部?)解决方案,而Little Schemer 总是使用它们.例如,第一个定义是
(define atom?
(lambda (x)
(and (not (pair? x)) (not (null? x)))))
Run Code Online (Sandbox Code Playgroud)
除非我弄错了,否则可以更简单地写成
(define (atom? x)
(and (not (pair? x)) (not (null? x))))
Run Code Online (Sandbox Code Playgroud)
如果我写无lambda的解决方案,我会遗漏一些基本的东西吗?
我知道curry的概念和用法,但我想知道它在实践中的价值是什么?
我在网上看到一个人的声明说"currying只是一个有选择参数的奇特方式".通过直觉,我觉得这个陈述是浅薄和错误的,但我不能真正指责它,可能是因为我对lambda演算没有足够的知识.
当我试图解释差异时,我的解释跨越段落,主要归结为"Currying具有函数声明的所有变体,参数数量较少作为类型.但是你不能将函数与可选参数的所有组合作为有效类型和在其他声明中使用它们,至少不会自动".
我的方法一开始是否正确,更重要的是有一种更简单,更简洁的解释方法吗?