SICP-Exercise 1.9

Exercise 1.9.  Each of the following two procedures defines a method for adding twopositive integers in terms of the proceduresinc,which increments its argument by 1, anddec, which decrementsits argument by 1.

(define (+ a b)

(if (= a 0)

b

(inc (+ (dec a) b))))

(define (+ a b)

(if (= a 0)

b

(+ (dec a) (inc b))))

Using the substitution model, illustrate the process generated by eachprocedure in evaluating(+ 4 5). Are these processes iterative or recursive?

逐步替代+函数。(+ 2 3 )好了。

第一个+函数:recursive

(+ 2 3)

(inc (+ 1 3))

(inc (inc (+ 0 3)))

(inc (inc 3))

(inc 4)

5

第二个+函数:iterative

(+ 2 3)

(+ 1 4)

(+ 0 5)

5

尾递归的一个特点,被替代的函数+,作为表达式的第一个符号(+ (dec a) (inc b))。

Exercise 1.10.  The following procedure computes a mathematical function called Ackermann‘s function.

(define (A x y)

(cond ((= y 0) 0)

((= x 0) (* 2 y))

((= y 1) 2)

(else (A (- x 1)

(A x (- y 1))))))

What are the values of the following expressions?

(A 1 10)

(A 2 4)

(A 3 3)

Consider the following procedures, where A is the procedure defined above:

(define (f n) (A 0 n))

(define (g n) (A 1 n))

(define (h n) (A 2 n))

(define (k n) (* 5 n n)); For example, (k n) computes 5n2.

Give concise mathematical definitions for the functions computed bythe proceduresf,
g, and h for positive integervalues of n.

解:

(A 1 10);展开

(A 0 (A 1 9))→ 2*(A 1 9)→2*2*(A 1 8)→

所以

(define (f n) (A 0 n)) 表示2*n

(define (g n) (A 1 n))表示2n.

(A 2 4);展开

(A 1 (A 2 3))

(A 0 (- (A 2 3) 1)→不好搞了

我们反过来推算,可以得到,

(A 2 1)→2

(A 2 2)→(A 1 (A 2 1)) →(A 1 2)→22

(A 2 3) →(A 1 (A 2 2))→(A 1 4) → 222

(A 2 4)→(A 1 (A 2 3)))→(A 1 16)→ 2222

所以(define (h n) (A 2 n))表示2的平方的平方的平方的....怎样写啊??(2**2)**n ??

(A 3 3)→(A 2 (A 3 2))...

反过来推算吧

(A 3 1)→2

(A 3 2)→(A 2 (A 3 1))→(A 2 2)→2*2

(A 3 3)→→(A 2 (A 3 2))→(A 2 4)→ 2222

版权声明:本文为博主原创文章,未经博主允许不得转载。

时间: 2024-11-13 07:53:08

SICP-Exercise 1.9的相关文章

sicp Exercise 1.3 强行解答

题目如下: Exercise 1.3. Define a procedure that takes three numbers as arguments and returns the sum of the squares of the two larger numbers. 看到题目后,我个傻逼就严格遵循题意去解题了,在三个数中找到前两个大数,求其平方和.(解完后看网上的答案是将三个数累加,然后减去最小的) 解完后看看自己的代码,还是觉得自己解题的时候挺有勇气的...贴出来献个丑: (defi

nomasp 博客导读:Android、UWP、Algorithm、Lisp(找工作中……

Profile Introduction to Blog 您能看到这篇博客导读是我的荣幸.本博客会持续更新.感谢您的支持.欢迎您的关注与留言.博客有多个专栏,各自是关于 Android应用开发 .Windows App开发 . UWP(通用Windows平台)开发 . SICP习题解 和 Scheme语言学习 . 算法解析 与 LeetCode等题解 .而近期会加入的文章将主要是算法和Android.只是其他内容也会继续完好. About the Author 独立 Windows App 和

NoMasp博客导读

简介 博客简介 您能看到这篇博客是我的荣幸,本博客会定期持续更新.欢迎您的关注和留言. 个人简介 本科二年级,多年C#.Lisp编程经验,Windows App开发者,了解C.C++.HTML5等语言.密切关注人工智能.图像处理.云计算等,现阶段专攻Windows App开发. 博客导航 Algorithm 暂无 Amazing 暂无 Books 内容:2015读书计划及进度 <卡耐基写给男人的12堂财商课>摘录 C 暂无 CSharp C#相关的总结等. WPF和WinRT中的导航问题 文件

[SICP Notes] 1.1 The Elements of Programming

About the Book To know more about programming, I have decided to start reading the famous Structure and Interpretation of Computer Programs (SICP, or the Wizard Book), which is first published by MIT in 1985. The Wizard Book used MIT Scheme, which is

【SICP练习】122 练习3.53

练习3-53 原文 Exercise 3.53. Without running the program, describe the elements of the stream defined by (define s (cons-stream 1 (add-streams s s))) 分析 s是一串2的幂.也就是1.2.4.8.16.32--

SICP 习题 (1.46)解题总结

SICP 习题 1.46 要求我们写一个过程iterative-improve,它以两个过程为参数,其中一个参数用来检测猜测是否足够好,另一个参数用来改进猜测.过程iterative-improve应该返回另一个过程,所返回的过程接收一个参数作为初始猜测,然后不断改进猜测直到结果足够好.题目还要求我们使用iterative-improve重写1.1.7的sqrt过程和1.3.3节的fixed-point过程. 因为涉及到高阶函数,所以整个题目理解起来有一点点费劲.不过这道题作为第一章的收官题确实

SICP 1.19

解:这道题很有意思,结论是斐波那契数也可以用对数时间复杂度获得. 通过Tpq(Tpq)=TPQ建立方程,解得: P=pp+qq Q=qq+2pq 程序如下: (define (fib n)   (define (even? n)     (= (remainder n 2) 0))   (define (fib-iter a b p q count)     (cond ((= count 0) b)           ((even? count) (fib-iter a           

SICP 1.12

解: (define (pascal n)   (define (get n i)     (cond ((<= i 1) 1)           ((>= i n) 1)           (else (+ (get (- n 1) (- i 1))                    (get (- n 1) i)))))   (define (iter i n)     (if (<= i n)         (and (print (get n i))          

Exercise: Maps (单词统计)

A Tour of Go Exercise: Maps https://tour.golang.org/moretypes/23 WordCount (单词统计) 是一个很经典的小程序了,在很多编程入门教程中都会出现. 这道题比较简单,但也有一些知识点值得一提. 上面这个答案我是参考了网上别人写的.但在参考别人之前我也自己解题了,其中,唯一不同之处是这一句: m[word]++ 我本来写的是: _, ok := m[word] if ok { m[word]++ } else { m[word]

Exercise: Slices (画图)

A Tour of Go Exercise: Slices https://tour.golang.org/moretypes/18 这道题目,提供了一个画图函数 (pic.Show), 可以生成图片. 这个函数,即 pic.Show(f func(int, int) [][]uint8), 可见,它接受一个函数做参数,题目要求的正是编写这个参数.答案如下: 这里面,依赖一个 package, 即 "golang.org/x/tour/pic" 我上 https://github.co