CS61 Structure and Interpretation of Computer Programs 学习笔记-第一章 从Lamba表达式理解函数编程范式

第一章 通过函数建立抽象(Building Abstractions with Functions)

SICP主题是“抽象”,抽象的目的是为了控制复杂度,而控制复杂度的能力是优秀码农的极其重要的能力。也是计算机专业的元知识,是武林高手的内功

1. 本章的学习要点

1. 函数式编程 (https://zhuanlan.zhihu.com/p/42621241

在命令式的编程范式当中,你通过告诉计算机一系列需要执行的任务并在计算机执行以后以完成你的目的。当执行任务的时候,状态可能会发生改变。比如,假设你原先将A赋值为5,然后你改变A的数值。你会有很多变量,并且变量内部的值也会发生改变。

从语法上说,函数式编程有如下特点:

  • 函数本身可以赋值给变量,赋值后变量为函数;
  • 允许将函数本身作为参数传入另一个函数;
  • 允许返回一个函数。

在一个函数式编程范式当中,你并不告诉计算机要干什么,而是告诉它是干什么的。什么是一个数字的最大公因子,什么是从1到N的乘积,等等。

说明1:变量不能变化。当时设置好了一个变量,它将永远保持那样的方式(注意下,在纯粹的函数式编程语言当中通常不称之为变量)。因此,在函数式编程范式当中,函数不会有副作用。函数的副作用是指函数修改了一些函数作用范围外的东西。让我来看一个典型python的例子:

a = 3
def som_func():
    global a
    a = 5
some_func()
print(a)

这段代码的输出是5.在函数式编程范式当中,改变变量的值是不容许的事情,同样影响在函数作用域之外的变量也是不被容许的。函数唯一可以做的事情是做一些计算然后以结果的形式返回。

说明2:在函数式编程当中,我们不使用循环。我们采用递归。递归是一个数学上的概念,通常,它意味着“自己调用自己”。在一个递归的函数当中,函数重复地以子函数的形式调用自己。这里有一个非常的python编写的递归函数的例子:

def factorial_recursive(n):
    # Base case: 1! = 1
    if n == 1:
        return 1

    # Recursive case: n! = n * (n-1)!
    else:
        return n * factorial_recursive(n-1)

说明3:Python的函数不但可以返回int、str、list、dict等数据类型,还可以返回函数!

为什么定义lazy_prod()函数和返回函数cal_prod()?

python支持返回函数的基本语法

只返回函数的作用:

返回函数可以把一些计算延迟执行。例如,如果定义一个普通的求和函数:

2. 本章的学习资料

1)https://cs61a.org/  按照calendar,完成第一周和第二周的学习要求,建议先看中文资料,然后阅读每一章的英文书,并完成对应的实验

2)Python的版本跟lisp(Secheme)版本的讲述有一定的改变,增加了一些题目,建议补充完成

3. Lab要求总结

Lab 0: 基本操作-通过命令行理解“解释程序”的概念

具体要求如下:https://cs61a.org/lab/lab00/

1. 安装环境

  • 安装terminal
  • 安装python 3
  • 安装text editor

2. 本次练习主要是熟悉python的解释器,并熟悉如何在python里实现表达式操作。

Lab 1:结构(条件,循环)与函数

一共6个实验,1个quiz。

Lab 2:Lambda表达式,高阶函数以及环境图联系

1. 基本相关语法练习,阅读

2. Lambda表达式再练习,代码编写(3,4,5)

3. 环境图练习 (2道)

Lab 3:递归

1. 递归练习(阅读):2道

2. 递归练习(代码编写)

  2.1 Pascal's Triangle

  2.2 Num eights

  2.3 Ping-pong

 

 

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 1
    评论
  本书1984年出版,成型于美国麻省理工学院(MIT)多年使用的一本教材,1996年修订为第2版。在过去的二十多年里,本书对于计算机科学的教育计划产生了深刻的影响。  第2版中大部分重要程序设计系统都重新修改并做过测试,包括各种解释器和编译器。作者根据其后十余年的教学实践,还对其他许多细节做了相应的修改。  本书自出版以来,世界各地已有100多所院校采用本书做教材,其中包括美国斯坦福大学、美国普林斯顿大学、英国牛津大学、日本东京大学等。相关网站有本书源代码及其他教辅资料,网址为:www-mitpress.mit.edu/sicp/作者简介:  Harold Abelson是MIT1992年度MacVicarFacultyFellow。Gerald JaySussman是Matsushita电子工程教授。他们都在MIT电子工程和计算机科学系工作.都得到过最重要的计算机科学教育奖:如 Abelson得到了IEEE计算机学会的Booth奖。Sussman得到了ACM的Karlstrom奖。  Julie Sussman是作家和编辑,同时使用自然语言和计算机语言写作。  每一位严肃的计算机科学家都应该阅读这本书。由于本书清晰、简洁和富于才智,我们强烈推荐本书,它适合所有希望深刻理解计算机科学的人们。书本目录:Contents viiForeword xiPreface to the Second Edition xvPreface to the First Edition xviiAcknowledgments xxi1 Building Abstractions with Procedures 11.1 The Elements of Programming 41.2 Procedures and the Processes They Generate 311.3 Formulating Abstractions with Higher-Order Procedures 562 Building Abstractions with Data 792.1 Introduction to Data Abstraction 832.2 Hierarchical Data and the Closure Property 972.3 Symbolic Data 1422.4 Multiple Representations for Abstract Data 1692.5 Systems with Generic Operations 1873 Modularity, Objects and State 2173.1 Assignment and Local State 2183.2 The Environmental Model of Evaluation 2363.3 Modeling with Mutable Data 2513.4 Concurrency: Time Is of the Essence 2973.5 Streams 3164 Metalinguistic Abstraction 3594.1 The Metaciricular Evaluator 3624.2 Variations on a Scheme--Lazy Evaluation 3984.3 Variations on a Scheme--Nondeterministic Computing 4124.4 Logic Programming 4385 Computing with Register Machines 4915.1 Designing Register Machines 4925.2 A Register-Machine Simulator 5135.3 Storage Allocation and Garbage Collection 5335.4 The Explicit Control Evaluator 5475.5 Compilation 566References 611List of Exercises 619Index 621

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值