sicp每日一题[2.2]

embedded/2024/12/22 14:16:08/

Exercise 2.2

Consider the problem of representing line segments in a plane. Each segment is represented as a pair of points: a starting point and an ending point. Define a constructor m a k e − s e g m e n t make-segment makesegment and selectors s t a r t − s e g m e n t start-segment startsegment and e n d − s e g m e n t end-segment endsegment that define the representation of segments in terms of points. Furthermore, a point can be represented as a pair of numbers: the x x x coordinate and the y y y coordinate. Accordingly, specify a constructor m a k e − p o i n t make-point makepoint and selectors x − p o i n t x-point xpoint and $y-point $that define this representation. Finally, using your selectors and constructors, define a procedure m i d p o i n t − s e g m e n t midpoint-segment midpointsegment that takes a line segment as argument and returns its midpoint (the point whose coordinates are the average of the coordinates of the endpoints). To try your procedures, you’ll need a way to print points:

(define (print-point p)(newline)(display "(")(display (x-point p))(display ",")(display (y-point p))(display ")"))

这道题目很简单,主要是为了检查我们是否理解了嵌套使用抽象数据结构的概念,有点像 Python 里的列表,每个列表元素也可以是列表。

(define (make-point x y)(cons x y))(define (x-point p) (car p))(define (y-point p) (cdr p))(define (make-segment start end)(cons start end))(define (start-segment segment)(car segment))(define (end-segment segment)(cdr segment)); 线段中点坐标就是起点和终点横纵坐标的平均值
(define (midpoint-segment segment)(let ((start (start-segment segment))(end (end-segment segment)))(make-point (average (x-point start) (x-point end))(average (y-point start) (y-point end))))); 设置线段起点为(3, 5),终点为(7, 7),中点应该为(5, 6)
(define start (make-point 3 5))
(define end (make-point 7 7))
(define line (make-segment start end))
(print-point (midpoint-segment line)); 执行结果
(5, 6)

http://www.ppmy.cn/embedded/108636.html

相关文章

QT如何判断一个文件是否存在

在Qt中&#xff0c;判断一个文件是否存在是一个常见的操作&#xff0c;可以通过QFile类和QDir类来实现。不过&#xff0c;对于简单的文件存在性检查&#xff0c;QFile类提供的接口更为直接。下面是一个使用QFile类来判断文件是否存在的例子&#xff1a; #include <QFile>…

枚举类实现单例模式——最优解决方案

在 Java 中&#xff0c;实现单例模式的方式有很多&#xff0c;如饿汉式、懒汉式、双重校验锁、静态内部类等。然而&#xff0c;所有这些方法都存在一定的局限性或潜在的安全隐患&#xff0c;如反射和序列化的破坏。在这些方法中&#xff0c;枚举类实现单例模式被认为是最好的选…

【开源大模型生态4】大模型和安卓时刻

开源大模型&#xff0c;指基于开源软件模式&#xff0c;由全球开发者共同参与、共同维护、共同发展的机器学习模型。 我们之前有过关于开源大模型和对应开源协议的探讨&#xff1a; 【AI】马斯克说大模型要开源&#xff0c;我们缺的是源代码&#xff1f;&#xff08;附一图看…

【BUUCTF】HardSQL

题目描述 一道纯粹的SQL注入题 尝试进行注入&#xff0c;发现对以下字符进行了过滤&#xff1a; %20&#xff08;空格&#xff09; %09 %0a %0b %0c %0d /**/ substr union by and且过滤方式不区分大小写&#xff0c;检测到以上字符就die() 题解 先找注入点&#xff0c;由于…

二百六十、Java——采集Kafka数据,解析成一条条数据,写入另一Kafka中(复杂JSON)

一、目的 由于部分数据类型频率为1s&#xff0c;从而数据规模特别大&#xff0c;因此完整的JSON放在Hive中解析起来&#xff0c;尤其是在单机环境下&#xff0c;效率特别慢&#xff0c;无法满足业务需求。 而Flume的拦截器并不能很好的转换数据&#xff0c;因为只能采用Java方…

【数据结构】二叉树的前中后序遍历以及层序遍历(全解)

文章目录 前言1. 前中后序遍历1.1 遍历规则1.2 代码实现1.3 图解遍历 2. 层序遍历3.结点个数以及高度等4. 判断是否为完全二叉树5. 结语 前言 在前面学习完链式结构的二叉树之后&#xff0c;我们就可以进一步了解二叉树的几种遍历方式了&#xff0c;注意这里就可以深刻的体会到…

C语言小游戏--贪吃蛇实现

C语言小游戏--贪吃蛇实现 1.游戏实现背景2.Win32 API介绍2.1什么是Win32 API2.2控制台程序(Console)2.3控制台屏幕的坐标COORD2.4GetStdHandle2.4.1函数语法2.4.2函数的使用 2.5GetConsoleCursorInfo2.5.1函数语法2.5.2函数的使用 2.6CONSOLE_CURSOR_INFO2.6.1结构体结构2.6.2结…

自己看---华为od-数大雁

题目描述 一群大雁往南飞&#xff0c;给定一个字符串记录地面上的游客听到的大雁叫声&#xff0c;请给出叫声最少由几只大雁发出。 具体的: 1.大雁发出的完整叫声为”quack“&#xff0c;因为有多只大雁同一时间嘎嘎作响&#xff0c;所以字符串中可能会混合多个”quack”。 …