sicp每日一题[2.45]
1.sicp每日一题[1.42]2.sicp每日一题[1.43]3.sicp每日一题[1.44]4.sicp每日一题[1.45]5.sicp每日一题[1.46]6.sicp每日一题[2.1]7.sicp每日一题[2.2]8.sicp每日一题[2.3]9.sicp每日一题[2.4]10.sicp每日一题[2.5]11.sicp每日一题[2.6]12.sicp每日一题[2.7]13.sicp每日一题[2.8]14.sicp每日一题[2.9]15.sicp每日一题[2.11]16.sicp每日一题[2.10]17.sicp每日一题[2.12]18.sicp每日一题[2.13-2.16]19.sicp每日一题[2.17]20.sicp每日一题[2.18]21.sicp每日一题[2.19]22.sicp每日一题[2.20]23.sicp每日一题[2.21]24.sicp每日一题[2.22-2.23]25.sicp每日一题[2.24-2.27]26.sicp每日一题[2.28]27.sicp每日一题[2.29]28.sicp每日一题[2.30]29.sicp每日一题[2.31]30.sicp每日一题[2.32]31.sicp每日一题[2.33]32.sicp每日一题[2.34]33.sicp每日一题[2.35]34.sicp每日一题[2.36-2.37]35.sicp每日一题[2.38-2.39]36.sicp每日一题[2.40]37.sicp每日一题[2.41]38.sicp每日一题[2.42]39.sicp每日一题[2.43]40.sicp每日一题[2.44]
41.sicp每日一题[2.45]
42.sicp每日一题[2.46]43.sicp每日一题[2.47]44.sicp每日一题[2.48]45.sicp每日一题[2.49]46.sicp每日一题[2.50]47.sicp每日一题[2.51]48.sicp每日一题[2.52]49.sicp每日一题[2.53-2.55]50.sicp每日一题[2.56]51.sicp每日一题[2.57]52.sicp每日一题[2.58]53.sicp每日一题[2.59]54.sicp每日一题[2.60]55.sicp每日一题[2.61]56.sicp每日一题[2.62]57.sicp每日一题[2.63-2.64]58.sicp每日一题[2.65]59.sicp每日一题[2.66]60.sicp每日一题[2.67-2.68]61.sicp每日一题[2.69]62.sicp每日一题[2.70]63.sicp每日一题[2.71]64.sicp每日一题[2.72]65.sicp每日一题[2.73]66.sicp每日一题[2.74]67.sicp每日一题[2.75]68.sicp每日一题[2.76]69.sicp每日一题[2.77]70.sicp每日一题[2.78]71.sicp每日一题[2.79]72.sicp每日一题[2.80]73.sicp每日一题[2.81]74.sicp每日一题[2.82]75.sicp每日一题[2.83]76.sicp每日一题[2.84]77.sicp每日一题[2.85-2.86]right-split and up-split can be expressed as instances of a general splitting operation. Define a procedure split with the property that evaluating
(define right-split-2 (split beside below))
(define up-split-2 (split below beside))
produces procedures $right-split$ and $up-split$ with the same behaviors as the ones already defined.
这道题本身没什么难度,但是我再次遇到了环境问题。。之前在台式电脑上装的sicp包,用同样的步骤在笔记本上怎么都不行,卸载重装了好几次,最后参考这篇文章终于找到了解决办法。
方法其实也不复杂,随便打开一个窗口,输入#lang planet neil/sicp
,然后点击右上角的 run 等待安装完毕重启 DrRacket,再依次点击 Language -> Choose Language,就可以选择看到 SICP(PLaneT 1.18) 了。但是这么简单的方法我用了2个多小时才找到。。
回到这道题,只要注意到 split 的返回值也是一个函数,且它的两个参数分别为 painter 和 n,至于实现,仿照原来的 right-split 或 up-split 即可。
(define wave einstein)
(define (right-split-1 painter n)
(if (= n 0)
painter
(let ((smaller (right-split-1 painter (- n 1))))
(beside painter (below smaller smaller)))))
(define (up-split-1 painter n)
(if (= n 0)
painter
(let ((smaller (up-split-1 painter (- n 1))))
(below painter (beside smaller smaller)))))
(define (split op1 op2)
(define (iter painter n)
(if (= n 0)
painter
(let ((smaller (iter painter (- n 1))))
(op1 painter (op2 smaller smaller)))))
iter)
(define right-split-2 (split beside below))
(define up-split-2 (split below beside))
(paint (right-split-1 wave 1))
(paint (right-split-2 wave 1))
(paint (up-split-1 wave 1))
(paint (up-split-2 wave 1))
效果如下图所示:
【推荐】国内首个AI IDE,深度理解中文开发场景,立即下载体验Trae
【推荐】编程新体验,更懂你的AI,立即体验豆包MarsCode编程助手
【推荐】抖音旗下AI助手豆包,你的智能百科全书,全免费不限次数
【推荐】轻量又高性能的 SSH 工具 IShell:AI 加持,快人一步
· DeepSeek 开源周回顾「GitHub 热点速览」
· 物流快递公司核心技术能力-地址解析分单基础技术分享
· .NET 10首个预览版发布:重大改进与新特性概览!
· AI与.NET技术实操系列(二):开始使用ML.NET
· 单线程的Redis速度为什么快?