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

XML Group端口详解
在XML数据映射过程中,经常需要对数据进行分组聚合操作。例如,当处理包含多个物料明细的XML文件时,可能需要将相同物料号的明细归为一组,或对相同物料号的数量进行求和计算。传统实现方式通常需要编写脚本代码,增加了开…...
Admin.Net中的消息通信SignalR解释
定义集线器接口 IOnlineUserHub public interface IOnlineUserHub {/// 在线用户列表Task OnlineUserList(OnlineUserList context);/// 强制下线Task ForceOffline(object context);/// 发布站内消息Task PublicNotice(SysNotice context);/// 接收消息Task ReceiveMessage(…...

中南大学无人机智能体的全面评估!BEDI:用于评估无人机上具身智能体的综合性基准测试
作者:Mingning Guo, Mengwei Wu, Jiarun He, Shaoxian Li, Haifeng Li, Chao Tao单位:中南大学地球科学与信息物理学院论文标题:BEDI: A Comprehensive Benchmark for Evaluating Embodied Agents on UAVs论文链接:https://arxiv.…...

基于当前项目通过npm包形式暴露公共组件
1.package.sjon文件配置 其中xh-flowable就是暴露出去的npm包名 2.创建tpyes文件夹,并新增内容 3.创建package文件夹...
TRS收益互换:跨境资本流动的金融创新工具与系统化解决方案
一、TRS收益互换的本质与业务逻辑 (一)概念解析 TRS(Total Return Swap)收益互换是一种金融衍生工具,指交易双方约定在未来一定期限内,基于特定资产或指数的表现进行现金流交换的协议。其核心特征包括&am…...

用docker来安装部署freeswitch记录
今天刚才测试一个callcenter的项目,所以尝试安装freeswitch 1、使用轩辕镜像 - 中国开发者首选的专业 Docker 镜像加速服务平台 编辑下面/etc/docker/daemon.json文件为 {"registry-mirrors": ["https://docker.xuanyuan.me"] }同时可以进入轩…...
【C++从零实现Json-Rpc框架】第六弹 —— 服务端模块划分
一、项目背景回顾 前五弹完成了Json-Rpc协议解析、请求处理、客户端调用等基础模块搭建。 本弹重点聚焦于服务端的模块划分与架构设计,提升代码结构的可维护性与扩展性。 二、服务端模块设计目标 高内聚低耦合:各模块职责清晰,便于独立开发…...

全志A40i android7.1 调试信息打印串口由uart0改为uart3
一,概述 1. 目的 将调试信息打印串口由uart0改为uart3。 2. 版本信息 Uboot版本:2014.07; Kernel版本:Linux-3.10; 二,Uboot 1. sys_config.fex改动 使能uart3(TX:PH00 RX:PH01),并让boo…...

C++ Visual Studio 2017厂商给的源码没有.sln文件 易兆微芯片下载工具加开机动画下载。
1.先用Visual Studio 2017打开Yichip YC31xx loader.vcxproj,再用Visual Studio 2022打开。再保侟就有.sln文件了。 易兆微芯片下载工具加开机动画下载 ExtraDownloadFile1Info.\logo.bin|0|0|10D2000|0 MFC应用兼容CMD 在BOOL CYichipYC31xxloaderDlg::OnIni…...

《Docker》架构
文章目录 架构模式单机架构应用数据分离架构应用服务器集群架构读写分离/主从分离架构冷热分离架构垂直分库架构微服务架构容器编排架构什么是容器,docker,镜像,k8s 架构模式 单机架构 单机架构其实就是应用服务器和单机服务器都部署在同一…...