【SICP练习】135 练习3.66

练习3-66

原文

Exercise 3.66. Examine the stream (pairs integers integers). Can you make any general comments about the order in which the pairs are placed into the stream? For example, about how many pairs precede the pair (1,100)? the pair (99,100)? the pair (100,100)? (If you can make precise mathematical statements here, all the better. But feel free to give more qualitative answers if you find yourself getting bogged down.)

分析

对于序对(m,n)有两种情况:
1) m = n
(m,n)=2^m-2
2) m < n
(m,n)=2^m*(n-1) + 2^(m-1)-2

(1,100)=2^1*99+2^0-2=198-1=197

代码

(define (stream-take-while pred? stream)
    (if (stream-null? stream)
        '()
        (if (pred? (stream-car stream))
            (cons-stream (stream-car stream)
                         (stream-take-while pred? (stream-cdr stream)))
            '())))

(define before-1-100 (stream->list
             (stream-take-while
                    (lambda (pair)
                            (not (equal? pair '(1 100))))
                   (pairs integers integers))))

;Value: before-1-100

before-1-100

;Value 13: ((1 1) (1 2) (2 2) (1 3) (2 3) (1 4) (3 3) (1 5) (2 4) (1 6) (3 4) (1 7) (2 5) (1 8) (4 4) (1 9) (2 6) (1 10) (3 5) (1 11) (2 7) (1 12) (4 5) (1 13) (2 8) (1 14) (3 6) (1 15) (2 9) (1 16) (5 5) (1 17) (2 10) (1 18) (3 7) (1 19) (2 11) (1 20) (4 6) (1 21) (2 12) (1 22) (3 8) (1 23) (2 13) (1 24) (5 6) (1 25) (2 14) (1 26) (3 9) (1 27) (2 15) (1 28) (4 7) (1 29) (2 16) (1 30) (3 10) (1 31) (2 17) (1 32) (6 6) (1 33) (2 18) (1 34) (3 11) (1 35) (2 19) (1 36) (4 8) (1 37) (2 20) (1 38) (3 12) (1 39) (2 21) (1 40) (5 7) (1 41) (2 22) (1 42) (3 13) (1 43) (2 23) (1 44) (4 9) (1 45) (2 24) (1 46) (3 14) (1 47) (2 25) (1 48) (6 7) (1 49) (2 26) (1 50) (3 15) (1 51) (2 27) (1 52) (4 10) (1 53) (2 28) (1 54) (3 16) (1 55) (2 29) (1 56) (5 8) (1 57) (2 30) (1 58) (3 17) (1 59) (2 31) (1 60) (4 11) (1 61) (2 32) (1 62) (3 18) (1 63) (2 33) (1 64) (7 7) (1 65) (2 34) (1 66) (3 19) (1 67) (2 35) (1 68) (4 12) (1 69) (2 36) (1 70) (3 20) (1 71) (2 37) (1 72) (5 9) (1 73) (2 38) (1 74) (3 21) (1 75) (2 39) (1 76) (4 13) (1 77) (2 40) (1 78) (3 22) (1 79) (2 41) (1 80) (6 8) (1 81) (2 42) (1 82) (3 23) (1 83) (2 43) (1 84) (4 14) (1 85) (2 44) (1 86) (3 24) (1 87) (2 45) (1 88) (5 10) (1 89) (2 46) (1 90) (3 25) (1 91) (2 47) (1 92) (4 15) (1 93) (2 48) (1 94) (3 26) (1 95) (2 49) (1 96) (7 8) (1 97) (2 50) (1 98) (3 27) (1 99) (2 51))

(length before-1-100)

;Value: 197

(注:代码来源于网络)




感谢访问,希望对您有所帮助。 欢迎关注或收藏、评论或点赞。



为使本文得到斧正和提问,转载请注明出处:
http://blog.csdn.net/nomasp


时间: 2024-09-20 00:07:29

【SICP练习】135 练习3.66的相关文章

【SICP练习】93 练习2.66

练习2.66 这道题相当于二叉树在实际工程中的一个运用,我们依旧要用到前面所学到的三个过程:entry, left-branch, right-branch.这三者的作用分别是取出结点.左分支.右分支.而根据题目要求,这里还需要一个获取键值的key.当然了,就像书中上文所展示的那样,key并不需要我们写出来,这里就用到了按愿望思维. (define (lookup given-key tree-of-records) (if (null? tree-of-records) #f (let ((e

【SICP练习】66 练习2.37

 练习2.37 这道题花了我太长的时间了,一开始我就把题目中的m看成了w.然后题中给出的dot-product的两个参数我还以为一个是向量另一个是矩阵.怎么算都算不出来,直到看到"返回求和..."里的w只有一个i而没有j.好了,那么开始按照题目的要求来做题了. 既然发现了自己的错误,那么就知道了dot-product是干嘛的了,它可以用来求一个矩阵中的一列和一个向量的积.因此定义出matrix-*-vector就不难了. (define (matrix-*-vector m v)

[LeetCode]135.Candy

[题目] There are N children standing in a line. Each child is assigned a rating value. You are giving candies to these children subjected to the following requirements: Each child must have at least one candy. Children with a higher rating get more can

恒指半日跌135点报18544成交403亿元

美股好淡争持,恒指今早低开158点见18,522,半日波幅介乎18,245至18,636点之间,中午收市报18,544.26点,跌135.27点或0.72%:国企指数跌43.22点或0.4%,报10,818.35点,大市半日成交403亿元:期指中午报18,496,跌150点,比现货低水45点,成交48,726张. 今日是恒生指数成分股调整后的首个交易日,汇控(00005-HK)跌1.22%,其他银行股亦普遍随大市下滑:恒生(00011-HK)跌2.2%,中银香港(02388-HK)跌1.84%:

广电电气过会遭疑高管5000余万购得2.66亿资产

21世纪经济报道 郑世凤 上海报道 都说天下没有免费的午餐,但似乎总是有人能享受不花钱的盛宴. 日前过会的上海广电电气(集团)股份有限公司(下称广电电气)实际控制人,就是这种幸运儿. 12月20日的过会公告,将让广电电气实际控制人严怀忠独享超过50亿元的财富盛宴. 然而,鲜为人知的是,10年前,严怀忠等公司高管就已享受过一顿高达2.03亿元的"免费午餐". 2.03亿元成无头资产 即将登陆中小板的广电电气,主要从事高低压成套设备及元器件生产与销售,拟公开发行1.05亿股,总股本将达5.

【SICP归纳】5 泛型运算符

关于数据抽象,有两个很重要的思想.一是在构建一些水平的抽象障碍在这个系统中.用某些对象来代换这些单独使用的抽象屏障.二是当需要使用某种形式的数据对象时,往往可以由其他人来将其实现,而我们并不需要知道具体操作.这都是在数据抽象方面非常强大的编程方法. 但是这还不足以完成一个真正复杂的系统.在这里的问题出在"其他人",作者常举的例子是Georges.归结来说,有很多人都工作在这个系统上,但所有的这些设计表达式很显然是不兼容的.问题是所有的整个系统却又不可能由一个人来完成,可又无法让所有的实

28家创业板公司业绩同比增66.53%

1月27日,6家创业板公司发布09年业绩预告.截至目前,发布业绩预告的21家创业板公司全部预增,可谓是喜报频传.不过,有分析人士指出,随着整体业绩增长趋于明朗,创业板的整体高估值有望继续降温. 28家公司市盈率降至61.7倍 截至1月27日,已有21家公司创业板上市公司发布业绩预告,1家公司披露年报,10家公司发布业绩快报.剔除其中重复发布业绩信息的公司,共有28家创业板公司发布09年年报或业绩预计. 基于谨慎性原则,我们采用业绩预计净利润区间的均值,以及年报和业绩快报的报告数据.统计显示,以上

上半年北京135楼盘涨价最高涨幅达14000元

每经记者 张敏 发自北京 今年上半年,北京市迎来了史上最大规模的涨价潮. 昨日,搜房网新盘数据监控中心的数据显示,今年1-6月,北京市共有135个楼盘涨价,涨价楼盘遍布所有区县.其中,"唐宁ONE"项目的涨幅为66.67%,涨价金额达到14000元/平方米,位居榜首. 有业内人士提醒,在实体经济和就业等基本面尚未恢复,而国内资本市场开始复苏的情况下,要警惕房地产市场再次出现2007年的狂热态势. 史上最大规模涨价潮 "之前从来没有出现过这样大规模的涨价现象."搜房网

贝莱德135亿美元收购BGI催生2.7万亿资产管理巨头

一夜间,"BGI"有了不同含义. 纽约时间6月11日,贝莱德(Black Rock)称,已与巴克莱达成协议,将以66亿美元现金及3780万股贝莱德股票,将巴克莱旗下的资产管理部门巴克莱全球投资者(Barclays Global Investors,BGI)收入囊中. 新的贝莱德全球投资者(BlackRock Global Investor),以2.714万亿美元资产规模,成为全球最大的资产管理公司. 按截稿时贝莱德182.6美元之股价,3780万股的价值约为69亿美元.以此计算,整个交