尧图网站建设 尧图网络
  • 首页
  • 关于我们
  • 服务项目
  • 案例展示
  • 建站流程
  • 资讯中心
  • 联系我们
首页/资讯中心/详情

scheme的画家问题

scheme的画家问题
📅 发布时间:2026/6/20 10:04:50

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

相关新闻

  • 使用Dify构建酒吧鸡尾酒配方推荐系统
  • 【节点】[ChannelMask节点]原理解析与实际应用
  • 【Open-AutoGLM模型替换全攻略】:手把手教你5步更换大模型实现性能跃升

最新新闻

  • 濮阳市闲置爱马仕、劳力士变现指南:奢侈品手表包包回收门店实地测评 - 谊识预商贸
  • 大连市奢侈品手表包包回收价格差距高达15%:实测对比告诉你哪家店报价最实在 - 谊识预商贸
  • 曲靖市闲置手表包包奢侈品变现,整理了5家靠谱回收店联系方式 - 谊识预商务
  • 零基础Python AI编程实战:Trae+Gitee+Ubuntu本地化开发部署
  • 黄江镇独立站SEO培训:谷歌自然流量获取实战 - 东莞选校指南
  • 2026长沙积家手表回收实测|岳麓芙蓉双门店实测,正规高价无套路测评 - 薛定谔的梨花猫

日新闻

  • 信任的进化:技术实现详解——如何用JavaScript构建博弈论模拟器
  • Terrakube自定义工作流:如何集成OPA、Infracost等工具扩展IaC能力
  • grunt-concurrent快速入门:5分钟学会并行运行Grunt任务

周新闻

  • 3步解锁iOS设备:applera1n激活锁绕过完全指南
  • 39 2026 人工智能证书终极盘点,普通人选 AI 证书可以从这些方向入手
  • Redis 暴露公网有多危险?从端口检查到补救步骤

月新闻

  • 【总结】入门篇:50句话让你记住架构核心概念
  • WeChatMsg技术方案解析:实现Mac微信数据自主管理的完整解决方案
  • WeChatMsg:革新性微信数据备份方案,打造你的专属数字记忆库

关于尧图

  • 公司简介
  • 团队介绍
  • 企业文化
  • 荣誉资质

服务项目

  • 定制开发
  • 电商建站
  • UI 设计
  • 运维服务

快速链接

  • 案例展示
  • 建站流程
  • 常见问题
  • 资讯中心

联系方式

  • 📍北京市朝阳区互联网产业园 A 座 10 层
  • 📞400-888-8888
  • ✉️contact@rkmt.cn
  • 🕐周一至周日 9:00-21:00

© 2024 北京尧图网络科技有限公司 版权所有 | 京 ICP 备 XXXXXXXX 号