zoukankan      html  css  js  c++  java
  • SICP_3.15-3.20

    3.15

    对于z1

    z1 ------>[ * ][ * ]

                    |     |

                   v     v

                  [ * ][ * ]----->[ * ][ ]

                    |                  |

                   v                  v

                   wow             b

    对于z2

    z2 ----->[ * ][ * ]

                   |     |                            

                   |     + ------------------>[ * ][ * ]------>[ * ][ ]

                   |                                  |                    |

                   |                                  v                   v

                   |                                  a                   b

                   |                                                       ^

                   |                                                       |

                   +----------------------->[ * ][ * ]------>[ * ][ ]

                                                      |

                                                      v

                                                      wow

    3.16

     1 (define l2 (list 1))
     2 (define l3 (cons l2 l2))        ->结果为4
     3 (define l4 (list l3))
     4 
     5 
     6 (define l1 '(1 2 3))  ->结果为3
     7 
     8 (define l5 (list a))
     9 (define l6 (cons l5 l5))
    10 (define l7 (cons l6 l6))         ->结果为7

     1 (define l8 (set-car! (cddr l1) l1)) ->什么都不返回

    3.17

    1 (define new-count-pairs
    2   (let ((store '()))
    3     (lambda (x)
    4       (cond ((not (pair? x)) 0)
    5             ((memq x store) 0)
    6             (else (set! store (cons x store))
    7                   (+ (new-count-pairs (car x))
    8                      (new-count-pairs (cdr x))
    9                      1))))))

    把检查过的元素放到一个表中。在计数之前检查是否存在。注意memq的用法!!!

    3.18

    这一题的一些解法

    1 (define (cycle? x)
    2   (define (iter search-list seen)
    3     (cond ((not (pair? search-list)) #f)
    4           ((memq search-list seen) #t)
    5           (else (or (iter (car search-list) (cons search-list seen))
    6                     (iter (cdr search-list) (cons search-list seen))))))
    7   (iter x '()))

    这一题重点是要注意car也可以形成环

    另一种貌似有问题的解法

    他这里的解法没有考虑表中出现重复元素的情况。

    3.19

     1 (define (loop? ls)
     2   (define (iter x y)
     3     (let ((x-walk (list-walks 1 x))
     4           (y-walk (list-walks 2 y)))
     5       (cond ((or (null? x-walks) (null? y-walks)) #f)
     6             ((eq? x-walks y-walks) #t)
     7             (else (iter x-walk y-walk)))))
     8   (iter ls ls))
     9 
    10 (define (list-walks step ls)
    11   (cond ((null? ls) '())
    12         ((zero? step) ls)
    13         (else (list-walks (- step 1)
    14                           (cdr ls)))))

    不会这题,参考,用了算法:龟兔赛跑

    3.20

    还是理解的不透彻

    Yosoro
  • 相关阅读:
    如何选择Linux操作系统版本?
    js+html实现玫瑰花绽放
    Linux系统目录结构
    laravel5.6操作数据curd写法(查询构建器)
    laravel5.6 常规框架部署和配置文件说明
    PHP读取XML文件数据获取节点值
    Fiddler正则匹配调试接口示例
    php常用端口号
    php heredoc的用法详解
    oracle表空间操作
  • 原文地址:https://www.cnblogs.com/tclan126/p/6562217.html
Copyright © 2011-2022 走看看