晒网

Knowledge is Power

SICP笔记(七)

赋值和局部状态

现实中,我们常将世界看成聚集在一起的许多独立个体,每个个体都有自己的状态,比如你在夏日下搬砖,同时有人在宝马里吹空调,个体的状态随着时间不断改变,过去的改变会影响现在的表现,你辛辛苦苦搬了几个月砖,终于在年前开开心心地骑上小三轮回家过年。在计算机中,我们用状态变量(state variable)来记录对象的状态,系统中的独立对象通过自己的局部状态变量描述自己的状态,随着时间的流逝,对象的状态在不断改变,我们需要一种技术可以实时更新状态变量的值,这时我们就需要赋值(assignment)操作。

Read More

SICP笔记(六)

符号数据

编程中,我们使用言简意赅的变量名为变量命名以提高代码的可读性,此时我们处理的是变量名构成的表达式,但有时需要直接处理字符本身,将其视为数据对象,为了不引起歧义,我们便需要一种新的表示方法。在scheme中,在对象前放一个引号便表示这个对象是被引用对象,形如'a,存在等价用法quote(quote a)'a等价,后者是解释器的实际工作方式。 解释器看到的所有表达式都可以作为数据对象去操作,当解释器看到'(a b c),将会代换成(quote (a b c))

Read More

python中列表作为参数的传递方式

阅读SICP的过程中,我尝试着用python将SICP的习题实现一遍。在对Exercise 2.36的实现中,遇到了些问题。Exercise 2.36是实现一个accumulate_n的累积函数,与先前的accumulate函数类似,accumulate_n函数的第三个参数seqs接受元素为列表的列表,并且所含元素的数目应该相同。
理想的输出如下:

1
2
3
4
>>> accumulate_n(cons_of_list,[],[[1,2,3],[4,5,6]])
[[1, 4], [2, 5], [3, 6]]
>>> accumulate_n(lambda x,y:x + y,0,[[1,2,3],[4,5,6]])
[5, 7, 9]

Read More

SICP笔记(四)

sicp的第二章讨论构造数据抽象。构造数据抽象是一个非常有用的工具,构造数据之后,便可以将构造的复合数据视为一个单元体,在构建程序让我们在更高的层次上思考问题,并可以增加程序的模块性,便于修改维护。

Read More