如何通俗的解释闭包的概念(转)

假设你现在有一个函数 f (x) = a + x

这个函数是不完整的,比如 f (1) = a + 1 你还差一个问题: a 是多少?

有两个方法回答这个问题

第一种叫“动态作用域”,a的值决定于函数调用时上下文中a的值,比如

a = 1;
v=f(1) ; 这里v为2

动态作用域的问题是,函数每一次调用相同的参数未必返回相同的值,其返回值还取决于上下文的某些值

第二种是“词法作用域”,a的值取决于函数定义时上下文中的值

g (a) = lambda (x) a + x;
f = g(2)

这里函数g返回一个和上面函数f形式一样函数,a在此处为2,那么执行

a = 1;
v=f(1) ;这里v为3

因为f要“记住”自己定义时a的值为2,所以实现时

f (x) = a + x 和 a = 2 被打包在一块,被称为“闭包”,意思是它是完整独立的,仅仅依靠调用时参数求值,不再依赖调用时的上下文

晕,写完以后才发现我也写了不少…

(转载自知乎)

scheme的一个简单计算函数

最近几天在逛大神blog看了王垠的blog,里有有篇“怎样写个解释器是用scheme实现的。

刚好我最近也在看sicp先实现一个计算函数QQ图片20150608133856用match语句匹配俩个可能一个为该函数接受单个数字返回单个数字,一个可能是接收一个组合式'(‘op ,e1 ,e2)    op代表了运算符 e1, e2代表应用的数据 ‘(+ 1 2)QQ图片20150608135730有了这个这个方法我们可以做许多的新的例子比如QQ图片20150608142027要把组合式的运算符放在中间只需改变op的位置。要改成三个数运算QQ图片20150608144750可以尝试自己各种修改

大学生创业?(naive)

我曾看见有许多人想着创业创业创业,更甚大学不学习一门脑子想着创业把自己的理想就变成创业成功。但是在我看来这些人要么是懒惰无比,要么是鸡汤喝多了天真烂漫,成天坐着出任CEO走上人生巅峰的梦。

现在再来说说创业,为什么我觉得把理想和目标定在大学期间创业成功是非常naive的行为呢?其实结果显而易见就是三个字对于百分之99.99999999998的大学生来说  “不可能” 当然也有幸运的百分之0.000000000001但那些人不是在哈佛就是在mit等世界排名靠前的大学。我觉得一个人不能把有非常大运气成分才能成功的东西当作理想,大学创业就是其中之一,靠得是百分之65的运气和百分之15的队友百分之10的行动力还有百分之5的idea.组成。那些世界top大学的大学生之所以能成功便是占了队友行动力和idea的加成,想想自己的队友行动力idea占的到吗,所以说我觉得买彩票更好。

有些人又说了“我身边也有人创业成功啊”,我只能。。。。。。。。你说的是做生意继承家业当然行,有钱烧当然行。还有些小打小闹也算创业?好好学习等毕业后你会发现当时小打小闹拼死拼活赚的钱到不了毕业后的一个月月薪,所以说整天想着创业的人要么懒惰,要么天真。

当然我并不是反对大学创业,是反对一些懒惰和天真的想法罢了。当机遇来了抓住时机才是聪明人的选择,也有在普通大学创业成功者但我想他们在大学期间绝不会有这种懒惰和天真的想法,而是机会来了而进行尝试从而成功。

sicp用scheme实现八皇后

d1a20cf431adcbef8c2f33e5adaf2edda3cc9f3e八皇后问题:

在8X8格的国际象棋上摆放八个皇后,使其不能互相攻击,即任意两个皇后都不能处于同一行、同一列或同一斜线上,问有多少种摆法。

在sicp的第二章有一个八皇后的问题QQ图片20150601232700详见(计算机程序的构造和解释85页)我一开始是理解为在每个棋盘上放置一个皇后然后进行筛选,但问题是问总共有多少种摆法,进行筛选的话就只能得出一个结果。苦苦冥想了一天还是无果,第二天终于准备把程序输入电脑里直接查看是怎么摆皇后进行筛选这是(4×4的表格)QQ图片20150601233650!!原来是把每一种可能进行遍历然后筛选。书上讲的实在迷糊。

到目前为止我看sicp一直都是只看没输代码的,现在讲讲scheme编程环境的设置如果是开始想进行小程序的实验用  叫做Petite Chez Scheme的解释器 http://scheme.com/download 下载地址但是这个解释器报错非常不清楚如果想进行上面的八皇后的实验 推荐用:

Racket  下载地址为 http://racket-lang.org  sicp上的习题用这个解释器就能运行大部分了。