首页 > 其他分享 >sicp每日一题[2.47]

sicp每日一题[2.47]

时间:2024-10-17 08:49:54浏览次数:1  
标签:origin cons 2.47 每日 sicp edge1 edge2 frame define

Exercise 2.47

Here are two possible constructors for frames:

(define (make-frame origin edge1 edge2)
  (list origin edge1 edge2))

(define (make-frame origin edge1 edge2)
  (cons origin (cons edge1 edge2)))

For each constructor supply the appropriate selectors to produce an implementation for frames.


这道题也不难,感觉是为了让我们熟悉 car 和 cdr 这两个函数。

(define (make-frame-by-list origin edge1 edge2)
  (list origin edge1 edge2))

(define (origin-frame-by-list frame)
  (car frame))

(define (edge1-frame-by-list frame)
  (cadr frame))

(define (edge2-frame-by-list frame)
  (caddr frame))

(define (make-frame-by-cons origin edge1 edge2)
  (cons origin (cons edge1 edge2)))

(define (origin-frame-by-cons frame)
  (car frame))

(define (edge1-frame-by-cons frame)
  (cadr frame))

(define (edge2-frame-by-cons frame)
  (cddr frame))


(define origin (make-vect 1 1))
(define v1 (make-vect 3 4))
(define v2 (make-vect -4 3))

(define frame1 (make-frame-by-list origin v1 v2))
(origin-frame-by-list frame1)
(edge1-frame-by-list frame1)
(edge2-frame-by-list frame1)

(define frame2 (make-frame-by-cons origin v1 v2))
(origin-frame-by-cons frame2)
(edge1-frame-by-cons frame2)
(edge2-frame-by-cons frame2)

; 执行结果
(mcons 1 1)
(mcons 3 4)
(mcons -4 3)
(mcons 1 1)
(mcons 3 4)
(mcons -4 3)

标签:origin,cons,2.47,每日,sicp,edge1,edge2,frame,define
From: https://www.cnblogs.com/think2times/p/18471322

相关文章

  • 20241016每日一题洛谷P1115
    普及-洛谷P1115最大子段和读题可知需要在一段一维数组中寻找一段唯一的区间,使区间内的数和最大,即寻找和最大区间可以想到前缀和的算法假设输入数组a[n]则前缀和数组b[n]=b[n-1]+a[n]那么从什么时候开始的一段区间才能使区间内的数和最大?从前缀和数组逐步来判断这一条......
  • 每日回顾:简单用C写 直接插入排序、希尔排序
    直接插入排序直接插入排序(StraightInsertionSort)是一种简单直观的排序算法。它的基本思想是将未排序的数据插入到已排序的序列中。大致思想:使用2个数组下标指针end、i模拟数组元素逐个进行插入的过程;i每递增一次,代表数组新插入一个元素。在这次循环中,end将逐渐递......
  • 每日学学Java开发规范,集合处理(附阿里巴巴Java开发手册(终极版))
    前言每次去不同的公司,码不同的代码,适应不同的规范,经常被老大教育规范问题,我都有点走火入魔的感觉,还是要去看看阿里巴巴Java开发规范,从中熟悉一下,纠正自己,码出高效,码出质量。想细看的可以去官网下载,或者下面自取阿里巴巴Java开发手册(终极版)五、集合处理【强制】关于hashCod......
  • 每日OJ题_牛客_礼物的最大价值_路径dp_C++_Java
    目录牛客_礼物的最大价值_路径dp题目解析C++代码Java代码牛客_礼物的最大价值_路径dp礼物的最大价值_牛客题霸_牛客网(nowcoder.com)描述:        在一个m×n的棋盘的每一格都放有一个礼物,每个礼物都有一定的价值(价值大于0)。你可以从棋盘的左上角开始拿格子......
  • 每日总结002
    一,今天追书追到凌晨5点......早上困的要命,上午的工程实训课是关于金属制作的,导师讲的内容一点都没听进去,制作过程也犯了各种各样的错误,例如要把一张20cm×20cm的铝片裁成15cm×17cm,我硬生生的裁成19.5cm×19.7cm...,期间同学提醒我这个尺寸不太对,但是我对我亲自量取的尺寸很自信,结......
  • 软件开发----Java基础每日刷题(转载于牛客)
    1.        A 是抽象父类或接口, B , C 派生自 A ,或实现 A ,现在 Java 源代码中有如下声明:1. A a0=new A();2. A a1=new B();3. A a2=new C();问以下哪个说法是正确的?()A        第1行不能通过编译B        第1、2行能通......
  • 每日总结001
    一.今天中午看了一本小说,看得着迷,然后很急切的想知道后续剧情,如果之前遇到这种情况,我会毫不犹豫的继续追,但是今天我做出了改变,我努力说服自己沉迷于小说会浪费很多宝贵的时间,我应该适可而止,并且下午还有课,最终我克服了自己的欲望,选择了休息。二.下午两点上课,中午1.15的闹钟响了......
  • Linux常用命令(每日两更)
     一、Linux基础命令1、bc数字计算器作用:用于数字计算以及进制转换#安装bc工具[root@192~]#yum-yinstallbc>/dev/null;echo-e"\a"​#bc用于数字计算[root@192~]#echo"1+1"|bc2​#bc用于进制转换obase表示输出的进制,ibase表示输入的进制[root@19......
  • 软考架构-每日综合知识14
    三级模式与两层映射三级模式:外模式对应视图,模式(也称为概念模式)对应数据库表,内模式对应物理文件。两层映像:外模式-模式映像,模式-内模式映像;两层映像可以保证数据库中的数据具有较高的逻辑独立性和物理独立性。数据库设计过程三个范式第一范式(......
  • sicp每日一题[2.44]
    我在这一章遇到了一个大问题,就是书上用的那些函数beside,wave,flip-vert我统统用不了。我用的是DrRacket这个软件,在网上查了半天,终于找到了解决办法。首先是官方教程,在DrRacket中依次打开File->PackageManager...,在弹出的页面中"DoWhatIMean"菜单页的输入:sicp,......