- A+
领500g书库,关注公众号:程叫兽的宝藏 (长按可复制!)
热门下载区==>点此链接进入<<<
目录(点击切换)
本文节选自《暗时间》电子版:
在上面几次失败的党试之后,我们是不是就一筹莫展了呢?别瑟了软件工程里面的一条黄金定律:“任何问题都可以通过增加一个间接层来解决”。不妨把它沿用到我们面临的递归问题上:没错,我们的确没办法在一个lanpda函数的定义面直接〈按名字)来调用其自身。但是,可不可以间接调用呢?我们回顾一下刚才不成功的定义:lampdan,If_Elsen==01nk(n-1)现在“self>处不是缺少“这个函数目身”呆,既然不能直接填入“这个函数自身”,我们可以增加一个参数,也就是说,把*《self>参数化:lampdaSelfn,IfElsen==01nkself(n-J)上面这个lambda算子总是合法定义了吧。现在,我们调用这个函数的时候,只要加传一个参数self,这个参数不是别人,正是这个函数自身。还是为了简单起见,我们用let语句来给上面这个函数起个别名:letP
暗时间书籍pdf
=lampbdaselfn.IfElsen==01nkself(n-1)我们这样调用,比如说我们要计算3的阶乘:P(P,3)也束是说,把P上自己作为P的第一个参数《注意,调用的时候P己经义完毕了,所以我们当然可以使用它的名字了)。这样一来,P里面的Self处不就等于是P本身了吗?白身油用自身,递归!可惜这只是个美好的设想,还差一点点。我们分析一下P(P,3)这个调用。有人的Bt二次,这个函数调用展开其实就是《你可以完全把P当成一个宏来进行展开!):IF_Elsen==01nx#P(Cn-1l1)看出问题了吗?这里的PAn-1)虽然调用到了P,然而只给出了一个参数,而从P的定义来看,它是需要两个参数的《分OA也就是说,为了让Pen-l)变成民好的调用,我们得加一个参数才行所以我们得稍微修改一下P的定义:letP=lampbdaselfn.IfElsen==01nk
暗时间epub 刘未鹏
self(self,n-l)请注意,我们在P的函数体内调用self的时候增加了一个参数。现在当我们调用PP,3)的时候,展开就变成了:IF_Else3==013xP(P,3-1)的成功了!而P(P,3-1)是对P合法的递归调用。这次我们不动点原然而,看看我们的P的定义,是不是很丑随?“nx#xself(self,mn-1)”?什么玩意?为什么要多出一个多余的self?DRY!怎么办呢?我们想起我们一开始定义的那个失败的P,虽然行不通,但最初的努力往往是大脑最先想到的最直观的做法,我们来回顾一下:letP=lampbdaselfn.IfElsen==01nkself(n-J)这个P的函数体就非常清晰,没有宛余成分,虽然参数列表里面多出一个self,但我们其实根本不用管它,看函数体就行了,self这个名字已经可以说明一切了对不对?但很可惜这个函数不能用。我们再
暗时间epub微盘
| 暗时间心理学pdf | 暗时间pdf免费下载 |
| 《暗时间》pdf | 暗时间 epub 百度云 |
| 暗时间epub百度云盘 | 刘未鹏博客 暗时间 |
综上:暗时间pdf百度云 下载值得推荐阅读

