和6岁孩子的函数式编程对话

GESP考级Python与C++大纲对比:哪个更适合你的孩子?(含最新版下载) 本文深入对比了GESP考级中Python与C++两门语言的最新大纲,从入门门槛、思维培养、考核重点到应用场景进行详细解析。旨在帮助家长根据孩子的年龄、兴趣及长期目标,选择最适合的编程学习路径,并提供科学决策指南。 阅读详情

前言: 今天看到Brent写的一篇有趣的文章,分享给大家,尤其适合有孩子的程序员家长。

昨天,我正在读一篇关于函数式编程的学术论文,6岁的儿子朝我走过来,问道:“你在看什么呢?”

我不知道从哪里开始给他解释,于是决定直接了当地回答:“我正在看一个关于自由定理的很长的故事。”

他追问到:“什么是自由定理?”

这该对一个6岁的孩子怎么解释呢?  但是作为一个老师, 我不会在教学挑战面前退缩的。

我想了一会儿,问道:“你知道什么是函数吗?”

他不知道。

“函数有点儿像机器,你可以把一些东西从一端放进去,然后另一端就会出来一些东西。举个例子,你把一个数字放进去,然后比这个数字大1的一个数就会出来,比如你放进去3,出来一个4, 你放进去6,出来一个7 。”

这对他来清晰易懂,于是我继续解释:“函数有类型,类型能告诉我们什么样的东西放进去,什么样的东西取出来。比如你放进去一个数字,取出来一个数字;或者你放进去一个包含几个数字的列表,然后也取出来一个数字。”

他很兴奋地把我打断了:“也许我可以把单词放进去?”

“没错,你可以把单词放进去,再把单词取出来。或者有一个特殊的函数机器,可以让你把函数机器放进去,然后取出一个新的函数机器!”

他倒吸了一口凉气:“一个产生机器的机器!”

“所以,” 我总结道,“自由定理就是你仅仅知道这个函数机器的类型,不知道它内部到底干了啥,但是你现在可以对这个函数机器说一些总是为真的断言。”

很明显,这远远超出了他的认知。不过整个谈话给了我一点灵感。 

“嗨,我想到了一个好主意,” 我说,“咱们来玩一个函数机器游戏吧,我会在脑海中想一个函数机器,你告诉我想放进去什么东西,我告诉你什么东西会从机器中出来,然后你可以猜一猜这个函数机器做了什么事情。”

他立刻喜欢上了这个游戏,这对我是个巨大的“打击”,因为他想一直玩下去。昨天晚上我开车去参加一个派对的时候在玩,我早上冲澡的时候也在玩。

到目前为止,他正确地猜出了这些“函数机器”

这一个对他有点难度:

我意识到在几种情况下,他能理解函数的功能,但是不容易用语言表达出来。 

于是我们对有些做了一些改变,一旦他觉得自己猜出了函数的功能,我们就调换角色, 由我来指定输入,他来根据自己的理解产生输出,看看和我想的对不对。

这个函数机器对他来说出乎意料地难猜(虽然他最终猜对了),他花了很长时间猜测,因为他以为机器会对输入数字做点儿数学运算, 所以总想找到一个“公式”。

他没有想到的是,函数机器可以根本就不关心输入数据。无论你输入什么, 机器的每次的输出都是 6 !(有趣的是,在我的函数式编程课上,很多学生在做Lambda演算的时候,也对cosntant function非常困惑。)

经过几轮对我的函数机器猜测之后,小家伙也想构造出他的函数让我猜了!有时候他的函数非常棒,有时候确没什么意义。不管怎样,这很有趣 !

当他最终理解了 这个函数做的事情:

随后,他也想出了这样“复杂的”函数:

我想这是因为他受到了幼儿园课程的启发,在那里他学到了一对儿加起来等于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/

微服务把我坑了

如何降低程序员的工资?

程序员,你得选准跑路的时间!

两年,我学会了所有的编程语言!

一直CRUD,一直996,我烦透了,我要转型

字节码万岁!

上帝托梦给我说:一切皆文件

Javascript: 一个屌丝的逆袭

Node.js :我只需要一个店小二

我是一个线程

TCP/IP之大明邮差

一个故事讲完Https

CPU 阿甘

【精选】Spring框架介绍及Spirng各个版本的特性 Spring框架英文全称Spring Framework,是由Spring团队研发的模块化、轻量级开源框架。其主要目的是为了简化项目开发。在项目开发中,可以说没有刻意使用Spring,却处处有着Spring存在。用官网对Spring框架的介绍:Spring框架核心功能包含依赖注入、事务管理、Web应用、数据访问、消息发送等等。 阅读详情

