`
SavageGarden
  • 浏览: 223137 次
  • 性别: Icon_minigender_1
  • 来自: 北京
社区版块
存档分类
最新评论

SICP学习笔记 2.2.4 实例:一个图形语言

    博客分类:
  • SICP
阅读更多

    练习2.44

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

   

    练习2.45

(define (split p1 p2)
  (lambda (painter)
    (let ((new (p2 painter painter)))
      (p1 painter new))))

 

    练习2.46

(define (make-vect x y)
  (cons x y))
(define (xcor-vect vect)
  (car vect))
(define (ycor-vect vect)
  (cdr vect))

(define (add-vect vect1 vect2)
  (make-vect (+ (xcor-vect vect1) (xcor-vect vect2))
	           (+ (ycor-vect vect1) (ycor-vect vect2))))
(define (sub-vect vect1 vect2)
  (make-vect (- (xcor-vect vect1) (xcor-vect vect2))
	           (- (ycor-vect vect1) (ycor-vect vect2))))
(define (scale-vect s vect)
  (make-vect (* s (xcor-vect vect))
             (* s (ycor-vect vect))))

 

    练习2.47

;; 针对list方式
(define (make-frame origin edge1 edge2)
  (list origin edge1 edge2))
(define (origin-frame frame)
  (car frame))
(define (edge1-frame frame)
  (car (cdr frame)))
(define (edge2-frame frame)
  (car (cdr (cdr frame))))
  
;; 只对cons方式
(define (make-frame origin edge1 edge2)
  (cons origin (cons edge1 edge2)))
(define (origin-frame frame)
  (car frame))
(define (edge1-frame frame)
  (car (cdr frame)))
(define (edge2-frame frame)
  (cdr (cdr frame)))

 

    练习2.48

(define (make-segment s-vect e-vect)
  (cons s-vect e-vect))
(define (start-segment segment)
  (car segment))
(define (end-segment segment)
  (cdr segment))

 

    练习2.49

(define outline-segments
  (list 
    (make-segment (make-vect 0 0) (make-vect 0 1))
	  (make-segment (make-vect 0 1) (make-vect 1 1))
	  (make-segment (make-vect 1 1) (make-vect 1 0))
	  (make-segment (make-vect 1 0) (make-vect 0 0))))
(define outline-painter (segments-painter outline-segments))

(define diagonal-segments
  (list 
    (make-segment (make-vect 0 0) (make-vect 1 1))
	  (make-segment (make-vect 0 1) (make-vect 1 0))))
(define diagonal-painter (segments-painter diagonal-segments))

(define diamonds-segments
  (list 
    (make-segment (make-vect 0.0 0.5) (make-vect 0.5 1.0))
	  (make-segment (make-vect 0.5 1.0) (make-vect 1.0 0.5))
	  (make-segment (make-vect 1.0 0.5) (make-vect 0.5 0.0))
	  (make-segment (make-vect 0.5 0.0) (make-vect 0.0 0.5))))
(define diamonds-painter (segments-painter diamonds-segments))

 

    练习2.50

(define (flip-horiz painter)
  (transform-painter painter
		     (make-vect 1.0 0.0)
		     (make-vect 0.0 0.0)
		     (make-vect 1.0 1.0)))
		     
(define (rotate180 painter)
  (transform-painter painter
		     (make-vect 1.0 1.0)
		     (make-vect 0.0 1.0)
		     (make-vect 1.0 0.0)))
		     
(define (rotate270 painter)
  (transform-painter painter
		     (make-vect 1.0 0.0)
		     (make-vect 1.0 1.0)
		     (make-vect 0.0 0.0)))
		     
 

    练习2.51

(define (below painter1 painter2)
  (let ((split-point (make-vect 0.0 0.5)))
    (let ((paint-up
	   (transform-painter painter2
			      (make-vect 0.0 0.0)
			      (make-vect 1.0 0.0)
			      split-point))
	  (paint-down
	   (transform-painter painter1
			      split-point
			      (make-vect 1.0 0.5)
			      (make-vect 0.0 1.0))))
      (lambda (frame)
	(paint-up frame)
	(paint-down frame)))))

(define (below painter1 painter2)
  (rotate90 (beside (rotate270 painter1) (rotate270 painter2))))
 

    练习2.52

;; 暂无
 

 

 

0
2
分享到:
评论

相关推荐

    sicp 2.2.4节图形语言

    《SICP 2.2.4 节:图形语言》是计算机科学经典教材《结构与解释程序》(Structure and Interpretation of Computer Programs)中的一个重要章节,它深入介绍了如何利用编程来创建图形,以及如何设计和理解复杂的计算...

    sicp-memo-ans:SICP笔记和答案

    sicp备忘录 包含 SICP 每个部分的注释和答案。 请参考那些正在学习SICP的人。 笔记 如果你想在 gauch 中使用随机函数 ...顺便说一下,在学习 SICP 时,我使用了一个名为Petite Chez Scheme的处理系统。

    sicp-study-group:一个研究计算机程序结构和解释(SICP)的研究小组

    这个“sicp-study-group”项目显然是一个围绕该书的学习社区,旨在深入探讨编程语言、计算理论以及程序设计的原理。 SICP的核心主题是解释器的构建,它不仅涵盖了编程语言的基础,还深入到函数式编程、抽象数据类型...

    sicp-py-zh:[译] UCB CS61a SICP Python 描述 中文版

    UCB CS61a SICP Python 描述 原文: 译者: 协议: 前面是山,我们就爬山;前面是海,我们就渡海;前面是皇宫,我们就开炮!——《龙族前传》 ‍ 下载 Docker docker pull apachecn0/sicp-py-zh docker run -tid -p ...

    sicp-js-zh:【译】NUS CS1101s SICP JavaScript 描述

    NUS CS1101s SICP JavaScript 描述原文:协议:如果你交给某人一个程序,你将折磨他一整天;如果你教某人如何编写程序,你将折磨他一辈子。——David Leinweber贡献指南本项目需要校对,欢迎大家提交 Pull Request。...

    sicp_but_clojure:Clojure中的SICP示例和练习

    而 sicp_but_clojure 是一个项目,将SICP中的示例和练习移植到了现代函数式编程语言Clojure中,为学习者提供了在Clojure环境中理解SICP概念的机会。 Clojure,由Rich Hickey创建,是一种基于Lisp的动态类型语言,...

    sicp-py-zh:【译】UCB CS61a SICP Python

    将SICP翻译成Python,使得这个经典的教育资源更容易被Python开发者和学习者所接受。 Python CSS标签可能指的是在呈现SICP Python内容时使用的样式表,用于美化文档显示。PythonCSS可能是指一种Python库,用于生成...

    sicp-compiler-notes:有关SICP编译器的一些说明和演示

    在SICP上进行试用-> WASM编译演示:SICP如何将机器代码注册为WASM 为阶乘翻译LISP代码(define (factorial n) (define (iter product counter) (if (> counter n) product (iter (* counter product) (+ counter 1)))...

    sicp-to-z80:一台SICP寄存器机到TI-84 Z80编译器

    SICP注册机器语言到Z80编译器这是针对Z80汇编的SICP寄存器机器语言的子集的编译器,专门... 由于print-string实际上是一个宏,因此必须使用,@ (或unquote-splicing ),以便将生成的代码内联。 ( define hello-world

    sicp-eg-ex:sicp课程视频示例,自己的笔记,习题题解

    例如,书中著名的“构建抽象数据类型”章节,通过构造一个列表处理系统,展示了如何用函数式编程构建复杂的数据结构和算法。 接下来是"环境检查方案9.5"。在Scheme中,环境是理解变量作用域和函数调用的关键。环境...

    sicp和操作系统:精髓与设计原理第七版

    资源名称:sicp 和 操作系统:精髓与设计原理第七版资源截图: 资源太大,传百度网盘了,链接在附件中,有需要的同学自取。

    SICP(计算机体系结构)

    - **2.2.4 示例:图像语言**: 通过图形化语言的例子进一步理解层次数据结构的应用。 #### 三、总结 《SICP》不仅是一本教科书,更是计算机科学领域的一座里程碑。它不仅深入浅出地介绍了编程的基本概念和技术,还...

    sicp-paint:sicp中的图片语言的js版本

    本文将深入探讨SICP中的图片语言,并介绍一个JavaScript版本的实现。 一、SICP中的图片语言 SICP的图片语言是一种基于函数式编程思想构建的图形处理系统。它通过一系列基本的图形操作,如平移、旋转、缩放和颜色...

    SICP习题解答,主要第一章的内容习题答案

    1.22可能是一个关于列表处理的挑战,如实现一个函数,可以对列表进行特定的变换或者查找列表中的模式。 3. **1.28.ss**: 可能与环境模型和闭包有关。在SICP中,函数不仅仅是计算的工具,它们也可以拥有自己的状态,...

    sicp 和 操作系统:精髓与设计原理第七版打包

    单体结构的操作系统将所有功能紧密集成在一个内核中,如早期的UNIX系统;微内核结构则将核心功能最小化,其他服务通过消息传递在用户空间运行,如Mach和QNX;客户-服务器模型是现代操作系统常见的设计,如网络服务,...

    sicp_notes:SICP笔记和练习

    总之,《SICP笔记和练习》是一个宝贵的资源,它可以帮助学习者全面掌握SICP中的编程思维和技巧,从而提升自己的编程素养和解决问题的能力。无论你是初学者还是有经验的开发者,都可以从中受益匪浅。

    SICP:SICP解决方案

    总的来说,《SICP:SICP解决方案》结合Racket编程环境,为学习者提供了一个探索计算理论、编程语言构造和算法设计的宝贵资源。通过这个实践过程,读者不仅可以提升编程技能,还能培养出对计算机科学本质的深刻洞察力...

    a_book_sicp_py

    6. 高阶函数的应用:高阶函数是那些可以接受其他函数作为参数或者返回一个函数的函数。这种抽象是函数式编程的核心特征之一,它在Python中也被广泛支持,并可以用来编写更加灵活和可重用的代码。 7. 计算机程序的...

    sicp:包含 SICP 以不同语言实现的示例和解决方案

    本压缩包“sicp-master”包含的是SICP书中各种练习题和概念的实现,以不同的编程语言完成,这为读者提供了一个跨语言理解和实践SICP概念的机会。JavaScript作为标签被提及,意味着这个压缩包中可能包含了使用...

Global site tag (gtag.js) - Google Analytics