【CS61A 2024秋】Python入门课,全过程记录P7(Week13 Macros至完结)【完结撒花!】
文章目录
- 关于
- 新的问题
- 更好的解决方案
- Week13
- Mon Macros
- 阅读材料
- Lab 11: Programs as Data, Macros
- Q1: WWSD: Quasiquote
- Q2: If Program
- Q3: Exponential Powers
- Q4: Repeat
- Wed SQL
- 阅读材料
- Disc 11: Macros
- Q1: Mystery Macro
- Q2: Multiple Assignment
- Q3: Switch
- Optional Contest: Scheme Art
- Fri Tables
- 阅读材料
- HW 10: SQL
- Q1: By Parent Height
- Q2: Size of Dogs
- Q3: Sentences
- Q4: Low Variance
- Week14
- Mon Aggregation
- Wed No Lecture: Thanksgiving
- Fri No Lecture: Thanksgiving
- Week15
- Mon Databases
- 阅读材料
- Lab 12: SQL
- Q1: Room Sharing
- Q2: Two Rooms
- Q3: (OPTIONAL) Big Courses
- Q4: (OPTIONAL) Seats Remaining
- Wed Designing Functions
- Discussion 12: SQL
- Q1: Open Early
- Q2: Study Session
- Q3: Late Night Snack
- Q4: Double Pizza
- Fri Conclusion
- 阅读材料
- Homework 11: Finale
- Scheme Gallery
关于
个人博客,里面偶尔更新,最近比较忙。发一些总结的帖子和思考。
江湖有缘相见🤝。如果读者想和我交个朋友可以加我好友(见主页or个人博客),共同学习。笔者是学生,课业还是比较繁重的,可能回复不及时。笔者也正在四处寻找一些可以兼职锻炼知识并且补贴一些生活的工作,如果读者需要一些详细的辅导,或者帮助完成一些简易的lab也可以找我,笔者还是学生,自以为才学有限,也没有高价的理由📖。
新的问题