相关推荐

从鸡兔同笼到中国剩余定理:古代数学算法思维与现代编程实践

算法思维是计算机科学的核心基础,它关注如何设计清晰、可执行的步骤来解决特定问题。其原理在于将复杂问题分解为可重复的操作序列,从而实现自动化求解。这种思维在工程实践中价值巨大,能够提升代码效率、优化系统性能并解决大规模计算任务。从排序、搜索到机器学习、密码学,算法思维的应用场景无处不在。本文聚焦于中国古代数学中蕴含的算法智慧,例如“盈不足术”所体现的迭代逼近思想,以及“中国剩余定理”在模运算中的高效应用,这些经典模型为现代编程提供了跨越千年的灵感源泉。

chongyuwan4121的博客 376

聊一聊会话编程

HttpSession接口中常用方法 会话的创建、销毁的方法 会话与请求的区别什么是会话 客户端向服务器发送请求,服务器端接收请求并生成响应返回客户端,客户端对服务器端这样一次连续的调用过程,被称为会话(seccion)。登陆访问控制 某些资源不能直接访问,只对登陆用户开放实现的方法:把登陆后的信息保存到会话当中,访问资源前,先查看会话中的登录信息,如果存在,则允许访问,否则跳转到登陆页面。

请叫我法斗先生 984

从TL431光耦到集成隔离器:3种反激电源反馈方案全对比,你的项目到底该选哪个?

本文深入对比了反激电源设计中TL431光耦、集成隔离器和原边反馈三种主流反馈方案的优缺点,帮助开发者在电源设计中选择最适合的方案。从精度、成本、隔离等级等多维度分析,为反激式(Flyback)拓扑的应用提供实用选型指南。

weixin_30536513的博客 399

用Java代码编程实现模拟机器人对话

本文展示了实现多线程的方法,利用多线程之间的交互模拟两个机器人对话!

陈橘又青的博客 3169

详解AUTOSAR:专栏总述

本专栏系统介绍AUTOSAR规范及车用控制器软件开发,内容覆盖基础架构、SWC/RTE、通信栈、诊断、存储、安全、看门狗、工具链、环境配置与项目实战,并持续更新各模块的集成机制与工程要点。

不脱发的程序猿 3925

Qt软件开发-Qt编译zlib完成文件压缩解压(win10)

在软件开发中进行有需求需要将生成的一些文件打包上传到服务器,或者从服务器下载压缩包下来内部解压。或者自己做一些打包工具,那么使用zlib开源就可以很方便的完成。接下来介绍在zlib在windows下如何利用Qt进行编译,调用,介绍mingw、msvc,32/64位编译办法,完成zip文件打包生成例子。可以单文件压缩打包,多文件压缩打包,目录压缩打包等等。

2216

学习-编程-(记录简短的对话)

老哥 9:52:23 10月份就还有一个星期了  你要在这个星期看完前期学习 即基本的3本书(计算机组成原理、操作系统、编译原理) 后面11月份和12月份是学习c语言、数据结构、算法导论   这部分非常重要  2个月的时间很近  你多加油了   学算法导论的时候你可以到csdn论坛上面找几个专门的博客看看  我记得有几个人的博客专门针对算法导论的  这样你就跟着别人学习  有方法有思路  好

剑! 795

【异常】Warp终端AI功能403封禁报错I‘m sorry, I couldn‘t complete that request.Request failed with error: ErrorSta

本文针对Warp终端出现的AI功能定向封禁报错,完整还原脱敏后的报错信息、深度解读报错本质,并提供分优先级的全流程可落地解决方案,可直接用于技术排查、内部知识库归档。

奶爸的编程之路,也就一周冷个三天 265

带有交互式的编程对话---expect

expect不是默认的系统安装包,需要额外安装: #检查时候安装 rpm -qa | grep expect #安装 yum install expect #搜索位置 which expect 主要命令 expect实现交互式变成对话,主要依赖于4个命令,这些命令都是expect这个包自带的。 spawn 要执行的命令 expect 等待命令提示信息的出现,也就是捕捉用户输入的提示。包含即可 send 向屏幕输入字符串。相当于出现提示后,手动输入的内容 interact/expect eof 其中

jjt_zaj的博客 328

数仓建模—数据语义层

