`

sicp习题2.2节尝试解答

阅读更多
习题2.17,直接利用list-ref和length过程
<!---->(define (last-pair items)
  (list (list
-ref items (- (length items) 1))))

习题2.18,采用迭代法
<!---->(define (reverse-list items)
  (define (reverse
-iter i k)
    (
if (null? i) k (reverse-iter (cdr i) (cons (car i) k))))
  (reverse
-iter items ()))
习题2.20,如果两个数的奇偶相同,那么他们的差模2等于0,根据这一点可以写出:
<!---->(define (same-parity a . b)
  (define (same
-parity-temp x y)
  (cond ((
null? y) y)
        ((
= (remainder (- (car y) x) 20)
         (cons (car y) (same
-parity-temp x (cdr y))))
        (
else
           (same
-parity-temp x (cdr y)))))
  (cons a (same
-parity-temp a b)))
利用了基本过程remainder取模

习题2.21,递归方式:
<!---->(define (square-list items)
  (
if (null? items)
      items 
      (cons (square (car items)) (square
-list (cdr items)))))
利用map过程:
<!---->(define (square-list items)
  (map square items))

习题2.23,这与ruby中的each是一样的意思,将操作应用于集合的每个元素:
<!---->(define (for-each proc items)
  (define (
for-each-temp proc temp items)
  (
if (null? items)
      #t
      (
for-each-temp proc (proc (car items)) (cdr items))))
  (
for-each-temp proc 0 items))
最后返回true

习题2.24,盒子图就不画了,麻烦,解释器输出:
<!---->Welcome to DrScheme, version 360.
Language: Standard (R5RS).
> (list 1 (list 2 (list 3 4)))
(
1 (2 (3 4)))
树形状应当是这样
               . 
/\
/ \
1 .
/\
/ \
2 .
/\
/ \
3 4
习题2.25,
第一个list可以表示为(list 1 3 (list 5 7) 9)
因此取7的操作应当是:
<!---->(car (cdr (car (cdr (cdr (list 1 3 (list 5 79))))))
第二个list表示为:(list (list 7))
因此取7操作为:
<!---->(car (car (list (list 7))))

第三个list可以表示为:
<!---->(list 1 (list 2 (list 3 (list 4 (list 5 (list 6 7))))))
因此取7的操作为:
<!---->(define x (list 1 (list 2 (list 3 (list 4 (list 5 (list 6 7)))))))
(car (cdr (car (cdr (car (cdr (car (cdr (car (cdr (car (cdr x))))))))))))
够恐怖!-_-

习题2.26,纯粹的动手题,就不说了
习题2.27,在reverse的基础上进行修改,同样采用迭代,比较难理解:

<!---->(define (deep-reverse x)
  (define (reverse
-iter rest result)
    (cond ((null? rest) result)
          ((
not (pair? (car rest)))
           (reverse
-iter (cdr rest)
                 (cons (car rest) result)))
          (
else
           (reverse
-iter (cdr rest)
                 (cons (deep
-reverse (car rest)) result)))
           ))
  (reverse
-iter x ()))

习题2.28,递归,利用append过程就容易了:
<!---->(define (finge x)
  (cond ((pair? x) (append (finge (car x)) (finge (cdr x))))
        ((null? x) ())
        (
else (list x))))





dennis 2007-06-12 09:55 发表评论
分享到:
评论

相关推荐

    sicp第二章练习题的解答

    针对提供的文件名,我们可以推测这些是该章节练习题的解答,可能包括了用Scheme语言编写的程序或代码片段。 1. **ex2.5.ss**: 这个文件可能包含了对第二章练习2.5的解答。在SICP中,练习2.5通常涉及到了过程定义、...

    SICP 习题答案

    《计算机程序的构造和解释》...通过解答SICP的习题,读者将深入理解这些概念,并能运用到实际的编程实践中。习题旨在促进对这些基本原理的深入思考,帮助程序员建立坚实的基础,进而在面对复杂的编程挑战时能游刃有余。

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

    《SICP习题解答,主要第一章的内容习题答案》 SICP,全称《Structure and Interpretation of Computer Programs》(计算机程序的构造和解释),是计算机科学领域的一本经典教材,由MIT(麻省理工学院)的 Harold ...

    sicp 2.2.4节图形语言

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

    sicp:我的 SICP 练习

    在" sicp-master "这个压缩包中,可能包含的是对SICP各章节练习题的解答,包括源代码、注释和分析。这些练习通常涵盖了函数式编程的基础,如高阶函数、递归、闭包,以及更高级的主题,如过程构造、数据结构、环境...

    sicp in python 中文 sicp 中文

    sicp in python 中文版 sicp in python 中文版 sicp in python 中文版 !!!download&gt;&gt;&gt;https://github.com/wizardforcel/sicp-py-zh

    SICP中文第二版

    SICP中文第二版SICP中文第二版SICP中文第二版SICP中文第二版SICP中文第二版

    SICP 解题集

    《SICP解题集》是一份专注于探讨和解答《结构与解释程序》(Structure and Interpretation of Computer Programs,简称SICP)一书中习题的资源。SICP是计算机科学领域的一本经典教材,由Harold Abelson、Gerald Jay ...

    sicp-solutions:SICP练习解决方案

    在"sicp-solutions"中,你可以找到对SICP书中各个章节练习题的解答,这些解答将帮助读者理解并实践书中所讲解的编程概念和技术。 1. **基本编程构造**:Scheme提供了基础的编程构造,如定义函数(`define`)、求值...

    SICP(python中文带书签)

    《计算机程序的构造与解释》(Structure and Interpretation of Computer Programs,简称SICP)是一本备受推崇的经典计算机科学教材,由Harold Abelson和Gerald Jay Sussman撰写,并由MIT出版社出版。这本书以其深入...

    SICP-Python版本

    SICP-Python版本

    SICP 使用的scheme解释器

    SICP 使用的scheme解释器 以前叫DrScheme

    sicp-Structure and Interpretation of Computer Programs

    书中大量的练习题和示例代码鼓励读者动手实践,加深对概念的理解。此外,SICP还引入了许多先进的编程思想和技术,如函数式编程、递归、抽象数据类型等,这些都对现代软件开发产生了深远的影响。 #### 四、总结 ...

    Python SICP epub版本

    Python SICP epub版本,很适合学习抽象的思想,用Python版本比lisp更实用

    北京大学,计算机程序构造和解释(SICP)课件,裘宗燕老师主讲

    《计算机程序构造和解释》(SICP,Structure and Interpretation of Computer Programs)是一本具有深远影响力的计算机...压缩包中的“SICP 北大课件”文件可能包含课件、讲义、习题解答等资料,是学习SICP的宝贵资源。

    SICP LISP AI

    《SICP》全称是《Structure and Interpretation of Computer Programs》,中文译为《计算机程序的构造和解释》。这是一本经典的计算机科学教材,由Harvard大学的 Harold Abelson 和 Gerald Jay Sussman 教授撰写,...

    a_book_sicp_py

    本书名为《a_book_sicp_py》,是一本以Python语言为基础介绍设计模式和计算机科学基础的书籍。根据描述和部分内容,可以提炼出以下知识点: 1. 编程语言的重要性:在计算机科学的宽泛领域中,编程语言扮演着至关...

    PyPI 官网下载 | sicp-0.0.1b102.dev4.tar.gz

    标题中的"PyPI 官网下载 | sicp-0.0.1b102.dev4.tar.gz"指的是从Python的官方包索引(Python Package Index,简称PyPI)上下载的一个名为"sicp"的软件包的版本号为0.0.1b102.dev4的压缩文件,其格式是tar.gz。...

    sicp in python 中文版 sicp

    sicp in python 中文版 sicp in python 中文版 sicp in python 中文版 download : https://github.com/wizardforcel/sicp-py-zh

Global site tag (gtag.js) - Google Analytics