【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…...

408第一季 - 数据结构 - 树与二叉树II
二叉树的先中后序遍历 理解 那主播,请问你有没有更快的遍历方式呢 有的,兄弟有的 以中序遍历为例啊 找左边有没有东西,左边没东西那它就自由了,就按上面的图举例子 A左边有东西,是B,B左边没东西…...

第23讲、Odoo18 邮件系统整体架构
目录 Odoo 邮件系统整体架构邮件发送方式邮件模板配置SMTP 邮件服务器配置邮件发送过程开发中常见邮件发送需求常见问题排查提示与最佳实践完整示例:审批通过自动发邮件门户表单自动邮件通知案例邮件队列与异步发送邮件添加附件邮件日志与调试多语言邮件模板邮件安…...

以智能管理为基础,楼宇自控打造建筑碳中和新路径
在全球气候变化的严峻形势下,“碳中和”已成为各国发展的重要战略目标。建筑行业作为能源消耗与碳排放的“大户”,其运行阶段的能耗占全社会总能耗近40%,碳排放占比与之相当,实现建筑碳中和迫在眉睫。传统建筑管理模式下ÿ…...

vue3 + vite实现动态路由,并进行vuex持久化设计
在后台管理系统中,如何根据后端返回的接口,来动态的设计路由呢,今天一片文章带你们解 1、在vuex中设置一个方法 拿到完整的路由数据 const state {routerList: []}; const mutations { dynameicMenu(state, payload) {// 第一步 通过glob…...
零基础在实践中学习网络安全-皮卡丘靶场(第十六期-SSRF模块)
最后一期了,感谢大家一直以来的关注,如果您对本系列文章内容有问题或者有更好的方法,请在评论区发送。 介绍 其形成的原因大都是由于服务端提供了从其他服务器应用获取数据的功能,但又没有对目标地址做严格过滤与限制导致攻击者可以传入任意…...

华为云Flexus+DeepSeek征文|DeepSeek-V3/R1开通指南及使用心得
🏆作者简介,黑夜开发者,CSDN领军人物,全栈领域优质创作者✌,CSDN博客专家,阿里云社区专家博主,2023年CSDN全站排名top 28。 🏆数年电商行业从业经验,AWS/阿里云资深使用用…...

Golang——5、函数详解、time包及日期函数
函数详解、time包及日期函数 1、函数1.1、函数定义1.2、函数参数1.3、函数返回值1.4、函数类型与变量1.5、函数作参数和返回值1.6、匿名函数、函数递归和闭包1.7、defer语句1.8、panic和recover 2、time包以及日期函数2.1、time.Now()获取当前时间2.2、Format方法格式化输出日期…...
STM32实战:数字音频播放器开发指南
基于STM32的数字音频播放器/效果器是个很棒的项目!这涉及到多个嵌入式开发的关键技术点。下面我为你拆解实现方案和关键学习内容: 系统架构概览 [SD Card] -> [File System (FATFS)] -> [Audio Decoder (WAV/MP3)] -> [DSP Processing (EQ, R…...
Java 类型参数 T、R 、 O 、K、V 、E 、? 区别
在 Java 泛型和函数式编程中,T、R 和 O 都是类型参数(Type Parameters),它们的主要区别在于命名约定和上下文含义,而不是语言层面的区别。它们可以互换使用,但通常遵循一定的命名习惯以提高代码可读性。 1.…...
学习记录aigc
1、DIT https://zhuanlan.zhihu.com/p/683612528 DiT最大的创新点是将Transformer引入到了扩散模型中,并完全抛弃了CNN。但是DiT并不是第一个引入Transformer的,例如之前的U-ViT,UniDiffuser等都尝试了将Transformer引入到扩散模型中。至于…...