如今,企业产生大量数据,需要以正确的方式进行分析才能做出重要决策。数据可能来自多个来源并采用不同的格式,这使得清楚地了解其含义和重要性成为一项挑战。这就是语义层的用武之地。语义层存在于数据仓库和最终用户使用的应用程序之间。它为用户提供了简化且一致的数据视图,无论其基础数据源的复杂性如何。该逻辑层有助于映射物理数据结构以创建概念数据模型。它定义了数据元素之间的所有规则和关系,并以业务术语提供了数据的通用词汇表。然后,用户可以轻松地与数据进行交互,而无需了解其数据源的技术知识。

7万+

DataCastle-租金预测

ID:编号;时间:房屋信息采集的时间;小区名:房屋所在小区,已脱敏处理;小区房屋出租数量:小区出租房屋数量,已脱敏处理;楼层:0、1、2分别表示楼层低,中,高;总层数:房屋所在建筑的总楼层数,已脱敏处理;房屋面积:房屋面积数值,已脱敏处理;房屋朝向:房屋的朝向;居住状态:房屋的居住状态,表示是否已出租或居住中,已脱敏处理;卧室数量:户型信息,数字表示卧室的个数;卫的数量:户型信息,数字表示卫生间的个数;厅的数量:户型信息,数字表示厅的个数;

优快云 精品推荐 3457

对话世界级编程大师 Bob 大叔:当机器像人一样思考,编程技巧将会过时,技术迎来奇点...

Bob解答程序员的“35 岁危机”:认为编程只适合年轻人的想法其实是个错觉,但确实是个很有影响力的错觉。这种错觉之所以存在,是因为过去 70 年里,对程序员的需求像坐火箭一样飙升。其实我们这些“老程序员”都还在,只是数量上不那么显眼罢了。作者 |王启隆出品 | 《新程序员》编辑部想象一下,如果你这辈子写了五十多年代码,并且直到 71 岁还在编程,那你会如何看待现在这个 AI 编程爆火的时代?R...

AI科技大本营 2万+

关于 SAP UI5 应用 url 中的特殊符号 # 的作用介绍

符号在 SAP UI5 的 URL 中不仅仅是一个分隔符,更是动态路由、状态管理和深链接的关键所在。通过合理使用,开发者可以实现高效、流畅的用户体验,同时保持系统的可维护性和扩展性。通过 SAP UI5 提供的灵活路由机制,企业应用可以轻松实现复杂导航需求,同时为用户提供直观的交互体验。

2007 年 ~ 2025 年,深耕 SAP 技术 18 年 411

2009年8月编程语言排行榜:微软系编程语言大阅兵

 Tiobe近日公布了2009年8月的编程语言排行榜,51CTO注意到本期榜单中C#连续几月处于上升阶段,而Java、C、C++依然以绝对优势占据前三甲的位置。 51CTO编辑推荐《跟MVP学C#视频教程》C# 4.0借Visual Studio 2010 Beta1发力很多人将C#认为是微软对Java的反击,我们从C#语言的继承体系,以及一些特性中可以看出,C#语言综合了C、

eit520的专栏 1469

【异常】QClaw客户端安装失败(OpenClaw资源解压出错)问题排查与修复指南: 安装失败:OpenClaw 资源解压出错。 请重新安装或联系支持。

摘要:QClaw客户端安装失败报错"OpenClaw资源解压出错"的主要原因是资源包解压异常,常见于安装包损坏、系统权限不足、安全软件拦截、旧版本残留或系统环境问题。解决方案分三步:1)快速修复:重新下载安装包、管理员权限运行、关闭安全防护;2)深度修复:清理旧版本残留、修复系统组件;3)终极方案:收集日志联系官方支持。建议优先检查安装包完整性并使用纯英文安装路径,80%问题可通过快速修复方案解决。

奶爸的编程之路,也就一周冷个三天 382

STM32F407中文手册

STM32f407中文手册 本参考手册面向应用开发人员,提供有关使用 STM32F405xx/07xx、STM32F415xx/17xx、 STM32F42xxx 和 STM32F43xxx 微控制器存储器与外设的完整信息。STM32F405xx/07xx、STM32F415xx/17xx、STM32F42xxx 和 STM32F43xxx 构成一个微 控制器系列,各产品具有不同的存储器大小、封装和外设。有关订购信息以及器件的机械与电气特性,请参见数据手册。有关 ARM Cortex™-M4F 内核的信息,请参见《Cortex™-M4F 技术参考手册》。

为什么说可视化编程是糟糕的想法?

可视化编程语言可以让程序员通过操纵图形元素来创建程序,而无需键入文本命令。 众所周知的例子是 Scratch,这是一种麻省理工学院开发的可视化编程语言,用来教孩子们学编程。 该语言的优势在于新手和普通用户可以更容易接触编程。二十世纪九十年代曾经有一种非常流行的运动,即通过所谓的 CASE 工具将这类工具带入企业,这些企业的系统可以通过 UML 进定义和生成,而无需雇佣训练有素的软件开发...