可以发现,cs61a归档了,而这个网站是需要Berkeley账号的,还是没法登录。这时候笔者决定使用档案馆网站,去翻网页的归档了。虽然有点难受,但是还能用orz。
对了,textbook是可以直接访问的,在这里
更好的解决方案
我在GitHub上找到了cs61a 2024 fall的归档,这里给出连接link
Week13
Mon Macros
阅读材料
Quasiquotation是反引用,宏展开?
Lab 11: Programs as Data, Macros
Q1: WWSD: Quasiquote
问答题。略。
Q2: If Program
构造if程序。
(define (if-program condition if-true if-false)(list 'if condition if-true if-false)
)
Q3: Exponential Powers
难题啊,太晕了。反引号是给宏展开,列表内元素有逗号的后面的元素所在子列表会进行eval操作。
(define (pow-expr base exp)(cond ((= exp 0) 1) ((even? exp) `(square ,(pow-expr base (/ exp 2)))) ; if exp is even, apply square(else `(* ,base ,(pow-expr base (- exp 1)))))) ; if exp is odd
Q4: Repeat
宏魔法。
(define-macro (repeat n expr)`(repeated-call ,n (lambda () ,expr))); Call zero-argument procedure f n times and return the final result.
(define (repeated-call n f)(if (= n 1)(f)(begin (f) (repeated-call (- n 1) f))))
Wed SQL
阅读材料
喜闻乐见SQL。

居然有ByteDance。
Structured Query Language (SQL)
Disc 11: Macros
Q1: Mystery Macro
神秘的宏。
(define-macro (mystery-macro expr old new)(mystery-helper expr old new))(define (mystery-helper e o n)(if (pair? e)(cons (mystery-helper (car e) o n) (mystery-helper (cdr e) o n))(if (eq? e o) n e)))
功能是把列表中的old替换成new。
Q2: Multiple Assignment
实现同时赋值。
(define-macro (assign sym1 sym2 expr1 expr2)`(begin(define ,sym1 ,expr1)(define ,sym2 ,expr2)))(assign x y (+ 1 1) 3)
(assign x y y x)
(expect x 3)
(expect y 2)
上面这样简单粗暴的写的。第一次x=2,y=3,第二次,x=3,y=3了。使用eval的话可能是因为优先级比较高。
(define-macro (assign sym1 sym2 expr1 expr2)`(begin(define ,sym1 ,expr1)(define ,sym2 ,(eval expr2))))(assign x y (+ 1 1) 3)
(assign x y y x)
(expect x 3)
(expect y 2)
Q3: Switch
宏版的Switch。宏真的抽象的黑魔法。这里map内要另外的反引号,引号map递归计算cases里面的元素。
(define-macro (switch expr cases)`(let ((val ,expr)),(cons'cond(map (lambda (case) (cons`(equal? val ,(car case))(cdr case)))cases))))
Optional Contest: Scheme Art
这个貌似是画图的,略了。
Fri Tables
阅读材料
讲解一些SQL知识。
HW 10: SQL

可以看到sqlite,sqlite是轻量级的数据库。据说大部分的手机APP都使用sqlite,包括微信。
Q1: By Parent Height
创建表格的方法第一次见,是通过UNION实现的。
现在是2025年了,写SQL语句对于AI来说轻而易举,只会CRUD可都得被淘汰。
首先找到有父母的狗,再对应上父母的体重,再根据父母体重排序。
-- All dogs with parents ordered by decreasing height of their parent
CREATE TABLE by_parent_height ASSELECT d.name AS dog_nameFROM dogs dJOIN parents p ON d.name = p.childJOIN dogs pd ON p.parent = pd.nameORDER BY pd.height DESC;
Q2: Size of Dogs
根据体重确定狗的类型。
-- The size of each dog
CREATE TABLE size_of_dogs ASSELECT d.name AS name, s.size AS sizeFROM dogs dJOIN sizes sON d.height > s.min AND d.height <= s.max;
Q3: Sentences
一堆查表连接。
-- [Optional] Filling out this helper table is recommended
CREATE TABLE siblings ASSELECT p1.child AS sibling1, p2.child AS sibling2FROM parents p1JOIN parents p2 ON p1.parent = p2.parentWHERE p1.child < p2.child;-- Sentences about siblings that are the same size
CREATE TABLE sentences ASSELECT "The two siblings, " || s1.name || " and " || s2.name || ", have the same size: " || ss1.size AS sentenceFROM siblingsJOIN dogs s1 ON siblings.sibling1 = s1.nameJOIN dogs s2 ON siblings.sibling2 = s2.nameJOIN size_of_dogs ss1 ON ss1.name = s1.nameJOIN size_of_dogs ss2 ON ss2.name = s2.nameWHERE ss1.size = ss2.size;
Q4: Low Variance
只有满足低方差类型的毛发种类的狗才输出。
-- Height range for each fur type where all of the heights differ by no more than 30% from the average height
CREATE TABLE low_variance ASSELECT fur, MAX(height) - MIN(height) AS height_rangeFROM dogsWHERE fur IN (SELECT d.furFROM dogs dJOIN (SELECT fur, AVG(height) AS avg_heightFROM dogsGROUP BY fur) AS avg_heights ON d.fur = avg_heights.furGROUP BY d.furHAVING MIN(d.height) >= 0.7 * avg_heights.avg_heightAND MAX(d.height) <= 1.3 * avg_heights.avg_height)GROUP BY fur;
Week14
Mon Aggregation
讲了一些关于SQL的语法。
Wed No Lecture: Thanksgiving
Fri No Lecture: Thanksgiving
Week15
Mon Databases
阅读材料
讲了一些其他的语法。
Lab 12: SQL
Q1: Room Sharing
找到每门课和别的课程共用的房间数。
CREATE TABLE sharing ASSELECT a.course, COUNT(DISTINCT a.hall) AS sharedFROM finals AS a, finals AS bWHERE a.course <> b.course and a.hall == b.hall GROUP BY a.course;
Q2: Two Rooms
case语句。
CREATE TABLE pairs AS
SELECT CASE WHEN a.room < b.room THEN a.room || ' and ' || b.roomELSE b.room || ' and ' || a.roomEND || ' together have ' || (a.seats + b.seats) || ' seats' AS rooms
FROM sizes AS a, sizes AS b
WHERE a.room < b.room AND a.seats + b.seats >= 1000
ORDER BY a.seats + b.seats DESC;
Q3: (OPTIONAL) Big Courses
连接+聚合。
CREATE TABLE big AS
SELECT f.course
FROM finals f
JOIN sizes s ON f.hall = s.room
GROUP BY f.course
HAVING SUM(s.seats) >= 1000;
Q4: (OPTIONAL) Seats Remaining
作个减法。
CREATE TABLE remaining AS
SELECT f.course,SUM(s.seats) - MAX(s.seats) AS remaining
FROM finals f
JOIN sizes s ON f.hall = s.room
GROUP BY f.course;
Wed Designing Functions
Discussion 12: SQL
Q1: Open Early
找到在13点前开门的店。
-- Pizza places that open before 1pm in alphabetical order
SELECT p.name as name
FROM pizzas p
WHERE p.open < 13
ORDER BY name DESC
;
Q2: Study Session
都是晚上关门,直接和14减。
-- Pizza places and the duration of a study break that ends at 14 o'clock
SELECT name,MAX(14 - open, 0) AS duration
FROM pizzas
ORDER BY duration DESC;
Q3: Late Night Snack
比较ez。
-- Pizza places that are open for late-night-snack time and when they closeSELECT p.name || " closes at " || p.close AS statusFROM pizzas p, meals mWHERE m.time <= p.close and m.meal = 'snack';
Q4: Double Pizza
多表。
-- Two meals at the same place
SELECT m1.meal AS first, m2.meal AS second, p.name
FROM meals m1, meals m2, pizzas p
WHERE m2.time - m1.time > 6AND p.open <= m1.time AND p.close >= m1.timeAND p.open <= m2.time AND p.close >= m2.time;
Fri Conclusion
阅读材料
复习与总结。
Homework 11: Finale
学评教?
Scheme Gallery
上面scheme画画的作品集。
相关文章:
【CS61A 2024秋】Python入门课,全过程记录P7(Week13 Macros至完结)【完结撒花!】
文章目录 关于新的问题更好的解决方案Week13Mon Macros阅读材料Lab 11: Programs as Data, MacrosQ1: WWSD: QuasiquoteQ2: If ProgramQ3: Exponential PowersQ4: Repeat Wed SQL阅读材料Disc 11: MacrosQ1: Mystery MacroQ2: Multiple AssignmentQ3: Switch Optional Contest:…...
SSH隧道+Nginx:绿色通道详解(SSH Tunnel+nginx: Green Channel Detailed Explanation)
SSH隧道Nginx:内网资源访问的绿色通道 问题背景 模拟生产环境,使用两层Nginx做反向代理,请求公网IP来访问内网服务器的网站。通过ssh隧道反向代理来实现,重点分析一下nginx反代的基础配置。 实验环境 1、启动内网服务器的tomca…...
LabVIEW用户界面设计原则
在LabVIEW开发中,用户界面(UI)设计不仅仅是为了美观,它直接关系到用户的操作效率和体验。一个直观、简洁、易于使用的界面能够大大提升软件的可用性,尤其是在复杂的实验或工业应用中。设计良好的UI能够减少操作错误&am…...
Datawhale 数学建模导论二 2025年2月
第6章 数据处理与拟合模型 本章主要涉及到的知识点有: 数据与大数据Python数据预处理常见的统计分析模型随机过程与随机模拟数据可视化 本章内容涉及到基础的概率论与数理统计理论,如果对这部分内容不熟悉,可以参考相关概率论与数理统计的…...
SQL CASE表达式的用法
SQL CASE表达式的用法 一、CASE表达式的基础语法简单CASE表达式搜索CASE表达式 二、简单CASE表达式的应用示例三、搜索CASE表达式的应用示例四、CASE表达式在聚合函数中的应用五、嵌套CASE表达式的应用 今天在也无力用到了CASE表达式,于是有了这篇博客,C…...
趣味魔法项目 LinuxPDF —— 在 PDF 中启动一个 Linux 操作系统
最近,一位开源爱好者开发了一个LinuxPDF 项目(ading2210/linuxpdf: Linux running inside a PDF file via a RISC-V emulator),它的核心功能是在一个 PDF 文件中启动并运行 Linux 操作系统。它通过巧妙地使用 PDF 文件格式中的 Ja…...
win32汇编环境,窗口程序使用跟踪条(滑块)控件示例一
;运行效果 ;win32汇编环境,窗口程序使用跟踪条(滑块)控件示例一 ;生成2条横的跟踪条,分别设置不同的数值范围,设置不同的进度副度的例子 ;直接抄进RadAsm可编译运行。重要部分加备注。 ;下面为asm文件 ;>>>>>>>>>>>>>>>>>…...
mars3d接入到uniapp的时候ios上所有地图的瓦片都无法加载解决方案
用的是【Mars3d】官网的uniapp的仓库,安卓没有问题,但是ios的不行 相关链接 mars3d-uni-app: uni-app技术栈下的Mars3D项目模板 解决方案:感觉所有图片请求全被拦截了 uniapp的ios内核不允许跨域,需要先把瓦片下载后转base64&…...
使用 Notepad++ 编辑显示 MarkDown
Notepad 是一款免费的开源文本编辑器,专为 Windows 用户设计。它是替代记事本(Notepad)的最佳选择之一,因为它功能强大且轻量级。Notepad 支持多种编程语言和文件格式,并可以通过插件扩展其功能。 Notepad 是一款功能…...
wordpress主题制作
工具/原料 <P><BR>使用divcss语言编写的html静态页面一个</P> <P>Macromedia Dreamweaver软件<BR></P> WordPress主题结构分析 1 1、index.php首页模板(最基本) ---- 1、header.php头部 ---- 2、sidebar.php侧边…...
MybatisPlus常用增删改查
记录下MybatisPlus的简单的增删改查 接口概述 Service和Mapper区别 Mapper简化了单表的sql操作步骤(CRUD),而Serivce则是对Mapper的功能增强。 Service虽然加入了数据库的操作,但还是以业务功能为主,而更加复杂的SQL…...
Citus的TPCC、TPCH性能测试
Citus的TPCC、TPCH性能测试 文章目录 Citus的TPCC、TPCH性能测试测试的目的适用范围测试环境架构信息硬件配置操作系统软件版本 测试结果TPCC测试测试结果TPCH测试测试结果 一、环境部署1.1、安装BenchmarkSQL1.2、PostgreSQL安装1.3、nmon部署1.4、TPC-H测试的生成数据工具安装…...
蓝桥杯---颜色分类(leetcode第75题)题解
文章目录 1.问题重述2.思路分析3.代码分析 1.问题重述 颜色分类,实际上就是赋予了三种颜色不同的数值,0,1,2分别代表的就是一个类型的颜色,我们题目说的是对于颜色进行分类,实际上就是对于0,1,2进行分类,我们把很多数…...
C语言基础13:循环结构 for和while
循环结构 什么是循环结构 代码在满足某种条件的前提下,重复执行,就叫做循环结构。 循环的分类 无限循环:其实就是死循环,程序设计中尽量避免无限循环,如果非要使用,那么这个循环一定要在可控范围内。有…...
六西格玛设计培训如何破解风电设备制造质量与成本困局
2023年,中国风电行业装机容量突破4.3亿千瓦,稳居全球第一,但高速扩张背后暗藏隐忧: 质量痛点:叶片开裂、齿轮箱故障等缺陷频发,运维成本占项目全生命周期成本超30%;成本压力:原材料…...
【Android开发】安卓手机APP使用机器学习进行QR二维码识别
前言:本项目是一个 Android 平台的二维码扫描应用,具备二维码扫描和信息展示功能。借助 AndroidX CameraX 库实现相机的预览、图像捕获与分析,使用 Google ML Kit 进行二维码识别。为方便大家了解项目全貌,以下将介绍项目核心代码文件 MainActivity.java 和 AndroidManifes…...
Zabbix-监控SSL证书有效期
背景 项目需要,需要监控所有的SSL证书的有效期,因此需要自定义一个监控项 实现 创建自定义脚本 在Zabbix的scripts目录(/etc/zabbix/scripts/)下创建一个新的shell脚本check_ssl.sh,内容如下 #!/bin/bash time$(echo | openssl s_client…...
生成式聊天机器人 -- 基于Pytorch + Global Attention + 双向 GRU 实现的SeqToSeq模型 -- 上
生成式聊天机器人 -- 基于Pytorch Global Attention 双向 GRU 实现的SeqToSeq模型 -- 上 前言数据预处理下载并加载数据原始数据格式化数据清洗与字典映射转换为模型需要的数据格式 SeqToSeq 模型Encoder 编码器Decoder 解码器全局注意力机制解码器实现 前言 本文会介绍使用…...
Kickstart自动化安装过程中自动选择较小的磁盘安装操作系统
Kickstart自动化安装过程中自动选择较小的磁盘安装操作系统 需求 在实际生成操作过程中,一般会遇到物理服务器存在多块盘的情况。 安装过程中,磁盘的标签是随机分配的,并不是空间较小的盘,就会使用较小的磁盘标签 而需求往往需要…...
基于进化式大语言模型的下一代漏洞挖掘范式:智能对抗与自适应攻防体系
摘要 本文提出了一种基于进化式大语言模型(Evolutionary LLM)的智能漏洞挖掘框架,突破了传统静态分析的局限,构建了具备对抗性思维的动态攻防体系。通过引入深度强化学习与多模态感知机制,实现了漏洞挖掘过程的自适应进化,在RCE、SQLi、XXE等关键漏洞类型的检测中达到97…...
(LeetCode 每日一题) 3442. 奇偶频次间的最大差值 I (哈希、字符串)
题目:3442. 奇偶频次间的最大差值 I 思路 :哈希,时间复杂度0(n)。 用哈希表来记录每个字符串中字符的分布情况,哈希表这里用数组即可实现。 C版本: class Solution { public:int maxDifference(string s) {int a[26]…...
云计算——弹性云计算器(ECS)
弹性云服务器:ECS 概述 云计算重构了ICT系统,云计算平台厂商推出使得厂家能够主要关注应用管理而非平台管理的云平台,包含如下主要概念。 ECS(Elastic Cloud Server):即弹性云服务器,是云计算…...
Golang dig框架与GraphQL的完美结合
将 Go 的 Dig 依赖注入框架与 GraphQL 结合使用,可以显著提升应用程序的可维护性、可测试性以及灵活性。 Dig 是一个强大的依赖注入容器,能够帮助开发者更好地管理复杂的依赖关系,而 GraphQL 则是一种用于 API 的查询语言,能够提…...
微信小程序 - 手机震动
一、界面 <button type"primary" bindtap"shortVibrate">短震动</button> <button type"primary" bindtap"longVibrate">长震动</button> 二、js逻辑代码 注:文档 https://developers.weixin.qq…...
浅谈不同二分算法的查找情况
二分算法原理比较简单,但是实际的算法模板却有很多,这一切都源于二分查找问题中的复杂情况和二分算法的边界处理,以下是博主对一些二分算法查找的情况分析。 需要说明的是,以下二分算法都是基于有序序列为升序有序的情况…...
是否存在路径(FIFOBB算法)
题目描述 一个具有 n 个顶点e条边的无向图,该图顶点的编号依次为0到n-1且不存在顶点与自身相连的边。请使用FIFOBB算法编写程序,确定是否存在从顶点 source到顶点 destination的路径。 输入 第一行两个整数,分别表示n 和 e 的值(1…...
Maven 概述、安装、配置、仓库、私服详解
目录 1、Maven 概述 1.1 Maven 的定义 1.2 Maven 解决的问题 1.3 Maven 的核心特性与优势 2、Maven 安装 2.1 下载 Maven 2.2 安装配置 Maven 2.3 测试安装 2.4 修改 Maven 本地仓库的默认路径 3、Maven 配置 3.1 配置本地仓库 3.2 配置 JDK 3.3 IDEA 配置本地 Ma…...
IP如何挑?2025年海外专线IP如何购买?
你花了时间和预算买了IP,结果IP质量不佳,项目效率低下不说,还可能带来莫名的网络问题,是不是太闹心了?尤其是在面对海外专线IP时,到底怎么才能买到适合自己的呢?所以,挑IP绝对是个技…...
华为OD机考-机房布局
import java.util.*;public class DemoTest5 {public static void main(String[] args) {Scanner in new Scanner(System.in);// 注意 hasNext 和 hasNextLine 的区别while (in.hasNextLine()) { // 注意 while 处理多个 caseSystem.out.println(solve(in.nextLine()));}}priv…...
6个月Python学习计划 Day 16 - 面向对象编程(OOP)基础
第三周 Day 3 🎯 今日目标 理解类(class)和对象(object)的关系学会定义类的属性、方法和构造函数(init)掌握对象的创建与使用初识封装、继承和多态的基本概念(预告) &a…...
