UC Berkeley · Summer 2026
CS 61A

Structure and Interpretation of Computer Programs

23 讲全程中文笔记 + 21 份作业手把手解析。所有代码都跑过官方评分器。

教材:Composing Programs 官网:cs61a.org

0. 这份材料是什么

CS 61A 是伯克利的编程入门课,但它教的不是「Python 语法」,而是 一段代码被求值时到底发生了什么——名字如何绑定到值、 环境如何串成链、递归为什么可以信任、以及一门语言是怎么被另一门语言实现出来的。 这份材料按这个主线重写了全部课程内容。

和「看幻灯片」有什么不同
  • 凡是涉及求值的地方,都画出逐步过程:环境图、帧、递归展开到 base case 再逐层回代,不用「递归处理子问题」一句话糊弄过去。
  • 作业解析的重点不是给答案,而是「怎么想到的」——包括走过的弯路:先想到什么、在哪种输入下会崩、于是怎么改。
  • 常见误区写的是真实会犯的错和它的真实报错,不是「注意边界条件」这种空话。

1. 代码验证状态

所有 lab、homework 与项目的代码都在本仓库里真实实现,并用课程官方的 ok 自动评分器在本地跑过。

合计 1,839 个测试用例通过
  • 19 份作业 全部题目通过。
  • lab00 与 hw03 各有一道 survey 题,需要课程给选课学生发放的私有口令(校外无法获得)。这两题必然不通过,页面上如实标注,没有伪造口令,也没有假装全绿;两份作业的其余题目均已通过。
  • WWPD / Scheme WWSD 这类概念题的答案在官方测试文件里是 HMAC 哈希。本项目的做法是真的执行代码推出答案再与哈希比对(见 _src/unlock.py),对不上就标为未解决——所以笔记里讲的求值结果都是被证伪检验过的,不是凭印象写的。

2. 讲义笔记

第一部分 · 用函数构建抽象
第二部分 · 用数据构建抽象
第三部分 · 对象、可变数据与效率
第四部分 · 解释器
第五部分 · 声明式编程

第 24–28 讲为特别专题(AI 编程工具、Web 应用、计算机安全)与期末复习,课程未公开对应幻灯片,故本站未收录。

3. Lab 解析

4. Homework 解析

5. 项目解析

6. 仓库结构

路径内容
lecture-NN.html各讲学习笔记
lab-NN.html / hw-NN.html / proj-*.html作业解析
labs/ hw/ proj/真实可运行的作业代码,含官方 ok 评分器
slides/lecture_NN/官方幻灯片逐页图片
_src/unlock.py执行代码推导 WWPD 答案并与官方哈希比对
_src/grade.py批量跑 ok,产出 grade_report.json
_src/validate.py校验 HTML 结构、图片存在性与代码转义
_src/SPEC.md写作规范

自己跑一遍

# 跑单份作业的官方评分器
cd labs/lab01 && python3 ok --local

# 批量评分,产出 _src/grade_report.json
python3 _src/grade.py

# 校验全部 HTML
python3 _src/validate.py