
scheme-sicp
文章平均质量分 65
算法导论我去
我喜欢写代码^-^
展开
-
共享和相等
参考这里;3.16(define (count-pairs x) (if (not (pair? x)) 0 (+ (count-pairs (car x)) (count-pairs (cdr x)) 1)));;4个(define x '(a b))(define y (cons (cdr x) x))(count-pai原创 2016-05-25 10:07:58 · 324 阅读 · 0 评论 -
huffman编码树
;leaf(define (make-leaf symbol weight) (list 'leaf symbol weight))(define (symbol-leaf leaf) (cadr leaf))(define (weight-leaf leaf) (caddr leaf))(define (leaf? obj) (eq? 'leaf (car obj)));原创 2016-05-18 16:09:38 · 445 阅读 · 0 评论 -
层次性结构
(define (append a b) (if (null? a) b (cons (car a) (append (cdr a) (cons (car a) b)))))(define nil (list))(define (count-leaves x) (cond ((null? x) 0) ((not (pair? x)) 1)原创 2016-05-08 23:27:33 · 2744 阅读 · 0 评论 -
几个withdraw程序的对比
;balance在全局环境里,没什么好说的(define balance 100)(define (withdraw amount) (if (>= balance amount) (begin (set! balance (- balance amount)) balance) "insufficent funds"));求值new-wi原创 2016-05-20 14:06:24 · 2122 阅读 · 0 评论 -
序对的无穷流
(define (interleave s1 s2) (if (empty-stream? s1) s2 (cons-stream (stream-car s1) (interleave s2 (stream-cdr s1)))))(define (pairs s t) (cons-stream (list (stream-ca原创 2016-06-08 12:55:58 · 397 阅读 · 0 评论 -
流(3.5.1~3.5.2)
;流实现的行为方式;delay和force的实现(define (memo-proc proc) (let ((already-run? false) (result false)) (lambda () (if already-run? result (begin (set! already-run? tr原创 2016-06-05 11:25:42 · 378 阅读 · 0 评论 -
流计算模式的使用
;系统地将迭代操作方式表示为流过程(define (sqrt-stream x) (define guesses (cons-stream 1.0 (stream-map (lambda (guess) (/ (+ guess (/ x guess)) 2)) guesses)))原创 2016-06-05 15:39:24 · 1087 阅读 · 0 评论 -
4.1.2表达式的表示
表达式的表示原创 2016-07-10 21:15:29 · 343 阅读 · 0 评论 -
流和延时求值
;书上的let并不是必须的(define (integral delayed-integrand initial-value dt) (define int (cons-stream initial-value (add-streams (scale-stream (force delaye原创 2016-06-18 07:33:06 · 445 阅读 · 0 评论 -
4.1.3求值器数据结构
;4.12,这里的用了一个通用的在框架中寻找变量的过程,不过这个过程不能用在4.13中的make-unbound!里(define (lookup-var-in-frame var vars vals) (cond ((null? vars) false) ((eq? var (car vars)) (cons vars vals)) (else (lookup原创 2016-07-16 11:46:04 · 374 阅读 · 0 评论 -
集合作为排序的表
(define (element-of-set? x set) (cond ((or (null? set) (> (car set) x)) #f) ((= x (car set)) #t) (else (element-of-set? x (cdr set)))))(define (intersaction-set set1 set2) (cond ((原创 2016-05-17 16:04:39 · 342 阅读 · 0 评论 -
约束的传播
;连接器的表示;user不需要也不能添加进constraints表里面,并且只有实现connect过的constraint才能进行set-value!(define (make-connector) (let ((value false) (informant false) (constraints '())) (define (set-my-value! new-value set原创 2016-05-30 00:16:08 · 1016 阅读 · 0 评论 -
队列的表示
(define (make-queue) (cons '() '()))(define (front-ptr queue) (car queue))(define (rear-ptr queue) (cdr queue))(define (empty-queue? queue) (null? (front-ptr queue)))(define (set-front-ptr!原创 2016-05-25 13:42:40 · 355 阅读 · 0 评论 -
序列操作
看完这一节,感觉世界观又被重塑。 首先说说这一小节的标题”序列作为一种约定的界面”是什么意思:这句话意思是序列作为程序不同模块间数据流动的形式。 学习lisp语言不久,lisp就给了我很多惊喜,我特地新建了一个文件夹叫astonishing来放代码☺ 下面是这一节我的代码:(define nil (list));(define (enumerate-tree-leaves t) (co原创 2016-05-15 00:25:33 · 490 阅读 · 0 评论 -
church计数
正如书中写的一样(“还不足以令人如雷灌顶是吧?!!”),看到完全没有数实现加一和0的定义,着实吓了一跳。 当然了,既然你不走寻常路,那我也不能在一棵树上吊死,你说不用数字,那至少得体现数的概念吧?多少个苹果是数,函数迭代多少次也是数(哈哈,其实是从书上的代码看出点端倪,然后顺藤摸瓜推出来的)。 嗯哼,揭晓答案:这里的数n对应的是f迭代n次,如果n是0,n对应的就是自变量。(define zero原创 2016-05-15 00:38:35 · 1307 阅读 · 0 评论 -
cons的定义
这又是一个让我感到很惊讶的thing,让我们理清一下思路: 现在我们是要实现cons,car以及cdr,使得(car (cons x y))=x,(cdr (cons x y))=y,cons由我们自己定义,它的值要么是数,要么是函数,一般情况下,用数将两个量结合还能区分开来是比较困难的,那么cons应该返回一个函数,这个函数要能根据接受的参数返回x或y,这个参数可以是同一个函数的不同参数,也可以原创 2016-05-15 00:53:11 · 5454 阅读 · 0 评论 -
嵌套映射
本小节代码需要和”序列操作”那节的代码在一起运行;嵌套映射(define (make-pairs1 n) (define (i-iter i ans) (define (j-iter j ansi) (if (= j 0) ansi (j-iter (- j 1) (cons (list i j) ansi)))) (if (原创 2016-05-15 14:41:15 · 491 阅读 · 0 评论 -
表格的表示
;一维表格(define (make-table) (list '*table*))(define (assoc key records) (cond ((null? records) #f) ((equal? (caar records) key) (car records)) (else (assoc key (cdr records)))))(de原创 2016-05-28 12:28:46 · 368 阅读 · 0 评论 -
图形语言
mit-scheme里没有直接提供wave和rogers这两个过程,但是DrRacket提供einstein,只需加上开头两行就可使用#lang racket(require (planet "sicp.ss"("soegaard""sicp.plt" 2 1)))(define wave einstein)(define wave2 (beside wave (flip-vert wav原创 2016-05-15 23:57:08 · 928 阅读 · 0 评论 -
图形操作
这一章通过实现图形语言的过程体现了程序的层次性(define device (make-graphics-device (car (enumerate-graphics-types))))(define (draw-line start end) (graphics-draw-line device (xcor-vect start) (y原创 2016-05-15 23:59:39 · 466 阅读 · 0 评论 -
数字电路的模拟
;基本功能块;延时:(define inverter-delay 2)(define and-gate-delay 3)(define or-gate-delay 5);inverter(define (inverter input output) (define (invert-input) (let ((new-value (logical-not (get-signal原创 2016-05-29 15:10:14 · 460 阅读 · 0 评论 -
函数式程序的模块化和对象的模块化
(define random-init 1)(define (rand-update x) (remainder (+ (* 13 x) 5) 24))(define (random-numbers op-stream) (define (numbers last-value op-stream) (let ((op (stream-car op-stream)))原创 2016-06-20 11:51:23 · 944 阅读 · 0 评论