当前位置: 首页 > news >正文

scheme的画家问题

本节是一个语言实例,通过一种图形语言展示数据抽象和闭包。
我们对一副图像(或者说画)的操作很难涉及到图像内部的东西,因此我们可以将这副图像视作一个过程,我们在不对该过程本身进行操作情况下也可以影响该过程。
练习2.44

点击查看代码
;在原有图像上方生成两个一样的图像
(define (up-split painter n)(if (= n 0)painter(let ((smaller (up-solit painter (- n 1))))(below painter (besider smaller smaller)))))
练习2.46
点击查看代码
(define (make-vect xcor ycor)(cons xcor ycor))
(define (add-vect v1 v2)(cons ( + (car v1) (car v2))( + (cdr v1) (cdr v2))))
(define (sub-vect v1 v2)(cons ( - (car v1) (car v2))( - (cdr v1) (cdr v2))))
(define (scale-vect s v1)(cons ( * s (car v1))( * s (cdr v1))))
练习2.47
点击查看代码
(define (make-frame-1 origin edge1 edge2)(list origin edge1 edge2))
(define (origin-frame frame)(car frame))
(define (edge1-frame frame)(cadr frame))
(define (edge2-frame frame)(cadr (cdr frame)))

练习2.48

点击查看代码
(define (make-segment start end)(cons start end))
(define (start-segment s)(car s))
(define (end-segment s)(cdr s))
练习2.49
点击查看代码
(define frame-painter(segments->painter list (make-segment (make-vect 0 0)(make-vect 0 1))(make-segment (make-vect 0 0)(make-vect 1 0))(make-segment (make-vect 0 1)(make-vect 1 1))(make-segment (make-vect 1 0)(make-vect 1 1))))
(define cross-painter(list (make-segment (make-vect 0 0)(make-vect 1 1))(make-segment (make-vect 0 1)(make-vect 1 0))))
(define diamond-painter(segments->painter list (make-segment (make-vect 0 0.5)(make-vect 0.5 1))(make-segment (make-vect 0.5 1)(make-vect 1 0.5))(make-segment (make-vect 0.5 0)(make-vect 1 0.5))(make-segment (make-vect 0.5 0)(make-vect 0 0.5))))

练习2.51

点击查看代码
(define (below painter1 painter2)(let ((spilt-point (make-vect 0.0 0.5)))(let ((paint-up(transform-painter painter1spilt-pointer(make-vect 1.0 0.5)(make-vect 0.0 1.0)))(paint-down(transform-painter painter2(make-vect 0.0 0.0)spilt-pointer(make-vect 0.0 1.0))))(lambda(frame) (paint-up frame)(paint-down frame)))))
(define (beside-2 painter1 painter2)(rotate90 (beside (rotate270 painter1) (rotate270 painter2))))
练习2.52 强健设计的语言层次(分层设计) a)给wave加上一个笑脸 wave写起来太麻烦了,我选择放过他 b)修改corner-split的构造模式 原有的:
点击查看代码
(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))))))
修改后:
点击查看代码
(define (corner-split painter n)(if (= n 0)painter(let ((up (up-split painter (- n 1)))(right (right-split painter (- n 1)))(corner (corner-split painter (- n 1))))(beside (below painter up)(below right corner)))))

c) 修改square-limit,换一种使用square-of-four的方式,以另一种不同模式组合起各个角区。

点击查看代码
(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 idenity flip-horizflip-vert rotate180)))(combine4 (corner-split painter n))))
http://www.rkmt.cn/news/152493.html

相关文章:

  • 使用Dify构建酒吧鸡尾酒配方推荐系统
  • 【节点】[ChannelMask节点]原理解析与实际应用
  • 【Open-AutoGLM模型替换全攻略】:手把手教你5步更换大模型实现性能跃升
  • 7、神经网络构建与优化全解析
  • Open-AutoGLM安装失败?99%的人都忽略了这1个核心配置项
  • Open-AutoGLM大模型迁移实战(99%工程师不知道的3个关键细节)
  • 错过Open-AutoGLM你就落伍了?2024最值得star的AI编码项目全面曝光
  • 学长亲荐10个AI论文平台,自考本科轻松搞定!
  • Dify平台求职面试问题预测与回答指导功能
  • 10、自定义优化器与正则化技术在深度学习中的应用
  • AI侦探P.I.项目:计算机视觉与生成式AI协同质检
  • GSV2005@ACP#2005产品规格参数详解及产品应用分享
  • Open-AutoGLM开源了!10分钟部署本地AI编程环境,开发者速进
  • GSV6703@ACP#6703产品规格详解及产品应用分享
  • cobaltstrike配置与搭建
  • 欧莱诺门窗可信度高吗?专业门窗品牌市场口碑与详细介绍全解析 - myqiye
  • 12、简化与架构:迈向敏捷软件开发的关键路径
  • 2025年河南环保设备品牌排行榜,河南亚科环保客户评价如何? - mypinpai
  • Dify平台社交媒体内容策划助手应用实例
  • 干网在线清洗机构哪家好?干网在线清洗服务商哪家经验丰富? - 工业品牌热点
  • 13、软件架构与项目执行的关键要点
  • 为什么顶尖企业都在抢着部署Open-AutoGLM?本地化优势全面曝光
  • 2025年有资质的茅台酒回收公司推荐,专业茅台酒回收服务口碑好企业全解析 - myqiye
  • 【Open-AutoGLM模型清理全攻略】:3步彻底删除下载模型避免占用GB级磁盘空间
  • 3、深入理解单神经元:原理、激活函数与线性回归应用
  • 2025绵阳中学择校指南:高口碑学校深度推荐,高中复读学校/实验学校/学校/高中/实验中学/名办高中/中学中学厂商好不好 - 品牌推荐师
  • 2、软件项目管理:从传统到敏捷的变革之路
  • Dify在智能制造领域设备故障问答系统中的应用
  • 2025年海外商务考察公司推荐,口碑不错的商务考察品牌企业解析 - 工业品牌热点
  • 2025年评价高的透气网眼布/针织网眼布厂家推荐及选择参考 - 品牌宣传支持者