冒号课堂§4.4:情景范式 - 编程入门网
0.00001; // dx越小,近似度越高
return function(x) { return (f(x + dx) - f(x)) / dx; };
}
/* 返回一个数的平方数 */
function square(x) { return x * x; }
/* 返回一个数的双倍数 */
function double(x) { return 2 * x; }
/* 对任何一个不大的数值变量x(比如小于100),下列函数的返回值应该非常接近于零 */
function testSquareDerivative(x) { return derivative(square) (x) - double(x); }
冒号课堂§4.4:情景范式(4)时间:2011-06-27 BlogJava xyz98叹号感到有点头痛:“怎么跑出了微积分?大学学的那点高数早就还给老师了。” 冒号笑着安慰他:“还给老师没关系,我再借给你一点:平方函数的导数是双倍函数。因此,函数derivative(square)应该很接近函数double的作用效果。作为检验,testSquareDerivative能将任何一个不大的数映射到近似于零的数[1]。” 引号这下彻底明白了:“在求导函数derivative中,传入的参数f和返回值都是函数,这是函数作为头等公民的特征。其中返回的匿名函数就是闭包,它附着了两个环境变量:外层函数的传入参数f和局部变量dx。” “完全正确!”冒号作出积极的肯定,“如果不是闭包,这两个环境变量在derivative返回后就会失去效用。由此可见,合理地使用闭包能使代码更加简洁清晰,散发出函数式特有的优雅气质。” 句号有些按捺不住编程的冲动,自告奋勇:“我来具体实现餐馆的serve方法吧。” 得到冒号的默许,句号在黑板上写下——
冒号课堂§4.4:情景范式(5)时间:2011-06-27 BlogJava xyz98句号写毕又复查一遍,拍拍手上的粉笔灰,心满意足地走下台来。 叹号提意见:“我的厨工没派上用场,应该在厨师烹调前调用KitchenHand的prepareFood方法。” 问号挑出另外的毛病:“在for循环中,厨师、服务员和顾客的行为应该在不同的线程中,厨师不可能等服务员上完一道菜或顾客吃完一道菜后才做下一道。” “可能更复杂呢!”逗号也来凑热闹,“一位顾客点的几样菜可能分别由几位厨师同时做,每位厨师都在不同的线程中工作。” 引号更严谨:“还应有一个后台线程,让服务员(Waiter)随时换盘(exchangePlate),让厨工(KitchenHand)随时洗盘(washDishes)和清洁(clean),这样所有服务人员提供的服务都用上了。” 句号倒抽凉气:“估不到漏洞这么多,并发式真是无处不在啊。” 冒号继续点拨:“换盘子有两种方式:一种是服务员主动换,一种是客人要求换。前者是轮询,后者是通知。” “哦 |
凌众科技专业提供服务器租用、服务器托管、企业邮局、虚拟主机等服务,公司网站:http://www.lingzhong.cn 为了给广大客户了解更多的技术信息,本技术文章收集来源于网络,凌众科技尊重文章作者的版权,如果有涉及你的版权有必要删除你的文章,请和我们联系。以上信息与文章正文是不可分割的一部分,如果您要转载本文章,请保留以上信息,谢谢! |