1
第一天
上帝看到约翰·麦卡锡发明了表处理语言 Lisp,却只用来学术研究,很是伤心,就把 Lisp 解释器的秘密告诉了他的学生斯蒂芬·罗素,斯蒂芬·罗素将eval函数在IBM 704机器上实现后,函数式编程的大门第一次向人类打开了。
2
第二天
这个平行宇宙的上帝思想独特,他说:“ 要有不变量”

上帝又说: “函数应该是纯粹的(纯函数)”
不能修改传递给函数的变量!
不能修改全局变量!
对于同样的输入参数,返回值总是相同的!
下面的函数是被允许的,每次调用,返回值都相同,可以安全地调用,直到宇宙毁灭。

这样的函数在函数式宇宙中是不允许的,因为第二次调用就会导致函数式宇宙的毁灭。

这个函数是不被允许的,它竟然想修改输入参数!

如果函数返回了一个新的数组,而没有改变原有的值,那函数式上帝很高兴。

人类对于上帝立下的规矩表示迷惑不解: are you kiding me ?
3
第三天
人类尝试着写程序,由于不变量的规定,发现连个最基本的for 循环都搞不定。

人类迷惑不解:“有没有搞错, 我们怎么写循环?”
上帝说:“你们用循环干什么?”
人类写了一段代码。

上帝说:要有递归!
上帝也写了一段代码:

人类说:“这虽然能完成工作,但是好像不太直观啊!再说,亲爱的上帝,如果我那个list容量很大,递归层次很深,会不会出现栈溢出?”
上帝说:“没事,我有尾递归,保证不溢出。这种递归的写法,你们慢慢就习惯了。”
4
第四天
上帝发现很多函数大体上都是相同的,只有部分细节不一样,有很多重复代码,太浪费了。

上帝说:“要有高阶函数!”
让函数来生成函数,把公用的部分抽取出来,不共用的部分与共用部分能组合起来。









