Chez scheme

为什么教小学生x=x+1是错误的?

空扰寡人 提交于 2020-08-11 15:44:16
对程序员而言,类似x=x+1的代码是再常见不过的了,几乎所有常见的编程语言教程在开始初级教程的时候,都会拿这个问题的计算来做示例,比如对于C#,会像下面这样的代码: int x= 0 ; x =x+ 1 ; 也可以这样写: x+= 1 ; 也可以像C语言那样,这样写更简单: int x= 0 ; x ++; ++x; 其它编程语言都大同小异了,程序员朋友们都知道上面的代码无非就是将变量x的值增加了1,或者说为变量x赋了一个比它原来大1的新数值。但是,如果你打算把这行代码告诉一个小学生,甚至一个初中生,以此想说明coding是多么简单就错了,如果教他学编程,那就是大错,为什么要这样说呢? 为了这个问题,我将x=x+1这个式子写给几个小学生看,他们的第一反应是“这个 等式 怎么这样写啊?”,“这个式子写的不对,两边不相等!”。我说这不是等式,这表示将变量x的值变大一个数,也就是将变量x的值加1后再赋值给变量x...后面的话没法继续进行下去了,小学生的神情是这样的: 幸好我是在跟中国小朋友交谈,如果我给几个美国小朋友说x=x+1,说不定会有家长控告我“损害了小孩正常的思维逻辑”。(PS:1968年,美国一位母亲投诉老师教会了她孩子字母“O”,状告幼儿园破坏了孩子的想象力,结果幼儿园败诉。)于是我顺着小学生的思路,将这个式子修改成下面这样: y = x + 1 我问这样写你们可以明白吗

为什么教小学生x=x+1是错误的?

核能气质少年 提交于 2020-07-28 08:44:07
对程序员而言,类似x=x+1的代码是再常见不过的了,几乎所有常见的编程语言教程在开始初级教程的时候,都会拿这个问题的计算来做示例,比如对于C#,会像下面这样的代码: int x= 0 ; x =x+ 1 ; 也可以这样写: x+= 1 ; 也可以像C语言那样,这样写更简单: int x= 0 ; x ++; ++x; 其它编程语言都大同小异了,程序员朋友们都知道上面的代码无非就是将变量x的值增加了1,或者说为变量x赋了一个比它原来大1的新数值。但是,如果你打算把这行代码告诉一个小学生,甚至一个初中生,以此想说明coding是多么简单就错了,如果教他学编程,那就是大错,为什么要这样说呢? 为了这个问题,我将x=x+1这个式子写给几个小学生看,他们的第一反应是“这个 等式 怎么这样写啊?”,“这个式子写的不对,两边不相等!”。我说这不是等式,这表示将变量x的值变大一个数,也就是将变量x的值加1后再赋值给变量x...后面的话没法继续进行下去了,小学生的神情是这样的: 幸好我是在跟中国小朋友交谈,如果我给几个美国小朋友说x=x+1,说不定会有家长控告我“损害了小孩正常的思维逻辑”。(PS:1968年,美国一位母亲投诉老师教会了她孩子字母“O”,状告幼儿园破坏了孩子的想象力,结果幼儿园败诉。)于是我顺着小学生的思路,将这个式子修改成下面这样: y = x + 1 我问这样写你们可以明白吗

Scheme宏指南

元气小坏坏 提交于 2019-12-23 06:58:12
【推荐】2019 Java 开发者跳槽指南.pdf(吐血整理) >>> 摘要:Scheme是LisP系语言中十分重要的一个方言(Dialect),在元编程、符号计算、系统校验等领域有着举足轻重的作用。而作为LisP系语言中最强大的部分,宏在中文社区中缺少相关的介绍与入门指南。本文参考r6rs标准、Chez Scheme的实现和The Scheme Programming Language,给出一份简洁扼要的说明。本文指出,宏本质上是在描述宏转换器并支持展开器对代码进行脱糖。相信读者读完本文即可茅塞顿开,并且充分意识到一些知名人士早年相关论述的错误与辉煌。 关键词:Scheme,宏,展开器,宏转换器,估值期,脱糖 一、LisP系语言的运行 包括Scheme在内的LisP系语言的编译器以略微不同的体系重构了编程语言的运行过程。不同于略懂一些编译原理的读者所意识到的语法树(Syntax Tree)、中间表示(Intermediate Representation)、编译期和运行期,LisP系语言采用估值期(Evaluation)、编译期和运行期这样的划分方式。 首先,由于LisP系语言采用S-expression,或者说树的括号表示,从C、Java那样的代码转换到语法树的过程被省略了。然后,语法树上所有的标识符(Identifier)被估值(Evaluate)。一个或者数个