资源描述:
《[lisp相关文档].tutorial.on.good.lisp.programming.style》由会员上传分享,免费在线阅读,更多相关内容在教育资源-天天文库。
1、LispUsersandVendorsConferenceAugust10,1993TutorialonGoodLispProgrammingStylePeterNorvigSunMicrosystemsLabsInc.KentPitmanHarlequin,Inc.cPortionscopyright1992,1993PeterNorvig.cPortionscopyright1992,1993KentM.Pitman.AllRightsReserved.1Outline1.WhatisGoodStyle?2.TipsonBuilt-InFunctionality3.Tipso
2、nNear-StandardTools4.KindsofAbstraction5.ProgrammingintheLarge6.Miscellaneous21.WhatisGoodStyle?GoodLispProgrammingStyleEleganceisnotoptional."{RichardA.O'KeefeGoodstyle(inanylanguage)leadstoprogramsthatare:UnderstandableReusableExtensibleEcientEasytodevelop/debugItalsohelpscorrectness
3、,robustness,compatibilityOurmaximsofgoodstyleare:BeexplicitBespecicBeconciseBeconsistentBehelpful(anticipatethereader'sneeds)Beconventional(don'tbeobscure)BuildabstractionsatausablelevelAllowtoolstointeract(referentialtransparency)Goodstyleistheunderware"thatsupportsaprogram31.1.Whe
4、redoesgoodstylecomefrom?WhatToBelieveDon'tbelieveeverythingwetellyou.(Justmost.)Worrylessaboutwhattobelieveandmoreaboutwhy.KnowwhereyourStyleRules"comefrom:Religion,Goodvs.EvilThiswayisbetter."PhilosophyThisisconsistentwithotherthings."Robustness,Liability,Safety,EthicsI'llputinredunda
5、ntcheckstoavoidsomethinghorrible."LegalityOurlawyerssaydoitthisway."Personality,OpinionIlikeitthisway."CompatibilityAnothertoolexpectsthisway."PortabilityOthercompilerspreferthisway."Cooperation,ConventionIthastobedonesomeuniformway,soweagreedonthisone."Habit,TraditionWe'vealwaysd
6、oneitthisway."AbilityMyprogrammersaren'tsophisticatedenough."MemoryKnowinghowIwoulddoitmeansIdon'thavetorememberhowIdiddoit."SuperstitionI'mscaredtodoitdierently."PracticalityThismakesotherthingseasier."41.1.Wheredoesgoodstylecomefrom?It'sAllAboutCommunicationExpression+Understanding
7、=CommunicationProgramscommunicatewith:HumanreadersCompilersTexteditors(arglist,docstring,indent)Tools(trace,step,apropos,xref,manual)Usersoftheprogram(indirectcommunication)51.1.Wheredoesgoodstylecomefrom?KnowtheContextWhenreadingcode:K