sicp每日一题[2.52]
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]Exercise 2.52
Make changes to the square limit of wave shown in Figure 2.9 by working at each of the levels described above. In particular:
a. Add some segments to the primitive wave painter of Exercise 2.49 (to add a smile, for example).
b. Change the paern constructed by corner-split (for example, by using only one copy of the up-split and right-split images instead of two).
c. Modify the version of square-limit that uses square-of-four so as to assemble the corners in a different pateern. (For example, you might make the big Mr.Rogers look outward from each corner of the square.)
对于我来说,这道题最大的难度在于理解题意,我根据自己的理解修改之后想:就这么简单?然后去查了其他人的答案,发现还真就这么简单 :)
(#%require sicp-pict)
(define wave
(segments->painter (list
(segment (vect .25 0) (vect .35 .5))
(segment (vect .35 .5) (vect .3 .6))
(segment (vect .3 .6) (vect .15 .4))
(segment (vect .15 .4) (vect 0 .65))
(segment (vect 0 .65) (vect 0 .85))
(segment (vect 0 .85) (vect .15 .6))
(segment (vect .15 .6) (vect .3 .65))
(segment (vect .3 .65) (vect .4 .65))
(segment (vect .4 .65) (vect .35 .85))
(segment (vect .35 .85) (vect .4 1))
(segment (vect .4 1) (vect .6 1))
(segment (vect .6 1) (vect .65 .85))
(segment (vect .65 .85) (vect .6 .65))
(segment (vect .6 .65) (vect .75 .65))
(segment (vect .75 .65) (vect 1 .35))
(segment (vect 1 .35) (vect 1 .15))
(segment (vect 1 .15) (vect .6 .45))
(segment (vect .6 .45) (vect .75 0))
(segment (vect .75 0) (vect .6 0))
(segment (vect .6 0) (vect .5 .3))
(segment (vect .5 .3) (vect .4 0))
(segment (vect .4 0) (vect .25 0))
)))
(define (right-split painter n)
(if (= n 0)
painter
(let ((smaller (right-split painter (- n 1))))
(beside painter (below smaller smaller)))))
(define (up-split painter n)
(if (= n 0)
painter
(let ((smaller (up-split painter (- n 1))))
(beside painter (below smaller smaller)))))
; a
(define wave-with-smile
(segments->painter (list
(segment (vect .25 0) (vect .35 .5))
(segment (vect .35 .5) (vect .3 .6))
(segment (vect .3 .6) (vect .15 .4))
(segment (vect .15 .4) (vect 0 .65))
(segment (vect 0 .65) (vect 0 .85))
(segment (vect 0 .85) (vect .15 .6))
(segment (vect .15 .6) (vect .3 .65))
(segment (vect .3 .65) (vect .4 .65))
(segment (vect .4 .65) (vect .35 .85))
(segment (vect .35 .85) (vect .4 1))
(segment (vect .4 1) (vect .6 1))
(segment (vect .6 1) (vect .65 .85))
(segment (vect .65 .85) (vect .6 .65))
(segment (vect .6 .65) (vect .75 .65))
(segment (vect .75 .65) (vect 1 .35))
(segment (vect 1 .35) (vect 1 .15))
(segment (vect 1 .15) (vect .6 .45))
(segment (vect .6 .45) (vect .75 0))
(segment (vect .75 0) (vect .6 0))
(segment (vect .6 0) (vect .5 .3))
(segment (vect .5 .3) (vect .4 0))
(segment (vect .4 0) (vect .25 0))
(segment (vect .45 .76) (vect .5 0.72))
(segment (vect .5 0.72) (vect .55 .76))
)))
(paint wave-with-smile)
(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 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-with-smile 1))
(define (square-of-four tl tr bl br)
(lambda (painter)
(let ((top (beside (tl painter) (tr painter)))
(bottom (beside (bl painter) (br painter))))
(below bottom top))))
(define (square-limit painter n)
(let ((combine4 (square-of-four flip-vert rotate180
identity flip-horiz)))
(combine4 (corner-split painter n))))
(paint (square-limit wave-with-smile 1))
执行结果如下图所示:
【推荐】国内首个AI IDE,深度理解中文开发场景,立即下载体验Trae
【推荐】编程新体验,更懂你的AI,立即体验豆包MarsCode编程助手
【推荐】抖音旗下AI助手豆包,你的智能百科全书,全免费不限次数
【推荐】轻量又高性能的 SSH 工具 IShell:AI 加持,快人一步
· DeepSeek 开源周回顾「GitHub 热点速览」
· 物流快递公司核心技术能力-地址解析分单基础技术分享
· .NET 10首个预览版发布:重大改进与新特性概览!
· AI与.NET技术实操系列(二):开始使用ML.NET
· 单线程的Redis速度为什么快?