E-COM-NET
首页
在线工具
Layui镜像站
SUI文档
联系我们
推荐频道
Java
PHP
C++
C
C#
Python
Ruby
go语言
Scala
Servlet
Vue
MySQL
NoSQL
Redis
CSS
Oracle
SQL Server
DB2
HBase
Http
HTML5
Spring
Ajax
Jquery
JavaScript
Json
XML
NodeJs
mybatis
Hibernate
算法
设计模式
shell
数据结构
大数据
JS
消息中间件
正则表达式
Tomcat
SQL
Nginx
Shiro
Maven
Linux
sicp
【
SICP
练习】140 练习3.71
练习3-71原文代码(define(Ramanujans)(define(stream-cadrs)(stream-car(stream-cdrs)))(define(stream-cddrs)(stream-cdr(stream-cdrs)))(let((scar(stream-cars))(scadr(stream-cadrs)))(if(=(sum-triplescar)(sum-tripl
NoMasp
·
2015-09-08 21:00
Stream
define
【
SICP
练习】22 练习1.28
练习1.28这道题主要分为三个部分:1、非平凡平方根,并添加到expmod函数中2、类似于fermat-test的过程3、通过已知的素数和非素数来检验下面我们首先来写出能够在遇到非平凡平方根的时候报错的函数,在这个函数中:当x不等于1,x不等于(n-1),并且x的平方对n取余等于1,这三个条件都为真时则可以说遇到了“1取模n的非平凡平方根”。下面是该函数:(define(not-square-
NoMasp
·
2015-09-08 21:00
SICP
【
SICP
练习】59 练习2.29
练习2.29这种题,还有之前的那个rectangle的题目,对于变量、函数等的命名简直要让人疯掉。先来写出题目中的left-branch和right-branch吧。(define(left-branchmobile) (carmobile))(define(right-branchmobile) (cadrmobile))注意这里是cadr而不是cdr。对应的branch-lengt
NoMasp
·
2015-09-08 21:00
SICP
【
SICP
练习】86 练习2.58
练习2.58如果要由前序变成中序那就要有些大变动了。(define(make-suma1a2)(cond((=number?a10)a2)((=number?a20)a1)((and(number?a1)(number?a2))(+a1a2))(else(lista1‘+a2)))) (define(sum?x)(and(pair?x)(eq?(cadrx)‘+))) (define(addend
NoMasp
·
2015-09-08 21:00
SUM
number
define
a1
a2
【
SICP
练习】88 练习2.60
练习2.60这里的adjoin-set通过遍历后使用cons将表进行不断的组合,并在组合的过程中将x加到集合中去。(define(adjoin-setxset)(if(null?set)(listx)(let((current-element(carset))(remain-element(cdrset)))(cond((=xcurrent-element)set)((>xcurrent-elem
NoMasp
·
2015-09-08 21:00
SICP
define
【
SICP
练习】116 练习3.42
练习3-42原文Exercise3.42.BenBitdiddlesuggeststhatit’sawasteoftimetocreateanewserializedprocedureinresponsetoeverywithdrawanddepositmessage.Hesaysthatmake-accountcouldbechangedsothatthecallstoprotectedared
NoMasp
·
2015-09-08 21:00
Scheme
lambda
SICP
lisp
【
SICP
练习】113 练习3.33
练习3-33原文Exercise3.33.Usingprimitivemultiplier,adder,andconstantconstraints,defineaprocedureaveragerthattakesthreeconnectorsa,b,andcasinputsandestablishestheconstraintthatthevalueofcistheaverageoftheva
NoMasp
·
2015-09-08 21:00
c
CONSTRAINT
using
constant
define
【
SICP
练习】44 练习2.3
练习2.3我们并不必急于写出点什么,先来回过头看看书吧。第56页说到了一种称为按愿望思维的强有力的综合策略。在这道题里,我们就可以假设已经写好了能够表示矩形的代码,以及能够求矩形长和宽的函数。于是像先定义出add-rat一样,我们先定义出求矩形的周长和面机的函数。(define(get-perimeterx)(let((length(rectangle-lengthx)) (width(
NoMasp
·
2015-09-08 21:00
SICP
【
SICP
练习】26 练习1.32
练习1.32因为递归比迭代要更容易实现,因此我先考虑的递归。先将sum和product都列出来。(define(sumtermanextb) (if(>ab) 0 (+(terma) (sumterm(nexta)nextb))))(define(producttermanextb) (if(>ab) 1 (*(terma)
NoMasp
·
2015-09-08 21:00
递归
Scheme
迭代
SICP
【
SICP
归纳】4 模式匹配和以规则为基础的代换
在书中符号数据一节中,作者写了关于微积分的演算规则的程序。这是一个很程序化的程序,我们所做的是在讲这些(数学)规则翻译成计算机语言。因为它有程序化的行为和结构,那么存在其他的方法使书写这个程序更加清晰吗?这些规则都具有左右两侧。左侧是我们想要采取的导数的表达式,有右边则是其的替代。用可以匹配的模式,和能够代换的框架,可以得到新的表达式。所以这意味着模式是对源表达式的匹配,并且规则的应用的结果是去产
NoMasp
·
2015-09-08 21:00
模式
应用
模式匹配
结构
代换
【
SICP
练习】100 练习2.76
练习2.76这是一道论述题了吧。首先是带有显示反派的通用型操作,这种策略要求使用者留意命名方面的冲突。如书上所说,这种策略具有不可加性,因为每当增加新类型的时候,所有通用型操作都要求做相应的修改以适配新的类型。至于增加新的操作,同样因为这一点而不适用。然后是数据导向的风格,如书上的大片论述和我们所做的习题都可以看出来,这种策略对于增加新类型和增加新操作都很适合。而消息传递我们的学习并不深入,但根据
NoMasp
·
2015-09-08 21:00
命名
显示
cond
消息传递
【
SICP
练习】127 练习3.58
练习3-58原文Exercise3.58.Giveaninterpretationofthestreamcomputedbythefollowingprocedure:(define(expandnumdenradix)(cons-stream(quotient(*numradix)den)(expand(remainder(*numradix)den)denradix)))(Quotientis
NoMasp
·
2015-09-08 21:00
Stream
procedure
expand
define
num
【
SICP
练习】78 练习2.50
练习2.50先来定义一个在水平方向上反转画家的函数。(define(flip-horizpainter) (transform-painterpainter (make-vect1.00.0) (make-vect0.00.0) (make-vect1.01.0)))(defin
NoMasp
·
2015-09-08 21:00
SICP
【
SICP
练习】149 练习4.5
练习4-5原文Exercise4.5.Schemeallowsanadditionalsyntaxforcondclauses,(=>).Ifevaluatestoatruevalue,thenisevaluated.Itsvaluemustbeaprocedureofoneargument;thisprocedureistheninvokedonthevalueofthe,andtheresul
NoMasp
·
2015-09-08 21:00
for
value
Argument
syntax
cond
【
SICP
练习】75 练习2.46
练习2.46这道题就是彻头彻尾的”构造”了。直接上代码吧。(define(make-vectxcorycor)(listxcorycor))(define(xcor-vectv)(carv))(define(ycor-vectv)(cdrv))(define(add-vectfirst-vectsecond-vect) (make-vect(+(xcor-vectfirst-vect)
NoMasp
·
2015-09-08 21:00
SICP
【
SICP
练习】96 练习2.69
练习2.69如题目中所说,传入给successive-merge的参数是一个有序的集合。而这个函数将通过不断的归并得到最终的一个元素。如果传入的集合为0,也就是说返回的表应该是空表。如果传入的集合为1,那么将传入的集合的car部分取出来,这就是Huffman树了。而如果传入的集合大于1,那么就要多做些处理了。因为集合已经做好了排序,这里所谓的排序自然就是按照的权重了。因此最前面的元素其权重也最小。
NoMasp
·
2015-09-08 21:00
集合
参数
元素
merge
car
【
SICP
练习】63 练习2.34
练习2.34书中一开始有2个式子,一个是原式,一个根据Horner规则构造出的式子。而我们同样也可以将待求得式子写成这种方式,而且可以更进一步——那就是写成Lisp的前序表示:(+1(*x(+3(*x(+0(*x(+5(*x(+0x)))))))))由此可以观察得出lambda表达式里要做的是:(+this-coeff(*x(accumulate......通过不断的递归,最终就像上一题中图片
NoMasp
·
2015-09-08 21:00
SICP
【
SICP
练习】32 练习1.38
练习1.38我最喜欢做数学上的观察题了,这里也有一个Di,其依次为1,2,1,1,4,1,1,6,1,1,8……我最先看到的是除了一开始的2个之外,每三个数字的规律是前面是两个1,后面是个递增的偶数。于是我们便可轻而易举的写出这个函数了。(define(di) (if(=(remainder(-i2)3)0) (*(+(/(-i2)3)1)2) 1))而n一直都是1,于是我们
NoMasp
·
2015-09-08 21:00
SICP
【
SICP
练习】53 练习2.21
练习2.21如果在看
SICP
这本书之前做过其他准备工作,或者看过我的【Scheme归纳】那几篇文章,那这些题都是小case了。
NoMasp
·
2015-09-08 21:00
SICP
【
SICP
练习】84 练习2.56
这道题的代码略长啊。不过我也是因此而知道Edwin上的代码居然可以复制到word上,以前还想当然的以为不能复制的,毕竟在Edwin上粘贴用的Ctrl+Y,而不是Ctrl+V。在这里我就只将书上没有的代码贴出来了。(define(derivexpvar)(cond((number?exp)0)((variable?exp)(if(same-variable?expvar)10))((sum?exp)
NoMasp
·
2015-09-08 21:00
代码
word
exp
var
define
【
SICP
练习】91 练习2.64
练习2.64一开始list->tree会调用partial-tree,而后者会将每次传入的表分成两部分,然后组合成一个平衡树。中间运用了迭代的技巧,而这是让众多树枝产生的源泉。如果我们对前面的表’(1357911)做计算,返回的结果将会是:(5(1()(3()()))(9(7()())(11()())))其中的空表则表示的左、右没有子树。画出产生的树我就不再这里列出了,最终结果和图2-16中的最后
NoMasp
·
2015-09-08 21:00
组合
list
tree
调用
partial
【
SICP
练习】46 练习2.5
练习2.5这道题的意思是有一个新的cons,其接受两个参数a、b,并且返回(2^a)*(3^b)。这个比较容易实现了。(define(consab) (*(expt2a)(expt3b)))(cons22);Value:36根据题中的意思,并将其与car和cdr类比,得知car是要分离出2^a,cdr是要分离出3^b。(define(carx) (if(=0(remainderx2))
NoMasp
·
2015-09-08 21:00
SICP
【
SICP
练习】11 练习1.17
练习1.17这道题中有2个需要我们自己先写出来的函数double和halve,当然了,这都非常容易实现:(define(doublex) (+xx))(define(halvex) (/x2))题目中要求我们设计一个类似于fast-expt的求乘积的过程,并且只用对数的步数。(define(*xy) (cond((=y0)0) ((even?y)(dou
NoMasp
·
2015-09-08 21:00
map
SICP
loop
let
Edwin
【
SICP
练习】56 练习2.24-2.26
练习2.24其打印结果为:(1(2(34))) 练习2.25(definex‘(13(57)9))(cadr(caddrx));Value:7(definey‘((7)))(caary);Value:7(definez‘(1(2(3(4(5(67)))))))(cadr(cadr(cadr(cadr(cadr(cadrz))))));Value:7 练习2.26(definex(list123
NoMasp
·
2015-09-08 21:00
SICP
【
SICP
练习】42 练习2.1
练习2.1我们已经进入了新的一章,这本书还是蛮会循序渐进的嘛,第一题挺简单的。(define(make-ratnd) (let((g(gcdnd))) (if(
NoMasp
·
2015-09-08 21:00
SICP
【
SICP
练习】49 练习2.17
练习2.17这道题就比较简单了,直接可以写出如下:(define(last-pairlist) (if(null?(cdrlist)) list (last-pair(cdrlist))))版权声明:本文为NoMasp柯于旺原创文章,未经许可严禁转载!欢迎访问我的博客:http://blog.csdn.net/nomasp
NoMasp
·
2015-09-08 21:00
SICP
【
SICP
练习】148 练习4.4
练习4-4原文Exercise4.4.Recallthedefinitionsofthespecialformsandandorfromchapter1:●and:Theexpressionsareevaluatedfromlefttoright.Ifanyexpressionevaluatestofalse,falseisreturned;anyremainingexpressionsareno
NoMasp
·
2015-09-08 21:00
expression
CHAPTER
Forms
【
SICP
练习】151 练习4.7
练习4-7原文Exercise4.7.Let*issimilartolet,exceptthatthebindingsoftheletvariablesareperformedsequentiallyfromlefttoright,andeachbindingismadeinanenvironmentinwhichalloftheprecedingbindingsarevisible.Forexa
NoMasp
·
2015-09-08 21:00
lambda
lisp
SICP
Environment
eval
【
SICP
练习】109 练习3.22
练习3-22原文Exercise3.22.Insteadofrepresentingaqueueasapairofpointers,wecanbuildaqueueasaprocedurewithlocalstate.Thelocalstatewillconsistofpointerstothebeginningandtheendofanordinarylist.Thus,themake-queu
NoMasp
·
2015-09-08 21:00
Queue
lambda
SICP
lisp
state
【
SICP
练习】120 练习3.51
练习3-51原文Exercise3.51.Inordertotakeacloserlookatdelayedevaluation,wewillusethefollowingprocedure,whichsimplyreturnsitsargumentafterprintingit:(define(showx)(display-linex)x)Whatdoestheinterpreterprinti
NoMasp
·
2015-09-08 21:00
display
AFTER
Argument
line
define
【
SICP
练习】30 练习1.36
练习1.36这道题要求我们根据书上的newline和display来完成一个新版本的fixed-point。根据题目内容我们分为如下步骤:1、写出能够打印出计算中产生的近似值序列的函数。2、将第一步中的函数写入fixed-point中。3、根据题中的映射关系写出对应函数。4、根据下一节的内容写出一个利用平均阻尼技术的函数。5、测试以及对比。根据题中的意思,打印出步骤数和猜测值即可,即step和
NoMasp
·
2015-09-08 21:00
SICP
【
SICP
练习】83 练习2.55
练习2.55书上已经说过了在求值过程中引号会被替换成quote。因为表达中有2个单引号,因此car得到了第二个单引号。如果是cdr则会得到后面的一串字母。(cdr‘’abracadabra) ;Value:(abracadabra)版权声明:本文为NoMasp柯于旺原创文章,未经许可严禁转载!欢迎访问我的博客:http://blog.csdn.net/nomasp
NoMasp
·
2015-09-08 21:00
value
SICP
引号
【
SICP
练习】77 练习2.48-2.49
练习2.48(define(make-segmentstartend) (liststartend))(define(start-segments) (cars))(define(end-segments) (cadrs)) 练习2.49待填充版权声明:本文为NoMasp柯于旺原创文章,未经许可严禁转载!欢迎访问我的博客:http://blog.csdn.net/nomasp
NoMasp
·
2015-09-08 21:00
【
SICP
练习】103 练习2.81-2.97
练习2-81这里再次需要用到第186页的创建表格部分内容。当然了现在完全可以只是将make-table加载到这道题中。还有我们前面几题中用到的apply-generic。a)载入Louis的强制过程后,对两个复数调用exp会出现解释器假死的情况。b)Louis并没有纠正该问题,反而会让程序进入无限循环之中。c)解决这个错误的办法就是让apply-generic能够在其两个输入的参数的类型相同时让强
NoMasp
·
2015-09-08 21:00
apply
generic
exp
解释器
【
SICP
练习】122 练习3.53
练习3-53原文Exercise3.53.Withoutrunningtheprogram,describetheelementsofthestreamdefinedby(defines(cons-stream1(add-streamsss)))分析s是一串2的幂。也就是1、2、4、8、16、32……版权声明:本文为NoMasp柯于旺原创文章,未经许可严禁转载!欢迎访问我的博客:http://bl
NoMasp
·
2015-09-08 21:00
Stream
program
streams
define
defined
【
SICP
练习】115 练习3.41
练习3-41原文Exercise3.41.BenBitdiddleworriesthatitwouldbebettertoimplementthebankaccountasfollows(wherethecommentedlinehasbeenchanged):(define(make-accountbalance)(define(withdrawamount)(if(>=balanceamoun
NoMasp
·
2015-09-08 21:00
balance
line
define
account
wi
【
SICP
练习】5 练习1.9
以下是第一个加起两个正整数的方法,其中inc将参数加1,dec将参数减1。(define(+ab) (if(=a0) b (inc(+(deca)b))))用代换模型展示(+45)如下:(+45)(inc(+35))(inc(inc(+25)))(inc(inc(inc(+15))))(inc(inc(inc(inc(+05)))))(inc(
NoMasp
·
2015-09-08 21:00
递归
lambda
迭代
lisp
let
【
SICP
练习】10 练习1.16
练习1.16这道题题目特别长,说的无非就是要用一个不变量记录中间结果,然后写出对数步数内的通过迭代来计算幂的函数,当然了还要用到题目中括号内的那个关系。下面就直接上代码了:(define(fast-exptbn) (fast-expt-iter1bn))(define(fast-expt-iterabn) (cond((=n0)a) ((even?
NoMasp
·
2015-09-08 21:00
测试
lambda
迭代
SICP
Square
【
SICP
练习】134 练习3.65
练习3-65原文Exercise3.65.Usetheseriesln2=1-1/2+1/3-1/4+……tocomputethreesequencesofapproximationstothenaturallogarithmof2,inthesamewaywedidabovefor.Howrapidlydothesesequencesconverge?代码(define(ln2-summands
NoMasp
·
2015-09-08 21:00
for
lisp
SICP
series
compute
【
SICP
练习】145 练习4.1
练习4-1原文Exercise4.1.Noticethatwecannottellwhetherthemetacircularevaluatorevaluatesoperandsfromlefttorightorfromrighttoleft.ItsevaluationorderisinheritedfromtheunderlyingLisp:Iftheargumentstoconsinlist-
NoMasp
·
2015-09-08 21:00
【
SICP
练习】37 练习1.42
练习1.42这道题让我彻底爱上了lambda。复合这一概念早在数学中便已经学过了,我们先来根据题目的意思写出能够平方和能够加一这两个过程。可能是因为我看书不认真吧,写了很多次才完成这两个过程。一开始我都是以(define(incf)......)来开始的,但是每次都没有返回结果。终于醒悟了,过程嘛,就是像前面第41最下面所讲的一种关联那样,我们是要将一个lambda表达式关联到一个名字上面,这
NoMasp
·
2015-09-08 21:00
SICP
【
SICP
归纳】6 副作用与环境模型
虽说叫做副作用显得不太好听,但在Lisp中副作用还是非常重要的。而相对于所有状态都必须显式地操作和传递额外参数的方式,如果引进赋值和将状态隐藏在局部变量中,那么就可以用更加模块化的方式来构造系统。正如你所知道的,不用任何赋值的程序设计称为函数式程序设计。相反,广泛采用赋值的程序设计称为命令式程序设计。在C等命令式程序设计语言中,我们往往都要仔细考虑变量赋值的顺序,尤其是在循环中,但在函数式程序设计
NoMasp
·
2015-09-08 21:00
参数
命令
操作
环境
隐藏
【
SICP
练习】14 练习1.20
练习1.20这道题要求我们分别在正则序和应用序的情况下来研究书中的gcd函数,并且还要算出实际执行remainder运算的次数。题目中先问的正则序后问的应用序,但由于应用序比较简单,我们先来看看应用序:(gcd20640)(gcd406)(gcd64)(gcd42)(gcd20)2因此(gcd20640)共调用了5次remainder函数。再来看看正则序的情况:(gcd20640)(gcd40(r
NoMasp
·
2015-09-08 21:00
Scheme
lisp
gcd
【
SICP
练习】139 练习3.70
练习3-70原文代码(define(merge-weighteds1s2weight)(cond((stream-null?s1)s2)((stream-null?s2)s1)(else(let((cars1(stream-cars1))(cars2(stream-cars2)))(cond((<(weightcars1)(weightcars2))(cons-streamcars1(merge-
NoMasp
·
2015-09-08 21:00
【
SICP
练习】97 练习2.70
练习2.70既然要解码,那必须先将树给定义好了。(definetree(generate-huffman-tree‘((A2)(NA16)(BOOM1)(SHA3)(GET2)(YIP9)(JOB2)(WAH1))然后就是来编码题目中给出的歌词了。(definemessage-1‘(Getajob)) (definemessage-2‘(Shanananananananana)) (definem
NoMasp
·
2015-09-08 21:00
tree
message
generate
define
给定
【
SICP
练习】31 练习1.37
练习1.37根据题目中的意思通过观察得到k项有项连分式的一种表达方式:f=N1/(D1+(N2/(…+Nk/Dk)))这个式子可以不断展开,但如果我们把每一个”+”后面的式子记作T(i)。不对,我们应该将每一个N/D记作T(i),因为这组式起始于N/D,且中止与N/D。计N1/D1为T(1),N2/D2为T(2),Nk/Dk为T(k)。在数学上可能不会联想到递归,而是联想到一个表达式,以谋求能
NoMasp
·
2015-09-08 21:00
SICP
【
SICP
练习】33 练习1.39
练习1.39没想到最后一道题如此简单,n和d的过程可以如下定义:(define(ni) (if(=i1) i (-(*ii))))(define(di) (-(*2i)1))这里我们就不再重复写成块结构了。(define(tan-cfxk) (cont-fracndk))我测试了(tan-cf100100)以后吓了一跳,如果在(cont-fracndk)前加一个exac
NoMasp
·
2015-09-08 21:00
SICP
【
SICP
练习】66 练习2.37
练习2.37这道题花了我太长的时间了,一开始我就把题目中的m看成了w。然后题中给出的dot-product的两个参数我还以为一个是向量另一个是矩阵。怎么算都算不出来,直到看到“返回求和...”里的w只有一个i而没有j。好了,那么开始按照题目的要求来做题了。既然发现了自己的错误,那么就知道了dot-product是干嘛的了,它可以用来求一个矩阵中的一列和一个向量的积。因此定义出matrix-*-
NoMasp
·
2015-09-08 21:00
SICP
【
SICP
练习】64 练习2.35
练习2.35这道题中已经给定了accumulate和map,根据accumulate的参数可以很容易的知道题目中的2处需要我们补充的:(accumulate+0(map......因为我们是要累加所有的树叶,这里就需要在map里有一个lambda来讲t中的树叶全部遍历出来,map的第二个参数自然就是t了。而遍历t的过程中,遇到的节点有可能只是一片树叶,但也有可能是有两个分支。而如果是分支的话,
NoMasp
·
2015-09-08 21:00
SICP
【
SICP
练习】117 练习3.44
练习3-44原文Exercise3.44.Considertheproblemoftransferringanamountfromoneaccounttoanother.BenBitdiddleclaimsthatthiscanbeaccomplishedwiththefollowingprocedure,eveniftherearemultiplepeopleconcurrentlytransf
NoMasp
·
2015-09-08 21:00
Scheme
lambda
SICP
lisp
上一页
32
33
34
35
36
37
38
39
下一页
按字母分类:
A
B
C
D
E
F
G
H
I
J
K
L
M
N
O
P
Q
R
S
T
U
V
W
X
Y
Z
其他