clojure读书笔记其四
这个系列还会继续的
忽然发现我之前已经建立了这篇博客,心想姑且把这篇完成吧,后续更高级的内容等我琢磨明白了再放出来。这个系列并不是一个单纯学习教程,更是我对Clojure认知的一种体现吧,说实话从java这种语言跳到clojure上还是有挺多问题的,至少思维方式可能就需要进行蛮大的转变,后续估计还会在读一些SICP之类的内容去逐渐加深自己对于LISP这个深坑的理解。
说一说常用的东西
这一节就来说一说常用的一些函数,在实际的应用中不论是刷题还是实际的开发应用,都会经常的用到,比如递归 map reduce apply 等等,这些都是接触clojure之后都会经常看到,用到的方法。那么,今天就来说说这些吧。
递归
递归的话在一般的语言中(没错,我说的就是Java),一般都会采用这种方式:
public int doMethod(int param){
// do something
doMethod(param);
}
在方法内部调用方法本身实现递归,完成方法的递归调用。
然而,在clojure中这种方式虽然可以,但却会造成堆栈的溢出(因为Clojure的尾递归优化不是用的原函数名,而是使用的recur,使用原函数名会不断产生新的实例从而造成堆栈溢出)。