优快云资讯 1万+

jdk-8u144-linux-x64.tar.gz.

该资源为搭建Linux系统Java环境用,资源的后缀为tar.gz格式的压缩包

c++可视化开发_可视化编程:利用图形来创建程序,却被程序员认为是糟糕的想法?...

可视化编程语言可以让程序员通过操纵图形元素来创建程序,而无需键入文本命令。众所周知的例子是 Scratch,这是一种麻省理工学院开发的可视化编程语言,用来教孩子们学编程。该语言的优势在于新手和普通用户可以更容易接触编程。二十世纪九十年代曾经有一种非常流行的运动,即通过所谓的 CASE 工具将这类工具带入企业,这些企业的系统可以通过 UML 进定义和生成,而无需雇佣训练有素的软件开发人员。这涉及“r...

weixin_39605414的博客 761

VB摄像头监控

该VB模块可对摄像头捕获的画面进行录像等,可在创建的窗口进行控制

Statistics and Machine Learning Toolbox

Statistics and Machine Learning Toolbox(带书签),MATLAB统计学习工具

易懂有趣,超级上头——Head First

Head First系列,中文一般翻译为“深入浅出”,它强调以特殊的方式排版,由大量的图片和有趣的内容组合构成,而达到非疲劳的沉浸式学习效果。一些“Head first”的学习准则:可视化...

华章IT官方博客 687

老农的计算机笔记(四)关于编程语言

关于编程语言思考 编程语言的选择 关于编程语言的思考 编程语言,就是人类使用的计算机能够理解的语言。它介于人类语言(英语)和机器语言之间。 机器语言已经从二进制代码--》汇编语言--》高级语言。 从人类语言的角度,这种语言必须符合人类的思维习惯和表达方法;从机器语言的角度,它必须精确、没有歧义、可执行(数学化)。 一种理想的编程语言,应该能够用简洁的方式直观、精确地表达人类的丰

码园老农的专栏 3515

《程序员》8月刊最新上市:新语言,新特性

本期封面报道:新语言,新特性 近十年来,计算硬件进入多核时代,互联网和移动设备成为主流平台,开发效率越来越重要,这些趋势催生了C#、Scala等全新语言,也使CommonLisp、Erlang等对很多中国开发人员来说曾经比较陌生的语言时髦起来,更让函数式、声明式、动态、元编程等此前多在课堂和学术界探讨的语言特性重新获得了重视。各种主流语言的发展趋势如何?在实战中又有哪些常见的经验和陷阱?新兴...

《程序员》官方BLOG 710

【无标题】现代面向对象编程最佳实践(一)

我在 IT 行业的第一份工作是在软件测试领域。我发现开发人员和测试人员有各自独立的社区,拥有各自的技术和知识体系。我还发现,在一些公司中,开发人员与测试人员之间存在对抗性的关系:开发人员对测试人员因吹毛求疵而感到不满,因为测试人员喜欢挑剔他们的辛勤工作。作为回报,测试人员对开发人员草率和不一致的编写和发布软件的方式感到不满。当然,这两种极端立场实际上并没有建立在现实基础上。本章阐述了一种思考制作软件的方法,将开发人员和测试人员置于相同的位置:都希望制作一个有价值的产品。

龙哥盟 472

2024年最全三年,我从语文老师到支付宝技术前端的蜕变(3),2024年最新里面的面试

函数式编程其实是一种编程思想,它追求更细的粒度,将应用拆分成一组组极小的单元函数,组合调用操作数据流;它提倡着 纯函数 / 函数复合 / 数据不可变, 谨慎对待函数内的 状态共享 / 依赖外部 / 副作用;

2401_84617731的博客 734

ChatGLM3-6B Streamlit开发:插件机制+第三方工具集成(如Wolfram)

本文介绍了如何在星图GPU平台上自动化部署ChatGLM3-6B镜像,构建具备插件扩展能力的本地AI智能助手。通过Streamlit框架集成Wolfram等第三方工具,可实现数学公式求解、函数图像绘制等科学计算任务,显著提升科研与教学场景下的交互效率。

weixin_34547628的博客 166
上一篇: 做成任何事情的方法
下一篇: HTTP Server : 一个差生的逆袭
码农翻身
码农翻身 《码农翻身》作者 《码农翻身》作者
博客等级 码龄8年 3万+粉丝 1084原创
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

个

红包个数最小为10个

元

红包金额最低5元

当前余额3.43元 前往充值 >
需支付:10.00元
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付元
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值