当前位置: 首页 > 科技观察

与6岁小朋友函数式编程对话

时间:2023-03-16 10:40:25 科技观察

今天看到Brent写的一篇很有意思的文章,分享给大家,特别是有小朋友的程序员家长。昨天,我正在读一篇关于函数式编程的学术论文,这时我6岁的儿子走过来问我:“你在看什么?”我不知道从哪里开始向他解释,所以我决定开门见山地回答:“我正在读一个关于自由定理的长篇故事。”他问:“什么是自由定理?”这将如何向一个6岁的孩子解释呢?在挑战面前缩水。我想了想,问:“你知道函数是什么吗?”他没有。“一个函数有点像一台机器,你可以在一端放一些东西,另一端就会出来一些东西。例如,你输入一个数字,然后输出一个比该数字大1的数字。例如,如果你投入一个3,一个4出来,你投入一个6,一个7出来。”他很清楚这一点,所以我继续解释:“函数有类型,类型告诉我们要放入什么,要放入什么。”比如你输入一个数字,取出一个数字;或者你放入一个包含几个数字的列表,然后取出一个数字。”他兴奋地打断了我的话:“也许我可以输入单词吗?”“是的,你可以输入单词并取出单词。或者有一个特殊的功能机,让你把一个功能机放进去,取出一个新的功能机!”他喘着气说:“一台产生机器的机器!关于这台功能性机器的一些东西总是正确的。”显然,这远远超出了他的知识范围。但是整个谈话给了我一点灵感。“嘿,我想出了一个好主意,”我说,“让我们玩吧一个函数机游戏,我要在脑子里放一个函数机,你告诉我往里面放什么,我告诉你什么会从机器里出来,然后你就可以猜出这个函数机是什么了确实如此。”他立即喜欢上了这款游戏,这对我来说是一个巨大的“打击”,因为他想继续玩下去。我昨晚开车去参加派对时正在播放它,而今天早上我正在淋浴时播放它。到目前为止,他已经正确猜出了这些“功能机器”这一个对他来说有点困难:我意识到在几种情况下,他可以理解一个功能是做什么的,但是很难用语言表达出来。所以我们对一些做了一些改动,一旦他觉得自己猜到了函数的功能,我们就互换角色,让我指定输入,他会根据自己的理解生成输出,看对不对with我的想法。函数机对他来说出奇地难猜(尽管他最终猜对了),他花了很长时间猜测,因为他认为机器会对输入的数字做一些数学运算,所以他一直想找到一个“公式”.他没有意识到的是,功能机器根本不关心输入数据。不管你输入什么,机器每次输出都是6!(有意思的是,在我的函数式编程课上,很多同学在做Lambda演算的时候,对costant函数也很困惑。)经过几轮批改,我的函数机猜完后,小家伙也想构造他的函数让我猜!他的功能有时候很好,有时候又说不通。无论如何,这很有趣!当他终于明白这个函数是干什么的时候:然后,他也想出了这个“复杂”的函数:我想是因为他受到了幼儿园班级的启发,在那里他学会了一对加起来为10的数字。这是这绝对是我教过孩子的最好时光之一。看完之后觉得这个游戏很有意思,还带着女儿去玩了。我们玩了几轮后,她开始建造功能机,让我猜猜。但是玩了几个常用功能后,孩子就不按常理出牌了。比如他居然给了我一个返回随机数的函数,这个函数真的很难猜。还有一个很有代表性的功能机:我说:10,她说:1,我说:9,她说:2,我说:33,她说:3,我说:34,她说:4,我说一下就明白了,她的函数不是“纯函数”,是有状态的!或者她不小心关闭了。我怎么跟她解释这个?!原文链接:https://byorgey.wordpress.com/2018/05/06/conversations-with-a-six-year-old-on-functional-programming/