cs61课程总结-lecture2,3

来源:互联网 发布:淘宝怎么搜便宜的东西 编辑:程序博客网 时间:2024/04/28 16:32

值(values):是我们要操作的东西

函数(functions)是我们操作东西的计算过程

表达式:表示带有返回值的计算过程

今天探讨函数如何操纵数据对象和表达式如何表达这些操作

函数-->代换模型(直接上图)


tips:字面值(literals)与实值(values)区别

pure functions 与 impure functions 区别(对应于树形模型)impure function 会多出虚孩子节点对应于副作用(side effect)

代换模型的局限性导致引入了环境模型


def  f(x):<span style="white-space:pre"></span>def  g(x):<span style="white-space:pre"></span>return  x + 10<span style="white-space:pre"></span>return  g(5)f(3)
当调用f(3)时,不能将g里的x进行代换。
如何计算表达式的值?

1).对于literal其值就是对应的value

2)而对于function,evaluate的结果是用对应的函数体替换----而函数体却与定义函数是所在的环境相关---这就引入了环境模型

环境模型:

环境:将名字(names)到其值的映射------区别三个概念 name,value(object),state

环境  f: name--->value

状态 f:value(object)--->state

任何表达式都在对应的环境下进行求值,其值就是对应names所对应的value

如下图为简单的环境模型


对一个name在一个环境下进行求值,就是在该环境下查找与名字对应的value



通常,我们可以发现环境事实上形成了一个链式祯的结构。

当在当前环境下查找不到时,在对应的父环境下继续查找



当调用一个函数时首先先形成该函数的局部环境(由其参数构成)

总结:

环境是name到value的映射

其由链式帧组成

一个环境要么是全局帧或者是一个当前帧链接到父环境:===这是一个典型的递归定义

我们说name与一个帧里的value绑定

在一个环境中名字的值(the value of name)是与该环境中第一个帧中的名字的值绑定(如果存在的话)

如果不存在则与父环境中同名的值绑定 

环境:绑定与求值(binding 俺的 evaluation

每个表达式和语句都在一个环境下执行,这决定了name的meaning(value)

表达式里的子表达式与表达式相同的环境下求值

赋值(assigning)操作将其被执行时对应环境下第一个存在该名字的帧里的名字绑定一个值

定义(def)语句将其被执行时对应环境下第一个存在该名字的帧里的名字绑定一个值

调用(calling)操作,创建了一个当前帧(由参数组成)


















  


                                                                  






































• λ a, b: ≪ a × b≫ (add(2, mul(0x4, 0x6)), add(0x3, 005))


• λ a, b: ≪ a × b≫ ( λ a, b: ≪ a + b≫ ( 2 ,  λ a, b: ≪ a × b≫ ( 4 , 6 )), add(0x3, 005))
• λ a, b: ≪ a × b≫ ( λ a, b: ≪ a + b≫ ( 2 , ≪ 4 × 6 ≫,add(0x3, 005))
• λ a, b: ≪ a × b≫ ( λ a, b: ≪ a + b≫ ( 2 , 24 ), add(0x3, 005))
• λ a, b: ≪ a × b≫ (≪ 2 + 24 ≫, add(0x3, 005))
• λ a, b: ≪ a × b≫ ( 26 , add(0x3, 005))
• λ a, b: ≪ a × b≫ ( 26 ,  λ a, b: ≪ a + b≫ ( 3 , 5 ))
• . . .  λ a, b: ≪ a × b≫ ( 26 , 8 )
• . . . 208 .

0 0
原创粉丝点击