如何教孩子Scheme编程(1)

教孩子编程序

这个念头已经在我脑子里盘亘了很多时间了,我不是一个纯粹的程序人员,我也认为甚至大部分真正的程序员也并不认为编程序是什么有趣的事情,更何况要让孩子受程序的折磨呢?所以他们觉得孩子们要从小学股票知识和金融知识比较合理,为什么教孩子们敲键盘呢?

我并没有过多的受程序折磨,没有编过很多代码,这是我仍然对此不是很厌恶的重要原因。我喜欢编程序。程序是工业时代的生产工具,是现代的木棒,弓箭,钓鱼竿,许多人喜欢原始人的工作,以此作为闲暇时光的消遣,所以为什么不可以在闲暇时编编小软件呢。

程序员们厌恶的并不是程序本身,他们只是厌恶项目经理,项目管理制度,那些将他们的灵感/创造力一天天扼杀掉的大工业流水线制度而已。将一个工匠/艺术家,在某种场景下降格为操作工,可替代的,千篇一律的零件。罪不在程序。

我希望孩子们可以掌握这门生产工具,无论他以后做什么工作,都可以顺手拿起一门语言,让自己的思考进行计算机的验证,帮助他迅速地得出结论,为自己的才华感到骄傲。这个善良的初衷,怎么说都不过分吧?

第一课

  • 知识点

    • 函数
    • 变量
    • 嵌套
  • 环境

    • DRRacket, Scheme
  • 参考书

    • Realm of Racket
  • 教授过程

(define a 10 ) ;;定义两个变量a, b; 实现两个变量的加和减
(define b 1)

(- a b)         ;;运行  
 9              ;;孩子很快就掌握了
(+ a b)
11

(define (lucy a b)
    (+ a b))

(lucy 3 8)
11

;;下面要实现孩子最想解决的问题了,也就是:1 + 2 + 3 ... + 98 + 99 + 100等于几?
(define sam
  (lambda (a)
    (if (= 0 a)
        0
    (+ a (sam (- a 1)))
    )))     

函数名字sam是孩子选的,这是孩子英语兴趣班上一个小朋友的名字,虎头虎脑,好动淘气。函数的名字当然可以随便选取,sam是个好名字,绝不会和关键字有混淆。lambda代表函数定义,a是参数,孩子很快就接受了。

嵌套的概念有些麻烦,只能告诉孩子sam让sam做些事情,sam又让sam做些事情,直到a=0才停止。

> (sam 2)
3
> (sam 100)
5050
;; 这个结果着实让孩子兴奋, 和课上老师讲的一样。利用函数sam这个强大
;; 的工具,我们甚至还发现了更多的有趣的等差数列之和的规律
> (sam 10)
55
> (sam 100)
5050
> (sam 1000)
500500
> (sam 10000)
50005000
> (sam 100000)
5000050000
> (sam 1000000)
500000500000   ;;1000000这个数太大了,利用嵌套的算法着实地算了好一会儿呢。

我们发现从1加到以上的数字(以1开头,以0组成剩余部分),结果和5以及后面的0相关。多么奇妙!可以继续预测下去
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值