博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
SICP学习笔记 2.2.4 实例:一个图形语言
阅读量:4029 次
发布时间:2019-05-24

本文共 3122 字,大约阅读时间需要 10 分钟。

    练习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

;; 暂无
 

 

 

转载地址:http://uovbi.baihongyu.com/

你可能感兴趣的文章
VMware Workstation Pro虚拟机不可用解决方法
查看>>
最简单的使用redis自带程序实现c程序远程访问redis服务
查看>>
redis学习总结-- 内部数据 字符串 链表 字典 跳跃表
查看>>
iOS 对象序列化与反序列化
查看>>
iOS 序列化与反序列化(runtime) 01
查看>>
iOS AFN 3.0版本前后区别 01
查看>>
iOS AFN 3.0版本前后区别 02
查看>>
iOS ASI和AFN有什么区别
查看>>
iOS QQ侧滑菜单(高仿)
查看>>
iOS 扫一扫功能开发
查看>>
iOS app之间的跳转以及传参数
查看>>
iOS __block和__weak的区别
查看>>
Android(三)数据存储之XML解析技术
查看>>
Android(三) 数据存储之二 SharedPreferences
查看>>
Android(三)数据存储之三SQLite嵌入式数据库
查看>>
Tomcat 6 数据源配置详解
查看>>
『网页制作』页面滚动HTML代码
查看>>
request得到select多选的值
查看>>
WSDL详解
查看>>
struts标签介绍大全
查看>>