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

sicp每日一题[2.44]

时间:2024-10-14 08:52:17浏览次数:1  
标签:2.44 up 每日 sicp wave beside below split painter

我在这一章遇到了一个大问题,就是书上用的那些函数 beside, wave, flip-vert 我统统用不了。我用的是 DrRacket 这个软件,在网上查了半天,终于找到了解决办法。
首先是官方教程,在 DrRacket 中依次打开 File -> Package Manager...,在弹出的页面中 "Do What I Mean" 菜单页的输入:sicp,回车之后自动安装就行了。
但是我试了好几次,总是因为网络问题没法下载成功,最后求助于 chatgpt 终于解决了。
首先是手动下载 sicp 包到 Racket 安装目录,然后打开 cmd 命令行,输入 raco pkg install ./sicp 即可用本地的 sicp 目录安装包。
安装好之后,重启 DrRacket 软件,依次点击上方菜单栏的 Language -> Choose Language,在弹出的页面中,找到 Teaching Languages(ctl-T) 下选择 SICP(PLaneT 1.18),点击 OK。
再次回到代码编辑页面后,就不需要开头的 #lang racket 了,直接写代码就行。
还有一点,安装的 sicp 包里也是没有 wave, rogers 的,但是提供了 einstein,所以可以用 (define wave einstein) 替换掉或者把书上所有代码里的 wave 都用 einstein 代替。不过直接在文件里输入 einstein 或者 wave 是看不到图象的,而是以以 #procedure 的形式存在的,需要用 (paint einstein) 显式地调用,这样就可以看到爱神的头像了。

Exercise 2.44

Define the procedure up-split used by corner-split. It is similar to right-split, except that it switches the roles of below and beside.


这道题非常的简单,就像题目所说的那样,只要交换 below 和 beside 的位置就行。

(paint (right-split wave 1))

(define (up-split painter n)
  (if (= n 0)
      painter
      (let ((smaller (up-split painter (- n 1))))
        (below painter (beside smaller smaller)))))

(paint (up-split wave 1))

(define (corner-split painter n)
  (if (= n 0)
      painter
      (let ((up (up-split painter (- n 1)))
            (right (right-split painter (- n 1))))
        (let ((top-left (beside up up))
              (bottom-right (below right right))
              (corner (corner-split painter (- n 1))))
          (beside (below painter top-left)
                  (below bottom-right corner))))))

(paint (corner-split wave 1))
(paint (corner-split wave 2))

效果如下图:



不过这是全新的内容,我觉得最好先理解 below 和 beside 的作用,其实就是字面意思,beside 是把2个图形左右排列,第一个图形在左边;below 是把2个图形上下排列,但是要注意它是把第二个图形放在上面,如下图所示:

(define wave einstein)

(paint (beside wave (below wave wave)))
(paint (below (beside wave wave) wave))


标签:2.44,up,每日,sicp,wave,beside,below,split,painter
From: https://www.cnblogs.com/think2times/p/18463378

相关文章

  • 每日OJ题_牛客_NC101压缩字符串(一)_模拟_C++_Java
    目录牛客_NC101压缩字符串(一)_模拟题目解析C++代码Java代码牛客_NC101压缩字符串(一)_模拟压缩字符串(一)_牛客题霸_牛客网(nowcoder.com)描述:        利用字符重复出现的次数,编写一种方法,实现基本的字符串压缩功能。比如,字符串aabcccccaaa会变为a2bc5a3。......
  • 高级java每日一道面试题-2024年10月13日-数据库篇[Redis篇]-怎么保证缓存和数据库数据
    如果有遗漏,评论区告诉我进行补充面试官:怎么保证缓存和数据库数据的一致性?我回答:在分布式系统中,保证缓存和数据库数据的一致性是一个常见的挑战。由于缓存的引入主要是为了提高系统的性能和响应速度,但这也带来了数据一致性的问题。以下是一些常用的方法来保证缓存和......
  • 高级java每日一道面试题-2024年10月11日-数据库篇[Redis篇]-Redis都有哪些使用场景?
    如果有遗漏,评论区告诉我进行补充面试官:Redis都有哪些使用场景?我回答:Redis是一个开源的、基于键值对的数据结构存储系统,,它支持多种数据类型,包括字符串、散列、列表、集合和有序集合。它可以用作数据库、缓存和消息中间件。由于其高性能、丰富的数据结构支持以及多种......
  • sicp每日一题[2.43]
    Exercise2.43LouisReasonerishavingaterribletimedoingExercise2.42.Hisqueensprocedureseemstowork,butitrunsextremelyslowly.(Louisneverdoesmanagetowaitlongenoughforittosolveeventhe6×6case.)WhenLouisasksEvaLuAtorf......
  • 每日OJ题_牛客_比那名居的桃子_滑动窗口/前缀和_C++_Java
    目录牛客_比那名居的桃子_滑动窗口/前缀和题目解析C++代码Java代码牛客_比那名居的桃子_滑动窗口/前缀和比那名居的桃子(nowcoder.com)描述:        小红有一天看到了一只桃子,由于桃子看上去就很好吃,小红很想把它吃掉。已知吃下桃子后,每天可以获得ai​的......
  • 每日读则推(八)——Alice Weidel‘s speech
    Whogaveyouthepowertogivethepeople'shard-earnedmoneytoeconomicrefugees                                       n.辛苦钱,血汗钱              ......
  • 每日一歌歌词
    2024.10.13《Reignite》官方MV:BV11F411g7HoReignite-EchoLab作词:黑金雨作曲:EchoLab音乐制作人:胡臻混音:HARUOSAITOH(THERMALMIX)吉他:並木瑠璃弦乐编写:松田純一人声录音:31Studio音乐监制:陈瑶/聂婉迪(EchoLab)监制:魔奇工作室把少年......
  • 万字详解AI实践,零手写编码用AI完成开发 + 数据清洗 + 数据处理 的每日新闻推荐,带你快
    用AI+dify完成前后端开发+数据处理和数据清洗。引言数据获取和数据处理dify构建workflow进行数据清洗前端页面构建和前后端交互总结引言AI时代对开发人员的加强是非常明显的,一个开发人员可以依靠AI横跨数个自己不熟悉的领域包括前后端、算法等。让我们来做个实践,全程......
  • 微信公众号推送每日天气(Java版)
    准备工作公众号必须经过企业认证,个人公众号的无法使用这是获取到微信公众号的appId、secret网址贴这儿了:https://mp.weixin.qq.com/debug/cgi-bin/sandboxinfo?action=showinfo&t=sandbox/index还有测试的模板申请每日一言,我这里使用的彩虹屁,地址:https://www.tianapi.com/......
  • sicp每日一题[2.42]
    这道题太难了,我自己只完成了empty-board这一个定义,其他的函数即使看了别人的答案也研究了半天才搞明白。。;board-size指的是正方形棋盘的长(define(queensboard-size)(define(queen-colsk)(if(=k0)(listempty-board)(filter......