CHAPTER8THEPROGRAMMER'SASSISTANT8.1INTRODUCTIONWithanyinteractivecomputerlanguage,theuserinteractswiththesystemthroughan``executive'',whichinterpretsandexecutestyped-incommands.InmostimplementationsofLisp,theexecutiveisasimple``read-eval-print''loop,whichrepeatedlyreadsaLispexpression,evaluatesit,andprintsoutthevalueoftheexpression.Interlisphasanexecutivewhichallowsamuchgreaterrangeofinputs,otherthanjustregularInterlispexpressions.Inparticular,theInterlispexecutiveimplementsafacilityknownasthe``programmer'sassistant''(or``p.a.'').Thecentralideaoftheprogrammer'sassistantisthattheuserisaddressinganactiveintermediary,namelyhisassistant.Normally,theassistantisinvisibletotheuser,andsimplycarriesouttheuser'srequests.However,theassistantrememberswhattheuserhasdone,sotheusercangivecommandstorepeataparticularoperationorsequenceofoperations,withpossiblemodications,ortoundotheeectofspeciedoperations.LikeDWIM,theprogrammer'sassistantembodiesanapproachtosystemdesignwhoseultimategoalistoconstructanenvironmentthat``cooperates''withtheuserinthedevelopmentofhisprograms,andfreeshimtoconcentratemorefullyontheconceptualdicultiesandcreativeaspectsoftheproblemathand.Wewillrstdiscussthevariousinputformats,thentheuseofcommandstotheprogrammer'sassistant,andnallyhowtomodifytheprogrammer'sassistantforspecializeduses.8.1.1InputFormatsTheInterlispexecutiveacceptsinputsinthefollowingformats:(1)Asinglelitatom,followedbyacarriage-return.Thevalueofthelitatomisreturned.Forthepurposesofthisdiscussion,wewillcallthisEVALV-format.(2)AregularInterlispexpression,beginningwithaleftparenthesisorsquarebracketandterminatedbyamatchingrightparenthesisorsquarebracket.Arightbracketmatchesanynumberofleftparentheses,backtothelastleftbracketortheentireexpression.Suchaninputisknownasan``EVAL-format''input,sincetheformissimplypassedtoforevaluation.Noticethatitisnotnecessarytotypeacarriagereturnattheendofsuchaform;Interlispwillsupplyoneautomatically.Ifacarriage-returnistypedbeforethenalmatchingrightparenthesisorbracket,itistreatedasaspace,andinputcontinues.Thefollowingexamplesareallinterpretedthesame:8.1EVAL_(PLUS1(TIMES23))_(PLUS1(TIMES23]|ï\†î%¤î,ñïVÂî·î!= î-šïK€î ìîi xïGî ìî Zîì îˆî î"¯î%î'êî-Rî0^î2¯î7î<@î>" îEÓïEvî ì îîßî`î)îâî%kî'Eî*«î5î6Õî:Uî<¿îBÏîDFîE|ïCÐî ìî ¨î}î�îî î"µî&Nî'uî*Š î1’î7rî9î;Ïî?¶îB'îD‚îH&ïB*î ìî \ îËîSîÙîÚî#ñî(î,Kî-‡î1mî6î9óî;¾î@YîDîG>ï@…î ìîšî ï=î ìî é î­î;îßî! î(¦î)ÿî.±î3cî5@î7Í îAd îG¢ï;Úî ì îÜîšîîâî‚îÇ î%eî*«î+ýî.±î0öî3Ôî5& î;Ìî=¢îAs ï:4î ìîÝî1 î{î%î ¦î&'î'´î-Kî/î1›î5î7íî<{î@ôîC‹îF ï8Žî ìîñî3î îî%2î(œî+î.î0�î4kî6=î8©î;¯î>HîABîH0ï6èî ìîî7 îcîƒîBî#!î$Ô î+Ñî.åî4 î<Ýî>œî@EîCÒîF+ï5Cî ìî ¥îI î{îªî Þî#= î+öî1Wî7}î9nî?iîAîE’ï3�î ìî î]îGî¥îGîî! î(üî+¼ î3Îî6Úî9,î<î=·î@ îH&ï1÷î ìî %î•îRî©î‡î< î$’î(+î+kî-xî/Þ î6Ç î=bî@îE9ï0Qî ìî £îî€îï-Lî ìî yî&îëîˆîêî³î!_î&·î)ßî,Aî.¹î0uî7Xî9 î;l îD' ï+¦î ìî  îËîÌîyî2î� î%Fî*¤î,ß î3¾|ï'Bî ìîiîxï"Ýî ìî Áî5î9îôî!î"Ëî%)î+5ïØî ìî î ƒî^îZîíîÚîöî$î(¼î+…î/î0Éî3î7¼î9î?.îAËîDï2î ìî £îB îî<îåînî î$Sï-î ìî î ¥îWîÐ îßî%Iî(eî)“î, î3/î4öî9\î>;î@ô îGãï‡î ìî îîe î‰îOî!´î'î(©î+ûî0Ùî6%î8Çî=ñî?¬îB" ïáî ìî î½î îxîÛî¦îXî¦î"~ î)®î-î.îî2…î3àî8Rî9îî;Íî@ÇîEÞï<î ìî \î»î îŒîùî\î"ìî%( î,Lî0¾î3‹î4áî6Mî8Áî>Ðî@~îCŒîD¶ï–î ìî/îßîUî#îóî:î|î~î% î'Ìî,Rî/ î8Lî9æî;'î@CîD†îF ïðî ìîAî¨îÊîÌî% î$Pî&î+\î,»î./î2Òî4‰î5»î9Òî<�î@B îGïJî ìîøîðîBî0 î!<î#™ïî(Ç!ÿÿ}0`m$Pxï<î ïEî ìîÍî{î]î ï úî ìîÍî{î]î "ÿ}0(`m$(ÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿExamples(3)Often,theuser,typingatthekeyboard,callsfunctionswithconstantargumentvalues,whichwouldhavetobequotediftheusertypeditin``EVAL-format''.Forconvience,iftheusertypesalitatomimmediatelyfollowedbyalistform,thelitatomisedtotheelementswithinthelist,unevaluated.Forexample,typingisequivalenttotyping,andisequivalentto.Theinputisterminatedbythematchingrightparenthesisorbracket.Wewillcallsuchinput``APPLY-format.''APPLY-formatinputisusefulinsomesituations,butnotethatitmayproduceunexpectedresultswhenanfunctioniscalledthatexplicitlyevaluatesitsarguments.Forexample,typingwillsettotheof,nottoitself.However,therearetimeswhenauserdoesnotwanttoterminatetheinputwhenaclosingparenthesisistypedespeciallywhengivingacommandtotheprogrammer'sassistant.Thisleadsustoourfourthformat.(4)Asequenceoflitatomsandlistsalitatomandaspace(todistinguishitfromAPPLY-format),terminatedbyacarriagereturnoranextrarightparenthesisorbracket.IfalististerminatedthenInterlispwilltypeacarriage-returnandtoindicatethatfurtherinputwillbeaccepted.Theusercantypefurtherexpressionsorterminatethewholeexpressionbyacarriage-return.Oncetheinputisterminated,theprogrammer'sassistantdecideshowtoevaluatetheexpression.Thisdeterminationreliesonaheuristicthatsays``Ifthereisonlyexpression,thenassumeEVALV-format.Iftherearetwoexpressions,thenassumeAPPLY-format.Iftherearethreeormoreexpressions,thenassumeEVAL-format.''Thefollowinginputsareexamplesofthisrule:8.1.2ExamplesSofar,wehavedealtonlywithhowtheexecutiveinstructsInterlisptoevaluateinput.However,thesameschemealsoallowstheusertogivecommandsdirectlytotheprogrammer'sassistant.Infact,ineachoftheabovecases,itisrstdeterminedwhethertheinitiallitatomisacommandtotheprogrammer'sassistant.Ifso,thenormallispevaluationprocessisbypassed.Notethatthismeansthatafunctionorvariablewiththesamenameasaprogrammer'sassistantcommandwillnotbeevaluated(inthenormallispsense)ifitistherstlitatomofanexpressioninputtotheexecutive.Theprogrammer'sassistantfacilityfeaturestheuseofmemorystructurescalled``historylists.''Ahistorylistisalistoftheinformationassociatedwitheachoftheindividual``events''thathaveoccurredinthe8.2_(PLUS1(TIMEScr23]APPLYLOAD(FOO)(LOAD'FOO)GETPROP(XCOLOR)(GETPROP'X'COLOR)nlambdaSETQ(FOOBAR)FOOvalueBARBARbeginningwith"..."_FOOcrsameasFOOcrEVALV-format_LIST(AB)...crsameasLIST(AB)APPLY-format_PLUS(TIMES23)...1crsameas(PLUS(TIMES23)1)EVAL-format|ïb1î&ÎxïUçî ìî îsîßî@î�î6î¢î%î(+î.2î1Yî6Òî=îAšîE³ïTAî ìî Rî#î5îýîîîî!î"‰î$Yî)Rî/fî22 î9î:”î=î@/îCãîE/ïRœî ì î¹îVîMîsî¬î fî"Àî'lî-î.óî0žî2øî8«î<éî?DîAÕ ïPöî ìî ªî‘îî ‘ î'Oî)î6¦î7�îHsïOPî ì î¬î"gî#µî&¢î*aî+ã î2åî4öî7kî={î@â îHïMªî ìîHîËîoîóîî¾î#~î)&î.5î2§î6Jî7¯î;¿î=fî@ñ îG^ïLî ìî îÛî6î=î— î àî%2î(éî0\î5×î7Hî;Aî> îCûïJ_î ìî ¼ îäî…îJî*éî-Šî2�î4Bî:î>Jî?îA‡îF-ïGZî ìî/îÄî&îÜî�îÖî!Üî%î'œî+î,Âî2öî5cî9î<Üî>îB¼ ïE´î ìî Tî&î î4îãîî 'î&€î(+î*† î3; î9î<1î?©îAuîC îE§ïDî ìïA î ìî î Ÿîƒî<îoî%î)î*8î.èî1žî2Èî6{î8¢ î?Žî@äîDJï?cî ìîJ îGîSîŽîÇî#î$Ùî&Úî*\î-½ î4ðî6Åîíî@ÞîGï<î ìî âîkîxî îRî î&8î(–î,Ÿ î3Qî5Kî6sî;�ï9î ìî ¡îîÙî] î¿î6 î(î-~î2sî5Žî7Tî<Ìî?C îFÆï7mî ì îÜî˜î¿î î·î"¥î%§î'úî+¢î-/î0h î7œî:âî?ÈîEï5Çî ìî ƒî îˆîI îóî-î$î)î.Vî/îî3‹î5óî9�î;iî? îFºï4!î ìî°îúî¤îyî!†î%±î(î-úî/²î2Q|ï>î ìîixïÙî ìî ßîNîbî•îèîîîôîäî"0î("î-†î2éî4„î9Ñî=öîDîFcï3î ìîäîËîî�î¡îlî tî'qî,î.Iî0Ä î9˜ î?ÓîA¾îDåîF¯ïŽî ìî ¸î*î=îî‰î îÞ î#5î(“î+î/î3Åî5Eî6‚î<òî>´îA' ïèî ì îýî�î»î(îñî” î$Aî) î*šî1%î4¨î7ƒî:2î>‚îA]îB–îHïBî ìî$îBî¦î&îèî›îÊ î'‡î,ëî3Mî5üî8uî:jî@•îBÁîE%ïœî ìî î“îóîHî²îîÐî~î 5î"$ î(Öî,}î.*î0ˆ ï —î ìî Á îvîÔîVî$|î&Ùî)Kî+î0i î6¤î:—î?ÓîCÅîEPï ñî ìî 1î ¦îÙîîáîH îÕ î#Fî&hî) î+bî-Ê î4P î9ïî<Åî@îEÉîG€ïî(Ç"ÿ}D`m$ŽxïZ’î ìîÍî{zïZüîµî6xïXìî ìî šïRœî(ÔïPöîçî-hî2rî:gîBÎïOPîpîî…{ïLî*ÞxïJ_î‚î'î/œ{î6—xî;ÄîC,{ïA îæî&xï=¾î%hï1î ì zï1†îYîÙ{ï/vîhîÞî!¤zï/àî$¥î%&{ï/vî&@î(2î-†xï,+î ìîöî{ï*…î ìzï*ïî  î !{ï(ßîhîÜî!¡î&÷î(óî*äî0xï%”î ìîöîØî†ï#îî ìzï$Wî wî ø{ï"HîhîØî!˜î&eî, î-Jî.ÿî0µî2¢î6ø"ÿÿÿ}D`m$ÀÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿTHEPROGRAMMER'SASSISTANTsystem,whereeacheventcorrespondstooneuserinput.Associatedwitheacheventonthehistorylististheinputanditsvalue,plusotheroptionalinformationsuchasside-eects,formattinginformation,etc.Thefollowingdialogue,takenfromanactualsessionattheterminal,containsillustrative(butnotnecessarilyuseful)examplesandgivestheavoroftheprogrammer'sassistantfacilityinInterlisp.Thenumberbeforeeachpromptisthe``eventnumber''(seepage8.26).8.312_(SETQFOO5)513_(SETQFOO10)(FOOreset)10Thep.a.noticesthattheuserhasresetthevalueofFOOandinformstheuser.14_UNDOSETQundone.15_FOOcr5Thisistherstexampleofdirectcommunicationwiththep.a.TheuserhassaidtoUNDOthepreviousinputtotheexecutive....25_SET(LST1(ABC))(ABC)26_(SETQLST2'(DEF))(DEF)27_(FORXINLST1DO(REMPROPX'MYPROP]NILTheuseraskedtoremovethepropertyMYPROPfromtheatomsA,B,andC.Nowletsassumethatisnotwhathewantedtodo,butratherusetheelementsofLST2.28_UNDOFORFORundone.FirstheundoestheREMPROP,byundoingtheiterativestatement.NoticetheUNDOacceptedan``argument,''althoughinthiscaseUNDObyitselfwouldbesucient.29_USELST2FORLST1IN27NILTheuserjustinstructedtogobacktoeventnumber27andsubstituteLST2forLST1andthenreexecutetheexpression.Theusercouldhavealsospecied-2insteadof27tospecifyarelativeaddress....|ïb'î·î!= î-šxï\:î ìî¸îÉîóî¡ î!8î"áî%‡î(zî,£ î3iî6}î9¨î=Vî?WîA±îF:îHsïZ”î ìî Iîðî¥î~î|îrîî$l î+ïî/î0Êî3”î8! î>ß îFºïW�î ìî îfî¦î¯î!^î#™î'äî,Çî.ªî1Sî7~î=( îD'îGjïUéî ì îÐîoîxî>î!¾î$-î(î)äî,S î5î:Šî?î@Ü îGïTDî ìîî^îŒîrîÝî:î#›î)sî,=î/�ïî(Çÿ}¸`m$¶xïQ>î ìî{îØïO™î ìïMóî ìî{îØïLMî ìîïJ§î ì{ïG¢î ìî ¬îlîèî·îîãîVî!†î#Ðî'Wî(ùî,~î/î3þî6HxïD�î ìïB÷î ìîïAQî ìzïA»î%î¦xï?¬î ì{ï<¦î ìî î‹îéî­îîÍîŸ î(î+î-}î0xî3Lî6Bî8Êî;¨î=_îBAîDŸï;î ìî lîîZ xï7üî ìï6Vî ìï4°î ìï1«î ì îî†î4ï0î ìî qîï._î ìî{î¯î îºï,ºî ìî qîï+î ìî¤îSîØî î‘î# î$Ïï)nî ì{ï&iî ìî §îƒîEîãîyî½î!î'¬î*áî-&î1 î2ßî4§î7Cî9î<=î>¬îCMîFîG|ï$Ãî ìî 2î îžîAî}îÜîÞî <î"†î(î)¤xï!¾î ìî¤ï î ìî H{ïî ìî jî‰îIîØîî!5î&§î)6î.¦ î6î:™î=(îB;îGìïmî ì î£î=îáîxîdî#1î% î(Pî,8î.xïhî ìîÍîî]î‘îïÂî ì{ï½î ìî µî î? îsî î îXî!î$Žî)wî+cî. î4î8î:5î>%î@ÏîCàïî ìî 6 îDîîæî‚î§î"pî'¾î(7î)jî-üî/žî1�î3%î7†î8ºî=vxïî ìï lî ìï Çî ì ÿ}¸`m$ÊÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿExamplesAsstatedearlier,themostcommoninteractionwiththeprogrammer'sassistantoccursatthetoplevelread-eval-printloop,orinabreak,wheretheusertypesinexpressionsforevaluation,andseesthevaluesprintedout.Inthismode,theassistantactsmuchlikeastandardLispexecutive,exceptthatbeforeattemptingtoevaluateaninput,theassistantrststoresitinanewentryonthehistorylist.Thusiftheoperationisabortedorcausesanerror,theinputisstillsavedandavailableformodicationand/orreexecution.Theassistantalsonotesnewfunctionsandvariablestobeaddedtoitsspellingliststoenablefuturecorrections.Thentheassistantexecutesthecomputation(i.e.,evaluatestheformorappliesthefunctiontoitsarguments),savesthevalueintheentryonthehistorylistcorrespondingtotheinput,andprintstheresult,followedbyapromptcharactertoindicateitisagainreadyforinput.Iftheinputtypedbytheuserisrecognizedasap.a.command,theassistanttakesspecialaction.Commandssuchasandareimmediatelyperformed.Commandsthatinvolvedreexecutionofpreviousinputs,suchasand,areachievedbycomputingthecorrespondinginputexpression(s)andthenthem.Theeectofthisunreadingoperationistocausetheassistant'sinputroutine,,toactexactlyasthoughtheseexpressionsweretypedinbytheuser.Theseexpressionsareprocessedexactlyasthoughtheyhadbeentyped,exceptthattheyarenotsavedonnewandseparateentriesonthehistorylist,butassociatedwiththehistorycommandthatgeneratedthem.Theneteectofthisimplementationoftheprogrammer'sassistantistoprovideafacilitywhichiseasilyinsertedatmanylevels,andembodiesaconsistentsetofcommandsandconventionsfortalkingaboutpastevents.Thisgivestheuserthesubjectivefeelingthatasingleagentiswatchingeverythinghedoesandsays,andisalwaysavailabletohelp.8.447_(PUTHASH'FOO(MKSTRING'FOO)MYHASHARRAY)"FOO"IfMKSTRINGwasacomputationallyexpensivefunction(whichitisnot),thentheusermightbecacheingitsvalueforlateruse.48_USEFIEFUMFOEFORFOOINMKSTRING"FIE""FUM""FOE"TheusernowdecideshewouldliketoredothePUTHASHseveraltimeswithdierentvalues.Hespeciestheeventby``INMKSTRING''ratherthanPUTHASH.49_??USE48.USEFIEFUMFOEFORFOOINMKSTRING_(PUTHASH(QUOTEFIE)(MKSTRING(QUOTEFIE))MYHASHARRAY)"FIE"_(PUTHASH(QUOTEFUM)(MKSTRING(QUOTEFUM))MYHASHARRAY)"FUM"_(PUTHASH(QUOTEFOE)(MKSTRING(QUOTEFOE))MYHASHARRAY)"FOE"Hereweseetheuseraskthep.a.(usingthe??command)whatithasonitshistorylistforthelastinputtotheexecutive.Sincetheeventcorrespondstoaprogrammer'sassistantcommandthatevaluatesseveralforms,theseformsaresavedastheinput,althoughtheuser'sactualinput,thep.a.command,isalsosavedinordertoclarifytheprintoutofthatevent.UNDO??REDOUSEunreadingLISPXREAD|ïb1î&Îxï. î ìî î'îáî[îÐî — î'‡î*»î-5 î6î;�î?ÞîA’îD îFšï,zî ìî øîÍî(î™îQîóîî3î#<î%�î({î,î-£ î4Ïî6ÿ î=ëî@–îC`îE³ï*Ôî ìîæî\îTîî}îî#Žî&nî*kî-?î.’î4Sî7” î>%îBœîE’ï).î ì îêî¶î4îAîgî ãî&`î)@î-<î.°î0{î1Ãî4Íî8|î: î=îAÈîDäîH}ï'‰î ìî Mîvîåîðî·îñî äî$°î'î*¾î,-î.Ðî2›î5Uî;î=N îE:ï%ãî ì îÂî‰îØî“î î"üî(æî+Œî13î2Ñî4±î8Ãî:aî<+îA-îCÞîE|ï$=î ìî( îõî­î'î!¡î'2î)¬ î1»î4éî:èî=aî@áîBÀîG€ï"—î ìîYîÿîÑ îDîÂî î#¸î%]î'³î+=î-:î/�î4î6K î?2î@ØîC/îG(ï òî ìî Ôî2îQîðîêîî!ùî'Üî)‰î.°î0î1pî5î8Ýî;ïìî ìî ©îDî(î8îoî î=îå î'î(êî*Pî-Ðî4Ðî7jî=î@½îEqïGî ìî9îtîî\î!º î)– î0üî8Iî;!î@Á îH&ï¡î ìîfîÝîüîjî!•î"bî$¤î*@î,+î2ðî5> î>îAµ ïûî ìî ¢îî$îûî ¯î"iî% î+ˆî1­î3î4Éî8|î:Ü îAîDÁïUî{îTîþî-îÂîlî!î$› î+Îî/î2êî4“î6Šî8åî<]î@Y îGŒï°î ìîAîõî¼î‡î¯î!î$ôî)Aî-¨î0�î3·î6#î8±î<”î>³îAºîDŠï î ìîXî\î¹îGîÚîY î"¿î%×î(4î,Áî3î5èî<-ïî ìî ½îîÃîvî î áî"”î$í î-Ÿî2ùî4_î6î; î<-î@«îD°îFï_î ìî4îâî¿îúîÅî!ÿî#> î)¥î+×î-¥î4šî7e î? îA\îEÿï ¹î ìî Õî¨îÈî?î¥î¤î î&oî*ùî-Íî.ÿî2ïî6©î8î=ò îD¸îF°ï î ìî ¡îÙîŽîøîYîî¼ïî(Ç ÿÿÿ}p`m$Äxï\Aî ì îî4î ›î%¦ ïZ›î ì{ïW–î ìî pî¯îFîqî!2î'1î,pî0Àî2î3qî6�î9�î;ßî>¹îBˆîDNïUðî ìî ÆîMîsî˜xïRëî ìîÍî*î†îâî?î ›î# ïQEî ìïOŸî ìïMùî ì{ïJôî ìî ¨î†îZîïîÅîªîOî ïî#ìî&2î-»î2$î5©î8žî=ìîByîD»ïIOî ìî 6î¶î�îo îfî!gî$…xïFIî ìîöïBþî ìî�îìîIî¥îî!^î$ºî'?ïAXî îrîSî ‡î(îî.Ïî3Ú ï?²î ï> î îrîSî ‡î(îî.Ïî3Ú ïxïWÓî ìî Á îxîÖ î!rî"›î'Ãî)zî0±î4»î9iî<¸î>eîAFîE{îG€ïV-î ìîyî7î5îîeî"þ î)î+<î1î4î7î9ˆî;wî=öî?úîBWîFäïS(î ìî Úî[î¹î±îUîîõî!ïî$Nî'Èî+…î-3î.\î1(î7Üî9î>NîC¢îE ïQƒî ìî ˜î\î2îþî[î$î! î*î,¿î/¶ î6Øî9î<ïN}î ìî [ î0î­î!ªî$;î&·î*P î1ýî4Ðî9/î;‰ îBîF+ïLØî ìî ´îïîúî]îðî2î•î#öî'Îî)Ûî-$î1Ùî7iî>NîAUîCJïK2î ìî î–î>îùî[ î$Mî)Ñî,µî/€î4î8î<î>Û îE’ïIŒî ì î|îøîÛîî"_î$Ûî+î/¾î5¿î8<î;ëî=ÂîA’ ïGæî ìîà |ïC‚î ìîiîF xï?î ìî Tîîî îËî!•î#±î&&î*Ëî-Ñî/_î4rî6Aî7‚î=|î?L îG¢ï=wî ìîôîûîxî¼îåîÀî# î&î*»î-nî1Zî3î5•î:³î<ƒî>ùîEºîG€ï;Ñî dîTîÍîµîî¦î"™î&hî, î.(î0£î3jî8æî;aîAãîF+ï:,î ìî xîÐîÛîqîæîæî!‹î'íî+8î--î0¢î2î8^î;î=}îBîHsï8†î ìîìîŽîSîªîTî%]î)'î*Íî-#î0Îî3Þî7‰î<©îDeîH0ï6àî ìî 6îäîƒ îøî)îzî#î%cî){î-î2[î4¦î:žî;hîF ï5:î ìî ˜î öî§ îœîhîœî$úî&èî*šî/î2(î7î:î<Âî>…îA.ï25î ìî îEî±îqîeî!Sî&´î,!î.kî2®î6Çî;î>ž îEfï0�î ìî šîðîUîîÇî œî#6î'gî+Ãî.Õî5ƒî:±î= îA‘îD!îG€ï.êî ìî Iînî#îÉîzîÜî#kî&âî)²î,åî1î4’î6ôî;½î?ÿîB¬îH}ï-Dî òîÁîkîî>î äî$/î%Ùî)fî-î1]î5õî6Íî:î;kî>îî@UîD‚îF+ï+žî Ôï(™î ìî ÁîsîXî7î‰ î%•î'Aï%”î Xî ¿î¦î^î®îñî —î&×î(jî*>î-Õî2ýî6´î8Gî:Šî>!îAîD¶ï#îî�î` î -î#õî%™î'íî,øî1$î6Bî8^î>î?Ä îF+ï"Hî¦îÊî ¶î"!î'áî)6î-—î1iî3î5sî9$î; î?> ïCî¦îpî"·î&ªî(xî*öî0 î7&î;î<æî@¸îFîHï�î¦îîáî#Jî%î'î*Ãî0‹î7=î;î<Ùî?EîCîF+ïøî¦îÎïòî¦î¡î Xî#/î':î*«î1'î1Ÿî6pî:qîD”ïMîïGî¦î“î‘î"öî%hî'Wî(€î,2î2öî;ïBî¦îAî î"^î%eî)•î*ùî, î.ˆî3©î8Rî:î@´îB.îEÙîG€ïœî¦î`î î"éî)–î+íî.óî3"î7fî:wî<îîA×îE‚îG€ï ÷î¦î4ï ñî¦îIî î"uî%ƒî)šî+Hî-§î1Zî6Aî7­î9[î;Kî@îîCƒ ïî(Çÿÿÿ} 8`m$ xï;Ñî ìï8†î#2î>ÞîAdï6àî8î> î@�îCìîDÃï0�î Dï-Dî ìîÛî8îA{ïCî dî!<î4Óï�î3Nî5Ôïòî ìî,ó{î>ôxïGî1›ïBî ìï ñî ì ÿÿÿ} 88`m$Rxï-Dîî5 ï+žî ìï%”î ìî ï#îî¦î+•ï"HîJî9�ïòî Ãî ¬î kïMî¦î�îOïGî5«î7•î8T!ÿÿ} p `m$>ÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿEventSpecicationofwhatitis.Forexample,looksforaneventcontaining.Speciesthatthenextobject(presumablyapattern)istobematchedagainsttheofevents,insteadoftheinputs.Speciestheeventlastlocated.Speciesaneventforwhichthefunctionreturnstrue.shouldbeafunctionoftwoarguments,theinputportionoftheevent,andtheeventitself.Seepage8.25foradiscussionoftheformatofeventsonthehistorylist.Anyothereventaddresscommandspeciesaneventwhoseinputcontainsanexpressionthatmatchesasdescribedinpage17.13.Thematchingisperformedbythefunction(page8.33),whichisinitiallydenedtocallbutcanbeadvisedorredenedforspecializedapplications.Note:Symbolsusedbelowoftheformrefertoeventaddresses,describedabove.Sinceaneventaddressmaycontainmultiplewords,theeventaddressisparsedbysearchingforthewordswhichdelimitit.Forexample,in,thesymbolcorrespondstoallwordsbetweenandintheeventspecication,andtoallwordsfromtotheendoftheeventspecication.Speciesthesequenceofeventsfromtheeventwithaddressthroughtheeventwithaddress.Forexample,speciesevents47,48,and49.canbemorerecentthan.Forexample,speciesevents49,48,and47(notereversaloforder).Sameasbutdoesnotincludeevent.Sameas.Forexample,ifthecurrenteventisnumber53,thenspeciesevents49,50,51,and52.Sameas.Forexample,ifthecurrenteventisnumber53,thenspeciesevents52,51,50,and49(notereversaloforder).Sameas.Speciesalleventssatisfying.Forexample,,.emptyIfnothingisspecied,itisthesameasspecifying.Note:Inthespecialcasethatthelasteventwasan,itisthesameasspecifying.Forexample,iftheusertypes,hecanthentype,followedby.8.6F-2-2=values\SUCHTHATHISTORYMATCHEDITFINDPFROMTHRUFROMTHRUTHRUFROMTHRUTHRUFROM47THRU49FROM49THRU47FROMTOTOTHRUFROMFROMTHRU-1FROM49THRUFROM-1THRUTHRU49TOFROM-1TOALLALLLOADALLSUCHTHATFOO-1UNDO-2(NCONCFOOFIE)UNDOUSENCONC1PREDPREDPREDPATPATEventAddressiEventAddress1EventAddress2EventAddress1EventAddress2EventAddress1EventAddress2EventAddress1EventAddress2EventAddress1EventAddress2EventAddress1EventAddress2EventAddress1EventAddress2EventAddress1EventAddress2EventAddress2EventAddress1EventAddress1EventAddress2EventAddress2EventAddress2EventAddress2EventAddress1EventAddress1|ïb'î#ãî'¿ xï\:î¦î^î¸î îúî"£î,Oî/éî2$î4î7Ä î@%ïY5î¦îRî )î"‘î%¨î)È î1¯î2âî8 î9•î;Mî=GîBÝîG€ïW�î±îiî!öî&¥î(\î*¹ïTŠî¦îGî¥î#Vî%ÔïQ…î¦îbîlî#9î%�î)´î,-î5ªî:tîBîFªîH´ïOßî¦î î²î!L î(?î*Œî.#î2îî4•î6âî:ßî=ƒî?ÑîCrîGIïN9î¦îêîÔî î!8 î'´î)kî+Èî0?î1÷î6,î80î:Žî?ïK4î¦îâî¹î"¦î'Æî.]î3÷î6 î: î>rîBUîGîïIŽî¦ îXî!$î)6î*âî1î2´î5÷ïF‰î¦îzî qî!Úî(–î*�î,ëî<õî@°îDjîHsïDãî¦î�î!fî#î-~î/ìî2eî4Cî9#î:Õî@ÓîBþ ïC=î¦ ï@8î ìî éî{î¼îÎî�îóî*7î-�î/Bî2ü î9lî?šîD4îGîï>“î ìî  î‰îŽîkîãî$Hî&©î*^î/Fî0´î5î7î='î?fîAÇîEÓï<íî ìîƒîSîåîžî2�î3Vî5œîBC ï;Gî ìî ˆî eî]î†î ùî"•î$áî(‚ î0“î;8î<Ôî>±îBªï9¡î ìî ™î öî«îcîÀîr ï3Qî¦î@î—î%sî'#î+Rî.¯î1î4°î7ÁîDªï1«î¦îîÕî ýî-€î.·î1pîD~ï0î¦îøîWî ¶î#‡î.qî1î3"î6Îî; îEØîG4ï._î¦î+ î0¢î5î7�î:î<üî?îBÞîH&ï,ºî¦ï&iî¦îcî ïî#nî&œî)î-éî9(ï#dî¦î¬î0î1ÿî4òî;î<Âî?iîDxîHsï!¾î¦îÎî î(’î-ðî2&î4aî6œî8×î;Œï¹î¦î¬î0î1ÿî4òî;î<Âî?iîDxîHsïî¦îôî_î)4î.¸î3î5î7éî:Tî=/î?9îBïîH&ïmî¦ïhî¦îcî-Ûïcî¦î¿î %î$Ñ î2Ùî5Fî8gîE�ï½î!»ï¸î ìî¦î'î8î£î%œî&ñî([î*¸î.2î/ß î7þï ³î¦îî î ¾î%uî(¡î+­î.Jî1î4ùî7ãî=nî>™î@/îAÙîDvîH0ï î¦ îÝî!-î#îî)Øî+Pî-Åî0ÔîAîBîDîFºï gî¦îîìî$‹î.ìïî(Ç"ÿÿ}ð`m$ìxï\:î(oî*î*ôî>wî?NïY5î ì{ïW�î¦xïTŠî ìïQ…î ìïF‰î2^ ïDãî%{ï<íî4î&Ìï;Gî¶î*îEýï6œî ìî„ï4öîPï1«î7Pî;ƒî> îB<ï._î·î!êî$pî(£ï)´î ìî„ï(îPï&iîï#dî ìî¢î*:î.nî/Eï!¾î",î&`ï¹î ìî¢î!Öî"­î$[ïî"¨î&Ûïhî ìîî!Cî"î#Èïcî ìî>ÈîB$îFÔï½î¦î6ï¸î6Pî7'ï ³î:ï î/îî4}î:_î=»ï gî³î&…î)á!ÿÿÿ}ðÜ`m$¾xïQ…î{î1½î>*ïK4î ìî šî YïIŽî&mî'î'Úï@8î"_î#¼î$Þï?Ïî)Wï<íîgîÄî æï<ƒî%_ï<íî*ÿî,\î-~ï<ƒî1÷ï<íî:Iî;¥î<Èï<ƒîAAï;Gî37î4”î5¶ï:Þî:/ï6œîî|îžï63îï6œî·îî6ï63î!¯ï4öî ìî Hî kï4�îäï4öî„îàîï4�î|ï3Qî<Ÿî=üî?ï2çîC˜ï1«î%óî'Oî(rï1Aî,ëï0î&Cî' î(Âï/œî-;ï0î>Jî?§î@Éï/œîEBï)´îî|îžï)Kîï)´î îfîˆï)Kî ï(î ìî Hî kï'¥îäï(îÖî2îUï'¥îÎï&iî1›î2÷î4ï%ÿî8“ï#dîî|îžï"úîï#dî!Öî#2î$Uï"úî(Îï¹îî|îžïOîï¹î(Žî)ëî+ ïOî/†ïhî qî Íîðïÿîiïhî&Mî'ªî(Ìïÿî-Fïcî Hî¥îÇïùî@ïcî+Kî,¨î-Êïùî2Cÿÿ}Ìd`m$BÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿTHEPROGRAMMER'SASSISTANTEachoftheisaneventspecication.Thelistsofeventsareconcatenated.Forexample,isthesameas.Ifisthenameofacommanddenedviathecommand(page8.12),speciestheevent(s)dening.isaneventspecicationinterpretedasabove,butwithrespecttothearchivedhistorylist(seepage8.13).Ifnoeventscanbefoundthatsatisfytheeventspecication,spellingcorrectiononeachwordintheeventspecicationisperformedusingasthespellinglist.Forexample,willworkcorrectly.Iftheeventspecicationstillfailstospecifyanyeventsafterspellingcorrection,anerrorisgenerated.8.2.2CommandsAllprogrammer'sassistantcommandscanbeinputaslistforms,oraslines(seepage8.30).Forexample,typingandareequivalent.isusedtodenoteaneventspecication.Unlessspeciedotherwise,omittingisthesameasspecifying=.Forexample,andarethesame.[Prog.Asst.Command]Redoestheeventoreventsspeciedby.Forexample,redoesthelastthreeevents.[Prog.Asst.Command]Redoestheeventoreventsspeciedbytimes.Forexample,redoesthelasteventtentimes.[Prog.Asst.Command]Redoesthespeciedeventsaslongasthevalueofistrue.isevaluatedbeforeeachiterationsoifitsinitialvalueis,nothingwillhappen.[Prog.Asst.Command]Sameas.[Prog.Asst.Command]Sameas.Theevent(s)arerepeateduntilanerroroccurs,ortheusertypescontrol-Eorcontrol-D.[Prog.Asst.Command][Prog.Asst.Command]Sameas.Forallhistorycommandsthatperformmultiplerepetitions,thevariableisinitializedto0andincrementedeachiteration.Iftheeventterminatesgracefully,i.e.,isnotabortedbyanerrororcontrol-D,thenumberofiterationsisprinted.8.7ANDANDANDFROM30THRU32AND35THRU3730AND31AND32AND35AND36AND37@NAME@@LISPXFINDSPLSTREDO3THRUU6REDO5cr(REDO5)-1REDOREDO-1REDOREDOFROM-3REDOTIMESREDO10TIMESREDOWHILENILREDOUNTILREDOWHILE(NOT)REPEATREDOWHILETREPEATWHILEREPEATUNTILREDOREDOCNTEventSpec1EventSpec2EventSpecNEventSpeciLITATOMLITATOMLITATOMEventSpecEventSpecEventSpecEventSpecEventSpecEventSpecEventSpecEventSpecNEventSpecNEventSpecFORMFORMFORMEventSpecFORMEventSpecFORMEventSpecEventSpecEventSpecFORMEventSpecFORM|ïb'î·î!= î-š}ï\[îî«îGxïZµî¦îÿîŸî$íî&@î(î+± î3óî6±î9Yî:ùî?îAQ ïYî¦î+î9mî:³î<ìî@AïWjî.VïTeî¦îñî Fî"Žî&4î'Öî(éî/.î3þî6$î<6îB{îF"ïR¿î¦îîbî$Šî/OïOºî¢î<î!Zî%; î-2 î4mî6Iî:Úî=ˆî@ÐîE£îG€ïNî¦î1î!¾î#úî&Äî*ïKî ìî Xî Iîjîßîºî°îhî ~î"Çî&e î.tî3p î9Îî;¾î>ØîBIîCâîF+ïIiî ì îÉîJîî*:î+ýî.rî3™î6œî9\ïGÃî YîîŸ îùîŒîûî¿ î'˜î*Hî-Eî/î3¯î6_î:§î=ñîC ïFî ìî ÚîIî´ |ïA¹î ìîixï=Tî ìî 2 îÞî2î!î#„î%iî)î*¨î,Ùî1î2Èî4jî7—î:Wî=�îAsîDï;®î ìîñîãî!5 ï8©îÔîZî®îwîîî í î)Šî.î3Ù î:wîEúîG€ï7î ìî fî îÌîÙîàî!‰î+5î4Oî6¡î8þï3þî;î?9îB½ï2Xî¦îˆîíî"¦î$pî(­î.Vî5 î6¾î9oï0³î¦îüîZî Øî$^ï-­î;î?9îB½ï,î¦îuîÇî"lî$#î(Mî-âî6òî;î=µï*bî^î ´î#î%�î)@î+�ï']î;î?9îB½ï%·î¦îdî¥î$)î(Bî)Òî,Ìî.\î0�î4&î9Âî;îBkîC¸ï$î¦îñîî$“î&Vî'µî)Žî-vî1î5 î5çî:ùî=¢ï! î;î?9îB½ïfî¦îcî5ïaî;î?9îB½ï»î¦î?î,þî-¶î0hî5lî7šî= î@-îAùîEDïî¦îiîÆî½î"Nî&ñî([î*î.Áïî;î?9îB½ïkî;î?9îB½ïÅî¦îcî lïÀî ìî •îƒîîïî»î"î'‚ î.˜î0öî<�î=ø îDGîEôîG(ïî ì îµîÐ îÁî.îyî" î(¬ î/Eî1Çî3î5~î:rî5îA‘îC@îGãï tî ìî Iîqî( î î‹ïî(Ç!ÿ}Ì`m$ªxï\[î¡î²î €ïYîÙî$ î&’î*Åî-Jî0§î3,î7`îAÉîDOîG«ïWjî¦îîˆî äî#jî&Æî)Kî,¨ïTeî ìî8kïOºî ìïIiîÜ î?DîCwîE&ïGÃî ìï;®î,î`zï<îfîçxï;®î¦î±ï7î+îî'Uî-êî2î2ôï3þî ìï2Xî?DîCwîG«îH‚ï-­î ìîï,îCwîG«ï*bî¦ï']î ìîHï$î2†ï! î ìîHïfîî'bî,mî4:ïaî ìï»îÉî'î,'ïî ìîöïkî ìîöïÅîïÀî6( ÿÿ}Ìì`m$Äxï\[î ìî Hî kï[òî4ï\[îýîZî|ï[òîFï\[î#Üî%9î&[ï[òî)%ïZµîäî Aî!cïZLî$-ïTeî šî ƒîBîîûîºïR¿î)Ýî+Çî,…ïOºî qî Íîðî¦îî%ï8©î ìî Hî kî@îAnîB�ï7îƒîßîï3þîî|îžï2Xî0Wî1´î2Öï-­îî|îžîHï,î/Ñî1-î2Pî5’ï']îî|îžî[îï%·î5Áî6€î>jî?)ï! îî|îžî[îïfî!Cî"Ÿî#Âî0 î1_ïaîÍî*îLï»î üî"Yî#{ïîÍî*îLî îÈïkîÍî*îLî îÈ ÿÿÿ}¸ì`m$æÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿCommands[Prog.Asst.Command]Similartoexceptsets(page9.11)sothatanyerrorsthatoccurwhileexecutingwillcausebreaks.[Prog.Asst.Command]Substitutesforin,andredoestheresult.Substitutionisdoneby(page17.57),andiscarriedoutasdescribedbelow.andcanincludenon-atomicmembers.Forexample,willsubstituteforeveryoccurrenceofintheprevioustwoevents,andsubstituteforeveryoccurrenceof,andreexecutethem.Notethatthesesubstitutionsdonotchangetheinformationsavedabouttheseeventsonthehistorylist.Anyexpressiontobesubstitutedcanbeprecededbya,meaningthattheexpressionistobesubstitutedasa,e.g.,followedbywillproduce,andwillproduce.Ifisomitted,therstmemberofisusedfor.Forexample,isequivalentto.Theisinsertedtohandlecorrectlythecasewheretherstmemberofcouldbeinterpretedasaneventaddresscommand.[Prog.Asst.Command]Ifareomitted,andtheeventreferredtowasitselfacommand,theargumentsandexpressionsubstitutedintoarethesameasfortheindicatedcommand.Ineect,thiscommandisthusacontinuationofthepreviouscommand.Forexample,following,typingisequivalentto.Ifareomittedandtheeventreferredtowasacommand,substitutionisforthe``operator''inthatcommand.Forexamplefollowedbyisequivalentto.Ifisomitted,itisthesameasspecifying.[Prog.Asst.Command]Moregeneralformofcommand.Seedescriptionofthesubstitutionalgorithmbelow.Note:Thecommandisparsedbyasmallnitestateparsertodistinguishtheexpressionsandarguments.Forexample,willbeparsedcorrectly.Everycommandinvolvesthreepiecesofinformation:theexpressionstobesubstituted,theargumentstobesubstitutedfor,andaneventspecication,whichdenestheinputexpressioninwhichthesubstitutiontakesplace.Ifthecommandhasthesamenumberofexpressionsasarguments,thesubstitution8.8RETRYREDOHELPCLOCKUSEFORINESUBSTUSELOG(MINUSX)FORANTILOGXIN-2AND-1LOGANTILOG(MINUSX)X!segmentLIST(ABC)USE!(XYZ)FORBLIST(AXYZC)USE!NILFORBLIST(AC)INUSEPUTDFOR@UTDUSEPUTDFOR@UTDINF@UTDFUSEINUSEUSEUSEUSEUSEXFORYIN50USEZIN-1USEZFORYIN50notUSEARGLIST(FF)USECALLSIN-1USECALLSFORARGLISTIN-1ININ-1USEFORANDANDFORINUSEUSEUSEFORFORANDANDANDFORFORUSEUSEEventSpecEventSpecEXPRSARGSEventSpecEXPRSARGSEventSpecEXPRSARGSEventSpecARGSEventSpecARGSEXPRSEventSpecARGSARGSEventSpecEXPRS1ARGS1EXPRSNARGSNEventSpec|ïb'î&exï\:î;î?9îB½ïZ”î¦îlî!þî&Mî1î4Ãî8)î9îî<¼î?]îCRîF ïXïî¦îWî'Iî)òî-£ïUéî;î?9îB½ïTDî¦ î#hî)Àî0Þî1íî4Ëî9Kî;Ñî@˜ îHsïRžî¦îî"±î&tî*çî-¢î/î3²î6,î7Þî> îG(ïPøîpîùî"Ôî%“î* ïMóî¦îÎîG4ïLMî¦ î ÷î#=î&ù î-ïî6#î7Úî:Cî?ØîB�îG(ïJ§î¦ î&î(Jî, î2ýî5—î6î9@î?eîC’îGïIî¦î, î#î%$î'—î,:î.˜ î6î9âî=ÀîAFîE{îG€ïG\î¦î4ïDWî¦îô î!ôî#ïî&+ î-pî0Fî2‚î8³î:ûî=Hî>…îDfîG€ïB±î¦ îVî¿î!jî#W î*Lî+öî1Èî2¢î??îDÜïA î$»î'Zî9?î:ï?eî¦îOî'3ï<`î¦î!±î#8î(Åî+?î.î3¡î9[î:âî>7îEØîG4ï:ºî¦î,žî.3 î5ï9îîþî pî!ûî'Nî)î-¾î3î5ýî9 î=>î?¼îBœîH&ï7oîpî8î!' î(3î)àî+Îî/€î4eï4jî;î?9îB½ï2Äî¦î@î¹î%Tî(1î*¶î.�î3ôî5Èî8™î<î@›îG€ï1î¦îcî!, î'ó î.þî1èî4Nî6Àî:Oî<î>_î@Ñï/xî¦îî >î$<î)Çî0î1oî4cî5} î=aî? îAYï-Óî¦îî!î&Öî;î;ëï,-î¦î î¹î/¯ï)(î¦î¹îîî#äî&}î(¾î,Sî1tî3î7×î;ÑîBn ï'‚î¦îîaîÈ î$±î&hî)>î0<î2ïîB9îGãï%Üî$Äî&/ î,×îE3ï"×î¦î!yî"ãî(Mî)¢î+ î-iî0ãî2� î=4}ï î8îÔîpxïeî;î?9îB½ïÀî¦îQî î#`î'þî.×î1Y î8Sî9ùîòî@š îG€ïoî¦ îî!ù î)Àî,�ïÉî°îYîHî#© ïÄî ìî¬îêîî‡î#~î% î-î/E î6]î7ìî9¾ î@õîC5ïî ìî nî 3 îîrîýîÁîI î&Fî*&î.Ÿî0Óî4P î:Øî¡î?xîA&îDƒîEZïLMîâî/²ïJ§îãî#Åî4ÀïDWîmîAÉîEýîH‚ï9î¦îôï4jî ìîï2Äî=jï1îFÔï/xî&ÍîFÔï-Óî,Óî0/î1Þî5:î6èî9mî@îCwîE&îG«îH‚ï,-î!fî$Âî&qî)Íî+{î.{ï)(î5’xî8äï'‚î8m ï%Üî¦îî î"’î#jî.„î1àî6ëî:GîAîC…îD\ï"×î'î9î;†î<]ï î ìî²îÓî ²î)Ôî2HïÀî%ïîaïoî2ªî6î9bî<¿î@îCwîFÔïÉî¦ïÄî Áïxî#!ÿ}pX`m$2xï\:îöîSîuïXïî!|î"Ùî#ûïUéî Hî‚î:î6î“îµïTDîÆî%Ìî'„î+•î,òî.ïRžîB©ïPøî¦î^ï<`îÉî%îGî5uî7-î@�îAìîCï7oî¦î^ï4jî Hî«îî*ï2ÄîNîï)(î îÃï"×î¬î î+ï î Hï¢î<ï îîÏï¢î]ï î$ï¢î( ï î-:î.ñï¢î0€ï î4Öî63î7U ÿÿÿ}Ș`m$œÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿ11THEPROGRAMMER'SASSISTANTprocedureisstraightforward.Forexample,meanssubstituteforandfor,andisequivalentto.However,thecommandalsopermitsdistributivesubstitutions,forsubstitutingseveralexpressionsforthesameargument.Forexample,meansrstsubstituteforthensubstitutefor(inanewcopyoftheexpression),thensubstitutefor.Theeectisthesameasthreeseparatecommands.Similarly,isequivalentto,followedby,followedby.alsocorrespondstothreesubstitions,therstwithforandfor,thesecondwithfor,andfor,andthethirdwithfor,andagainfor.However,isambiguousandwillcauseanerror.Essentially,thecommandoperatesbyproceedingfromlefttorighthandlingeach``''separately.Wheneverthenumberofexpressionsexceedsthenumberofexpressionsavailable,multipleexpressionsaregenerated.Thusmeanssubstituteforatthesametimeassubstitutingfor,theninanothercopyoftheindicatedexpression,substituteforandfor.Notethatthisisalsoequivalentto.[Prog.Asst.Command]Similartoexceptsubstitutesforthe(rst).Forexample,followedbyisequivalentto.Note:Inthefollowingdiscussion,isusedtorepresentthecharacter,sincethisishowisechoed.[Prog.Asst.Command]isaspecialformofthecommandforconvenientlyspecifyingsubstitutionsinlitatomsorstrings.Inaddition,ithasanumberofusefulpropertiesinconnectionwitheventsthatinvolveerrors(seebelow).Equivalentto,whichwilldoacharactersubstitutionofthecharactersinforthecharactersin.Forexample,iftheusertypes,hecanthentypetoperform.Notethatwouldperform.[Prog.Asst.Command][Prog.Asst.Command][Prog.Asst.Command][Prog.Asst.Command]Abbreviatedformsofthecommand:thesameas,whichchangesstos.doeseventlocationthesameasthecommand,i.e.,ifisnotspecied,searchesfor.However,unlike,canonlybeusedtospecifyonesubstitutionatatime.Afterndstheevent,itlookstoseeifanerrorwasinvolvedinthatevent,andiftheindicatedcharactersubstitutioncanbeperformedintheobjectoftheerrormessage,calledtheoender.Ifso,assumesthesubstitutionrefersExceptwhenoneoftheargumentsandoneoftheexpressionsarethesame,e.g.,,or.Thissituationisnoticedwhenparsingthecommand,andhandledcorrectly.8.9USEXYFORUVXUYVUSEXFORUANDYFORVUSEUSEABCFORXAXBXCXUSEUSEABCFORDANDXYZFORWUSEAFORDANDXFORWUSEBFORDANDYFORWUSECFORDANDZFORWUSEABCFORDANDXFORYADXYBDXYCDXYUSEABCFORDANDXYFORZUSEANDUSEUSEABCDFOREFAEBFCEDFUSEACFOREANDBDFORF...USEoperandEXPRP(FOO)...FIEFUMUSEFIEFUMFORFOO$$FORIN$USEcharacterUSE$$FOR$$INMOVD(FOOFOOSAVET)$FIEFORFOOINMOVDMOVD(FIEFIESAVET)USEFIEFORFOOMOVD(FIEFOOSAVET)$IN$TOIN$=IN$->IN$$FORIN$USEIN$USE$$$USEXYFORYXUSEXFORYANDYFORXVARSXYEventSpecXYEventSpecXYYXEventSpecYXEventSpecYXEventSpecYXEventSpecXYEventSpecYXEventSpecYyï\¤î3ï Cî ì!}`m$|ïb'î·î!= î-šxï\:î ìîjî×îÓî~î2mî6¯ î>?îAÙîEíîIïZ”î ìî {î À îCî)î)Óî/åî5î;6î=ÚîB¥ ïXïî ì î/îa î½î @ î'mî)Ÿî+ôî/eî6 î8©ïWIî Cî€î< îÁîPî p î'õî+„î-¦î.Ëî1³î4ÿî6²î9 î@ŒîC¬ ïU£î ?îIîîêî”îöîLî¾îbî!áî*-î1Œ ïSýîîw î%î/,î0î5´ïRXî Ãî Äîˆî&ûî?TîBC ïP²î ìî Œî îîaîînî"ëî&áî)æî*µî-î1‡î5àî8æî9´î=«î@°îAîD'îFxïO î ìî>î@î î°î�î“î]îu îF0ïFÏî ìî ûîîéî\î(îÇî1îû î%£î>ïCÊî;î?9îB½ïB$î¦îjî! î%l î,!î.\î0¹î9ï?î¦î<î(Ðî.\î9ñî;I îAÞï=yî äï:tî ìîîâîTîu î Òî"Qî%žî'_î-lî/Ýî5Õî9ìî=pî@#îA¢îD¸îHsï8Îî ìï5Éî;î?9îB½ï4#î4îÐî+î Õî$kî&Uî, î2­î5 î=T ï2~î¦ î‚î!î&2î'Ýî,®î.eî4î5Qî7­î8¾î=Îî?nîCl ï0Øî¦îS î Hî#`î'•î*aî//î3"î5ìï-Óî¦ îî6‡î8î<–î?ÄîBMîCúï,-î¦ îî Íî#* î)‘î,™î.Õî12 î7™î:ï)(î¦î>îüî!Kî#—î&}î9óî:Áî<Ÿî?îB*ï'‚î$Óî&�î;çî=î@�ï%Üî î"6î7€ï"×î;î?9îB½ï!1î;î?9îB½ïŒî;î?9îB½ïæî;î?9îB½ï@î¦ î¡î#³î%”î)¡î0Éî3Pî6ôîIïšî¦î°î!°î"¸î%<ï•î DîpîîOîªî"îÌî$/î*àî-pî7î8…î:öîBFîG¢ïïî Ãî �î²î]îuîïî÷î!×î%î&žî+'î-Á î5!î6©î7Ãî;cî@;îC…îEÔïJî ìî Sîÿî¾î"î”î”îîÑî"wî$6î'î+4î-ûî/mî1Üî7Üî=Ò îESîGîï¤î ìî¦îNî¨î¹îmîÆî 1î%Øî)Èî,"î2î3”î7î  îF ï Ùî €îîÇîtî/î�î <î"ôî%¡î'\î)½ î0÷î3Lî5­î9„îIï Vî ìî#î !î#Zî)î*žî/›î3oî8`î:àîA½îD”ï Ôî ì ïî(Çÿÿ}Ð`m$Šxï\:î%Lî(©î*Wî,î/aî1î<âî@|îD�îH*ïZ”îËî'îÕî1îàî#<î$êî(Gî2ïXïî>mîAÉîCwîE&îFÔïWIî ìîjîùî&�î*-ïU£î ìî rî',î7´î;î<¿î>mî@îCwîE&îH‚ïSýî ìî šî Hî¤îÙî5î ãî$@î%îî)Jî*øî.Uî7´î;î<¿î@îAÉîE&îFÔïRXî ìî¨îî²îî½î!î"Çî&$î'ûî+Xî-î.´î0bî3¿î5mî8Éî:wî=ÔïP²î î!�î%“î)î4’î8î<]î?ÙïO î óîiîFî»î#î&Üî(Šî*8î+æî/Cî0ñî4Mî5ûî7ªî;ïMfîŒïKÁî ›ïJî]î&"î)î+-î,Ûî.‰î08î3”î5BîAîD”ïHuîöîºîD½îH‚ïFÏî  î7î'Pî*¬î,[î. î1eî3î6pî8î9Ìî=)ïCÊî ìïB$î{î4kxï?îø î0Cî3Ÿî6ûîCwîFÔï=yî¦îî_ï:tîbï5Éî ìî Rîoï4#î¦î(ä{îC÷xï-Óî!Fî$¢î&Qî'ÿî+\î- î.¹ï)(î)ýî1Œî8EîE&îFÔï'‚î¦îî_î äî+ñî3€î:9îCwîFÔï%Üî¦îî'‰î/î5Òï"×î ìî ï!1î ìî Rî˜ïŒî ìî RîÁïæî ìî Rî)î˜ï@î(î8Ëî<(îA3ï•î ìî!'î.Íî@íïïîØî*î>ïï¤î5«ï Ùîî2›î3½ï,-î+>î9Eï"×î šî Rî˜îôîï!1î šîàî&î‚î¥ïŒî šî îOî«îÎïæî šîàî&î‚î¥ï@î:yî?„îC¹îEîF8ïšî Øî$eï•î1Rî2¯î3Ñïïî ìî ìï4þ=$ ÿÿÿ} Œ``m$€ÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿCommandstotheoender,performstheindicatedcharactersubstitutionintheoenderonly,andthensubstitutestheresultfortheoriginaloenderthroughouttheevent.Forexample,supposetheusertypescausingaerrormessage.Theusercannowtype,whichwillchangeto,butchangeor.Ifanerrordidoccurinthespeciedevent,theusercanalsoomitspecifyingtheobjectofthesubstitution,,inwhichcasetheoenderitselfisused.Thus,theusercouldhavecorrectedtheaboveexamplebysimplytyping.Sinceisusedforperformingthesubstitution(seepage17.57),canbeusedintorefertothecharactersin.Forexample,iftheusertypes,causingtheerror,hecanrequesttheletobeloadedfrom'sdirectorybysimplytyping.Thisisequivalenttoperformingontheevent,andthereforereplacesby.Notethatneverforanerror.Thus,iftheusertypescausingaerror,types,andtypes,willcomplainthatthereisnoerrorin.Inthiscase,theuserwouldhavetotype,or(whichwouldcauseasearchfor).Notealsothatoperateson,notonprograms.Iftheusertypes,andwithinthecalltogetsaerror,herepairthisby.willtype.[Prog.Asst.Command]Envokesthedefaultprogrameditor(Deditortheteletypeeditor)onacopyoftheinput(s)for.Whenevertheuserexitsvia,theresultisunreadandreexecutedexactlyaswith.isprovidedforthosecaseswhenthemodicationstotheinput(s)arenotsimplesubstitutionsofthetypethatcanbespeciedby.Forexample,ifthedefaulteditoristheteletypeeditor,then:Theusercanalsospecifytheeditcommand(s)to,bytypingfollowedbythecommand(s)aftertheeventspecication,e.g.,.Inthiscase,theeditorwillnottype,orwaitforanafterexecutingthecommands.Note:callstheeditoronthe``inputsequence''ofanevent,adjustingtheeditorsoitisinitiallyeditingtheexpressiontyped.However,theentireinputsequenceisbeingedited,soitispossibletogiveeditorcommandsthatexaminethisstructurefurther.Formoreinformationontheformatofanevent'sinput,seepage8.25.8.10(PRETTYDEFFOOFNS'FOOFOOOVARS)U.B.A.FOOOVARS$OOOFOOOVARSFOOVARSnotFOOFNSFOO$FOOVARSESUBST$LOAD(PRSTRUCPROP)FILENOTFOUNDPRSTRUCLISP$$(RPRSTRUC$)PRSTRUCPRSTRUC$searchesLOAD(PRSTRUCPROP)FILENOTFOUNDCLOSEALL()then$$LISPXCLOSEALL()$$INLOAD$PRSPRSPRS$inputFOO()FOOU.D.F.CONDDcannot$CONDLISPXCONDDNOTFOUNDINFOO()FIXOKREDOFIXUSE_(DEFINEQFOO(LAMBDA(X)(FIXSPELLSPELLINGS2X70]INCORRECTDEFININGFORMFOO_FIXEDIT*P(DEFINEQFOO(LAMBDA&&))*(LI2)*P(DEFINEQ(FOO&))*OK(FOO)_LISPX-FIX-(LI2)EDITOKFIXYXYEventSpecEventSpec|ïb'î&exï\:î ìî „î Ìî‡îIî’î!kî'9 î.”î0,î2tî7Óî;1î=Ñî@à îG€ïZ”î ìî ±îêîEîHî¹ î#Ùî&5î*hî-î2Ùî8î:oî=dïXïî4î!9î/¿î3Mî9�î(î?ÌîB ïRžî Ãî °î nî‰î…îóîxîâî!^î%Mî)4î+£î.ªî2ƒî5×î;áî>OîB^îGãïPøî ìîMîîäî$î%pî(žî*Ï î1ðî4C î;¨î>hîA¡îGTïORî ìî üîWî¢îpîàî®î- î"µî%[î&Xî)"î/î0˜î3î6/îIïM­î ìîîÂî'öî)î+Tî.'î3Aî5èî8ƒî:zî<²îAsîH}ïLî ìîÀîÂî5î"î#-î&Lî'¾ î.nî0# îGÙïJaî ìî IîRîîêî$Œî1sïG\î ìî Wîmîmî î†î"uî&Aî'˜î)íî,Ûî?ÿîDÜïE¶îîÙî!Úî"Àî(Žî3·î9^î<îBîDäîHsïDî ìî ùîqî�î¯î…î-î"|î$âî'âî,î/aî1îBvîCZïBkîÿîƒî­î_îˆî#¾î(~ï?eî ìî Uîî&î…î{îNî!¶î#°î*=î+³î.î0òî8¬î9€î<*î@`îB³îE1ï=Àî ìî ÎîÀî¥î#-î'Cî)úî1î6Ùî9šï<î¤ï9î;î?9îB½ï7oî¦îîpî$ î)�î-ƒî1Òî3‹î5àî;î?nîAjîBŠîEÑîG€ï5Éî¦îâî$…î%éî,™î/î2*î5wî9î:zî<öî@ÜîBfîG(ï4#î¦ î†î#î$Ëî+@ï1î ïîTîîPîæîOî ûî#R î+·î-_î/¶î4Íî7î9†î=á îEÎîG€ï/xî ìî ùîÄîMî<îÝî\î7î!àî'«î) î+hî0 î4 î5uî7Òî<úîAPï©î ìî Áî·î@î î¡îþî¾ î&Žî,oî-Jî/Dî4Þî:~îÔ îF¤ïî ìî Oî î-î%)î&Bî(î*»î.î0jî4nî7î9–î@î@èîB°îE­îGîï^î îWî{îÙïXî ìîTî†î î.îYîÜî$Y î+î,ðî/î3>î9Fî;Êî?îîA×îCRîDâï ³î ìîƒîß î�îåî"î$oî(Vî+üî1Ýî3Fî7 î;Žî=Oî>¢î@ îEGîFòï î ìî óîÚî®î*îÑî%‘î*Òî-ƒî1 î8§î:´î=îA™îCYîEPï gî ìî ëî=î€ïî(o!ÿÿ}Ð`m$XxïZ”î@ò ïXïî ìîÍîî"�î(cîH‚ïWIî ìî qîzî"d{î+ xî2¥î9õïPøîƒî2î‹îFïORî9â îDÎïM­îzî®î î"îE!ïLî~î,î7Vî9Ûî@”ïJaî'î&† ïG\î{î+xî0d î;PîEýïE¶î ìî Hîs {î%~xî,'î-Öî4žïDî& î4-î5Ûî<”î?îE&îFÔïBkî ìî%ùï?eîÕ{îxî4yîFÔï=Àîîñ{î¬xî, î-ºî2 î<¿îAÉîE&ï<î ìî qï9î ìï5Éî7Ñï4#î'ãï1î ìï/xî×ï,sî ìîSî¯îhîÄî(+ î1iî3ï*Îî ìîSîâï)(î ìï'‚î ìï%Üî ìï$7î ìï"‘î ìî{îØî‘î?ï ëî ìîïEî ìïŸî ìî{î¯ïúî ìïTî ìï®î ìï©î(;î3„ïîîpî î#zî<ªï^î ìïXî$ÿÿ}Ð`m$(xïRžî ìïORî%î$ƒï9î Hî¥îÇï5Éî<î ™î!»"ÿÿ}Ð`m$&ÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿTHEPROGRAMMER'SASSISTANT[Prog.Asst.Command]Printsthespeciedeventsfromthehistorylist.Ifisomitted,printstheentirehistorylist,beginningwithmostrecentevents.Otherwiseprintsonlythoseeventsspeciedin(intheorderspecied).Forexample,,,etc.Foreacheventspecied,printstheeventnumber,theprompt,theinputline(s),andthevalue(s).Iftheeventinputwasap.a.commandthat``unread''someotherinputlines,thep.a.commandisprintedwithoutaprecedingprompt,toshowthattheyarenotstoredastheinput,andtheinputlinesareprintedwithprompts.Eventsareinitiallystoredonthehistorylistwiththeirvalueeldequaltothecharacter``bell''(control-G).Thefore,ifanoperationfailstocompleteforanyreason,e.g.,causesanerror,isaborted,etc.,willprintabellasits``value''.commandsarenotenteredonthehistorylist,andsodonotaectrelativeeventnumbers.Inotherwords,aneventspecicationoftypedfollowingacommandwillrefertotheeventimmediatelyprecedingthecommand.isimplementedviathefunction,page8.35,whichcanalsobecalleddirectlybytheuser.Printingisperformedviathefunction(page6.17),sothatifthevalueof=,eventswillbeprettyprinted.[Prog.Asst.Command]Undoesthesideeectsofthespeciedevents.Foreacheventundone,printsamessage:,etc.Ifnothingisundonebecausenothingwassaved,types.Ifnothingwasundonebecausetheevent(s)werealreadyundone,types.Ifisnotgiven,searchesbackforthelasteventthatcontainedsideeects,wasnotundone,anditselfwasnotancommand.Notethattheusercanundocommandsthemselvesbyspecifyingthecorrespondingeventaddress,e.g.,or.Inordertorestoreallpointerscorrectly,theusershouldeventsinthereverseorderfromwhichtheywereexecuted.Forexample,toundoallthesideeectsofthelastveevents,perform,.Undoingoutofordermayhaveunforseeneectsiftheoperationsare.Forexample,iftheuserperformed,followedby,andthenundoesthe,hewillalsohaveundonethe.Ifhethenundoesthe,hewillcausethetoreappear,byvirtueofrestoringtoitsstatebeforetheexecutionof.Formoredetails,seepage8.23.[Prog.Asst.Command]EachisapatternthatismatchedtoamessageprintedbyDWIMintheevent(s)speciedby.ThesideeectsofthecorrespondingDWIMcorrections,andonlythosesideeects,areundone.Forexample,ifDWIMprintedthemessage,thenorwouldundothecorrection.SomeportionsofthemessagesprintedbyDWIMarestrings,e.g.,themessageisprintedbyprintingandthen.Therefore,if8.11????????-1??10THRU15??????-1??????PRINTHISTORYSHOWPRIN2SYSPRETTYFLGTUNDOUNDORPLACAUNDONEREDOUNDONEUNDONOTHINGSAVEDUNDOALREADYUNDONEUNDOUNDOUNDOUNDO-7UNDOUNDOUNDOUNDOTHRU-5notUNDOFROM-5dependent(NCONC1FOOFIE)(NCONC1FOOFUM)(NCONC1FOOFIE)(NCONC1FOOFUM)(NCONC1FOOFUM)FIEFOO(NCONC1FOOFUM)UNDO:PRINTT[INFOO]->PRINTUNDO:PRINTTUNDO:PRINTFOOUNSAVEDFOO"UNSAVED"EventSpecEventSpecEventSpecEventSpecEventSpecEventSpecX1XNXiEventSpec|ïb'î·î!= î-šxï\:î;î?9îB½ïZ”î¦î¢î î#³î'ñî+^î-Äî2Zî54î<“î>îEôïXïî¦îòîÉî"Dî$Êî+î.$î1lî5zî:-îBïîFÆïWIî¦îUî�î%Pî,îî/'î1–î5Z îëîIïU£î"’î#nïRžî¦î4îGî Ýî)î,âî/$î2ºî8$î:fî?�îAÏîE[ïPøî¦îNîŸî":î#­î%þî)£î-=î/Úî0öî3»î: î<È îB¾îFAïORî¦îDîËî!î#äî*5î+–î0\î5Yî6wî<¾îAóîC–îGïM­î¦î³îîwî#—î%Cî' î+Ÿî.Tî0±î4Yî7�î9âî>²îAÉïJ§î¦îGîÂî#æî(0î*^î,åî1œî4î7Cî:±î>�îAÂîE©îG€ïIî¦î³î!ñî' î(¯î*4î/òî1{î3”î9áî<öî>ÍîDÚîG?ïG\î¦îTî2î#hî%Vî)î*‡î/æî5$î7Íî;2î—îA-îEïB±î¦îXî!‡î#Tî&ðî+Qî-@î0ñ î8¸î<¢î@uîF‚ïA î¦îî ªî#øî%¥î(î+³ î3„î9Ôî>�ï>îÿîZ î#•î%Àî(î7‰î8Uî;‰î>¿îBºîE3îGîï<`î¦îqî 9î" î$?î'«î,Ëî. î4¢î6´î8éîF!ï:ºî¦îaî#îïî!Nî#¬î'Rî3î5Uî61î:fî=î>ý ï7µî;î?9îB½ï6î¦îåîqî"uî&Ùî(¾î+Jî1î6\î93î<�î@pï4jî¦î½îî.&î9î<\î> îCIîDáï2Äî¦î¾î!Ëî$oî,fî:Þî;µî=0îB=îDáï1î¦îÃî î$Gî'•î,dî5˜îDìï.î¦îíî Tî"Ãî*§î0î3Bî5zî7Ôî:Oî=ýî@ÅîGï,sî¦îmîDî!åî'qî*Tî-Ûî0²î3Sî9}î@åîD†îG€ï*Îî¦îŸî*î$ î+� î2lî4h î:Ûî=; îF+ï)(î¦îäî&(î/zï&#î ìî Íî“îTîêîíîI î#[î%Ìî(×î1Xî5¡î7bî9Ôî>•îB[îEÓï$}î ìî %î î_î4î 8î"î%Îî'éî*rî-tî1Öî3ºî6Dî8îî;¹î@~ï"×îÍîŒî$î%î'¹î) î-‚î0³î4'î:²î?î@¨îC5 ï!1î ìîîmî-îîŽî î#î7Yî8Rî> ïŒî Hî)îâî îÆî(™î)zî+mî.î0èî40î9/îIïæî ìî €î ‚î¹î…î%hî&\î(^î+î.àî4mî6-îVîB]îD(ï@î õî¢îzî¨îóîQî €î/©î0°î3Yî6èî;Œî=ÝîA }ï;îLîèî…xî;î?9îB½ï•î¦î¦îîî#Æî&ƒî'Þî-Zî.øî0î5Tî:î<î@ÊîBhîD¶ïïî¦îbî$¿î&î)î+øî0Hî2î4’ î=œîB� ïJî¦î[îrî!î#ãî(qî*ÃïDî¦î–î »î"aî'‚î,™î/>îIïŸî¦î&9î2•î6¿î:Pî<­ ï ™î¦î î!%î#î%ˆî+…î0}î2žî7Ÿî:î>öîBîD‹ï ôî!uî"íî'Êî)Ñî22î4ôî@ŒîA» îH}ïî(o}¨`m$ xï\:î ìïZ”îC{ïXïî@—ïWIîDÎîGSîH*ïU£î¦î,î±î äïRžî&ÀïG\î2ÆïDWî¦ïB±î:pî;GîG«ïA î<1ï>î¦î-t ï<`î>5ï:ºî) î4~ï7µî ìï6îEýï4jî#:î)î//î3cï2Äî(‹î/òî6«ï1î1¸î9)î?áï.î&Êï,sî5oï*Îî ½ï)(îÂî#öî$Íî'êî,ï&#î-cï$}îEýï"×î ìîîö{îåxîwîªîÞîµ{ï!1î Uxî)çî0 î3üî@îFÔïŒî ìî(î!áî%=î;�îBIîE¦ïæîöî¯î" î1Pï@î ìî"7î(ðî,Lï;î ìîHïDî4×î:¹î>îBHîC îDÎïŸîÉîýî «î'üî,/î-Ýï ôî¦îî/î8%î9Ó ÿÿÿ}¨``m$úxï\:î Hî¥îÇïZ”î6¾î8î9=ïWIî'î(lî)Žï7µîî|îžï.î$î€î£ï;îî|îžîÿïÑî×ï;îÆïÑîžï•îï,îßïïîwî Óî!ö"ÿÿ} H`m$VÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿCommandstheusertypes,theDWIMcorrectionwillnotbefound.Heshouldinsteadtypeor(,seeRcommandineditor,page17.35).[Prog.Asst.Command]Savestheevent(s)(includingsideeects)speciedbyonthepropertylistof(undertheproperty).Forexample,.commandsareundoable.Eventssavedonalitatomcanberetrievedwiththeeventspecication.Forexample,,,etc.Commandsdenedbycanalsobetypedindirectlyasthoughtheywerebuilt-incommands,e.g.,isequivalentto.However,ifisthenameofavariable,itwouldbeevaluated,i.e.,wouldreturnthevalueof.Commandsdenedbycanalsobedenedtotakearguments:[Prog.Asst.Command][Prog.Asst.Command]Theargumentsareinterpretedthesameastheargumentsforacommand.Whenisinvoked,theargumentvaluesaresubstitutedforusingthesamesubstitutionalgorithmasfor.isequivalentto.Ineithercase,ifisinvokedarguments,anerrorisgenerated.Forexample,followingtheevent,theusertypes.Thentypingwouldcausetobeexecuted,i.e.,wouldbeequivalenttotyping.Typingwouldcausetwo'stobeexecuted.Notethat'sand'scanalsobeemployedthesameaswith.Forexample,iffollowingtheuserperformed,thenwouldperformtheindicatedtwooperationswithreplacedby.[Prog.Asst.Command]Retrievesandreentersonthehistorylisttheeventsnamedby.Causesanerrorifwasnotnamedbyacommand.Forexample,iftheuserperforms,andatsometimelatertypes,6eventswillberecordedonthehistorylist(whetherornotthecorrespondingeventshavebeenforgottenyet).Notethatdoesreexecutetheevents,itsimplyretrievesthem.Theusercanthen,,,etc.anyoralloftheseevents.Notethattheusercancombinetheeectsofaandasubsequenthistorycommandinasingleoperation,e.g.,isequivalentto,followedbyanappropriate.Actually,isbetterthanfollowedbysinceinthelattercase,thecorrespondingeventswouldbeenteredonthehistorylist,oncefortheandonceforthe.Notethatandarepermitted.8.12UNDO:UNSAVEDUNDO:FOOUNDO:$UNSAVED$UNSAVEDNAMEHISTORYNAMEFOO10THRU15NAME@??@FOOREDO@FOONAMEFOOcrREDO@FOOFOOFOOcrFOONAMENAME():NAME:USEUSENAMEFOONAMEFOO:FOOwith(PUTD'FOO(COPY(GETPROP'FIE'EXPR)))NAMEMOVEFOOFIE:PUTDMOVETEST1TEST2(PUTD'TEST1(COPY(GETPROP'TEST2'EXPR)))USETEST1TEST2FORFOOFIEINMOVEMOVEABCDPUTD!$USE_PREPINDEX(14LISP.XGP)_FIXFILE(14LISP.XGPIDX)NAMEFOO$14$:-2AND-1FOO$15$1415RETRIEVENAMENAMEFOO10THRU15RETRIEVEFOOnewRETRIEVEnotREDOUNDOFIXRETRIEVEREDOFOORETRIEVEFOOREDOREDOFOORETRIEVEREDOtwiceRETRIEVEREDOUNDOFOO??FOOLITATOMEventSpecEventSpecLITATOMLITATOMLITATOMARG1ARGNEventSpecLITATOMARG1ARGNEventSpecARGiLITATOMARG1ARGNEventSpecEventSpecLITATOMLITATOMLITATOM|ïb'î&exï\:î¦îî(î,“î-†î/ûî4ë î;tî>4î@½îBÃîG•ïZ”î¦îî Äî,³îŒîC^îF�ïG¢î¦îßî‹î#Áî*Þî,H î2ïî=î=ÝîD îHsïEüî¦îîÕî—î Ëî&bî'Âî+÷î-ð î4zî;dî?™îCÏîF7ïDWî¦îãïAQî ìî-îîíîvî!@î#/î(î)Âî,¹ }ï>Lî^îúî–xî;î?9îB½}ï<¦î‡î#î¿xî;î?9îB½ï;î¦îYî$3î&a î-Jî/…î2Üî4fî6¡î=&î?>îC+ï9[î¦î!Šî"áî(fî*¯î0Àî4×î7 î=ø}îCÆîDbîDþxï7µî¦îMîªî!$ î(“î.Íî0yî5:ï4°î%!î&© î-oî=Áî?"îAîEîH}ï3 î¯îî$O î+Oî->î0­î2 ï0î ìî ®îšîÁî8î?Èî@ÄîC<îFLï._îîbî#nî6†î;!ï,ºî#�î%(î'î-î/‚î3—î5r î<î=�ï+îíîüî/·î4î7üî>6î?ÊîA«îCÏï)nî ìî _îîaîíîLîÕîŸîŽî$Þî';î*µî,aî1ÿî2Úî5‚î;Nî<®ï!¾î ìî 4îî*¿î+Šî5¿î9Õî?îAZîG3ï î ì î“îÞî^îïî;î?9îB½ïmî¦îÂî �î%Üî'ùî*pî/î1kî3áî80î<ËîDQîEEïÇî¦î•îî$Yî'î)uî-÷î/ñî4úïÂî ìî «î“î î}î‹î/oî0gî32î4àî8†î;Àî>ùïî qî <îî6îÏî­îSî!Gî#”î(î*;î/íî1Ÿî4î6N î?+îCPîFƒïwî ìîîîrîûî!.î&èî-î/‰î42î5œî:î?²îCûîFæïÑî ìî ‚îîUîÃî­îŠî!6î#î%î&Æî*Yî/;î2»î5•î7ÿî;î=šîC<îE§ï+î ìî ¬î"îàî î<î#Òî*6î+ëî-î1 î7“îAÂîC5 ï…î ìîÌîÆî„îœî © î+}î,vî9Ãî;Lî?_ï àî ìî’îyîðî£îî Ÿî#ëî&O î/Dî3€î7±î9§î>žî@©îC îG¡ï :î Ùî °îíî"î¯î]î"šî$Ïî*‚î+Wî.Ãî8¿î@õîC@ ïî(o!}À`m$\xï\:î Ðî%î&²ïZ”î#Ìî(î)®î.qî2¤î4Sî?ýïUéî ìïRžî+çî;èî@îCwîEýïPøî¦î\ïMóîAâïLMî î" î$Nî'¯î+ãî-‘ïIHî&2ïG¢î&ŸzïH î)Sî)ÔxïG¢î4œî8Ïî:}îEjïEüî7zïFfî9Îî:OxïDWî^ïAQî ï>Lî ìîqîaî!ï<¦î ìîjï;î@Dï7µî2µï4°î¦îÚî/:î3nî6Êï3 î¦{î!Vxï0îî$î(Bî-Lî4Üî9ï._î ìîîSî¯î îºî( î,Sî1^î?DîDOï,ºî ìîöî†îhîAÉîE&ï+î ìîöîSî¯î î‘î$éî)î*Ëî,yî.(î:Úï)nî+îî/yï&iî ìï$Ãî ìï!¾î¾îñîNî!�î#/î$î%µî)î)èî.˜î1ôï î¬îXïî ìïÇî1ïÂîxî#«î'î)�î-ÀîB ïî ì{î_xïwîÜ{î$qxïÑî³îøî>ï+î Ýî:|î>°ï…î ·îGî( î2hî6œîB ï àî’{ï :î ìxîxî'&î1‰î5¼î;mî=òÿÿÿ}À`m$dxïUéîî îÈîqîÎîðïTDî8î9xî:›ïRžîfîOîïMóîC�îEyîF8ï>Lîî îÈîHîï=ãîéï>LîØî�ï=ãîxï>Lî"Æî$"î%Eï<¦îî îÈîqî)ï<=îï<¦îî¹ï<=î¡ï<¦î!!î"}î# ï;î Þî"–ï:—î#~ï9[î§î‘îPî@ îAØï8òîBÀï9[îEÑîGˆï8òîHqï4°î6î “î!µî8xî9Õî:÷ïî{îeî$ïmî>ßî@ÈîA‡ïÇîcî Mî! "ÿÿ}Ü”`m$¶ÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿTHEPROGRAMMER'SASSISTANT[Prog.Asst.Command]Undoestheeectsoftheeventsnamedby.[Prog.Asst.Command]Undoesa.andprovideaconvenientwayofippingbackandforthbetweentwostates,namelythestateaspeciedeventoreventswereexecuted,andthatstateexecution.Forexample,iftheuserhasacomplexdatastructurewhichhewantstobeabletointerrogatebeforeandaftercertainmodications,hecanexecutethemodications,namethecorrespondingeventswiththecommand,andthencanturnthesemodicationsoandonviaorcommands.Bothandareno-opsifthewasalreadyinthecorrespondingstate;bothgenerateerrorsifwasnotnamedbyacommand.Thealternativetoandforrepeatedswitchingbackandforthinvolvestyping,ofthe,ofthatetc.Ateachstage,theuserwouldhavetolocatethecorrecteventtoundo,andfurthermorewouldruntheriskofthateventbeing``forgotten''ifhedidnotswitchatleastoncepertime-slice.Note:Since,,,,andarerecordedasinputstheycanbereferencedby,,etc.inthenormalway.However,theusermustagainrememberthatthecontextinwhichthecommandisreexecutedisdierentthantheoriginalcontext.Forexample,iftheusertypes,thentypes,theinputthatwillberereadwillbeaswasintended,butbothand,willrefertothemostrecenteventcontainingthoseatoms,namelytheeventconsistingof.[Prog.Asst.Command]Recordstheeventsspeciedbyonapermanenthistorylist.Thishistorylistcanbereferencedbyprecedingastandardeventspecicationwith.Forexample,printsthearchivedhistorylist,willrecoverthecorrespondingeventfromthearchivedhistorylistandredoit,etc.Theusercanalsoprovideforautomaticarchivingofselectedeventsbyappropriatelydening,orbyputtingtheproperty,value,ontheevent.Eventsthatarereferencedbyhistorycommandsareautomaticallymarkedforarchivinginthisfashion(Seepage8.19).[Prog.Asst.Command]Permanentlyerasestherecordofthesideeectsfortheeventsspeciedby.Ifisomitted,forgetssideeectsforentirehistorylist.isprovidedforuserswithspaceproblems.Forexample,iftheuserhasjustperformeds,s,s,,s,etc.toreleasestorage,theoldpointerswouldnotbegarbagecollecteduntilthecorrespondingeventsagesucientlytodropotheendofthehistorylistandbeforgotten.canbeusedtoforceimmediateforgetting(oftheside-eectsonly).isnotundoable(obviously).[Prog.Asst.Command]Instructsthelepackageto``remember''theeventsspeciedby.Theseeventswillbemarkedaschangedobjectsoflepackagetype,which8.13BEFOREAFTERBEFOREBEFOREAFTERbeforeafterNAMEBEFOREAFTERBEFOREAFTERNAMEBEFOREAFTERUNDOUNDOUNDOUNDOUNDONAMERETRIEVEBEFOREAFTERREDOUSENAMEFOODEFINEQTHRUCOMPILE...FIENAMEFIEDEFINEQTHRUCOMPILEDEFINEQCOMPILENAMEFOODEFINEQTHRUCOMPILEARCHIVE@@??@@REDO@@-1ARCHIVEFN*ARCHIVE*TFORGETFORGETSETRPLACARPLACDPUTDREMPROPFORGETFORGETREMEMBEREXPRESSIONSLITATOMLITATOMLITATOMLITATOMLITATOMLITATOMEventSpecEventSpecEventSpecEventSpecEventSpecEventSpecEventSpec|ïb'î·î!= î-šxï\:î;î?9îB½ïZ”î¦î·îî#Jî%î'_î+”î0î7ƒïW�î;î?9îB½ïUéî¦î·î)4ïRäîšîEîjî³ î$Çî'¼î)“î.Äî2'î4üî8‹î>î@ÝîEïQ>î ìî Kî‡î²îUîîÍî$î'Tî-fî0î2êî9L î@îB¯îH}ïO™î ìî Xî^îßîî¥î¶î!}î%–î'”î+�î-<î/:î2@î3ü î:õî?OîBîEZïMóî ì î¤î‡îîçî8 î&ðî* î,ð î5Òî9ûî=îC*ïLMî ìî ¨îÓîcîmîú î!mî#Žî&Kî(Wî00î6¸î>1îG(ïJ§îŒîÇîÀî2î{î¡î!3î%ìî'�î)È î2 î67î9Zî>ÂîBžïIî ìî •îîŠî„îŽïEüî ìî ­ îKî^î!¡î#Èî)Jî/Dî2sî5î8oî=­îE5ïDWî ìî ¯îuîHî îãî¼îÁî"ûî&Ñî);î,=î0sî3Ãî5|î9{î;äî@~îD;îEôïB±î ìî œ îGîmîüîTîøî!«î$rî(î+á î3)î4„î6nî8Üî;Jî?{îAîD+îGjïA î ìî ï>î ìî ÎîÈîëî lî&>î'î.Iî0†î6(î7Àî;×î>ÐîADîC ï<`î ìîcîæîãîýîËîJî $î#áî*:î,¹î/Òî3Xî7 î=Óî@ÀîC?îH0ï:ºî ìî îyîèîe îXî Öî&sî)ªî,î13î6¿î9{î?_î@ÒîCBîFLï9î"Iî#î&$î/„î0Nî2™î6.î8èî;~î=[îA‰îD ï7oîµî }î#Aî)rî, î5áî>“î?ŠîBNîE¸îG€ï5Éî ìî ^î–î` î,îàî$Uî)<î+²î/| î5äï4#îÍï1î;î?9îB½ï/xî¦îøîTî#‡î)'î0êî2ìî4î:ñî?|îB:îEPï-Óî¦îî­î½ î%œî'·î.(î/rî5)î8û î@ãîEÊîG4ï,-î¦î"•î&®î);î.öî3³î?�îBvîG€ï*‡î¦ î •î$Fî'ªî*î/’î4î6Zî9î<<î=éï'‚î¦îSî î€î"!î&þî)î/9î5î6–î;•î?¡îAr ï%Üî¦î$´î%ºî'§î)Ëî.»î1Bî>’î?£îDKîEQîG€ï$7î¦îî ƒî#[î%¹ î,ƒî.‰î3"î: î¤î?áîBîDîîG>ï•î¦î!î'•î.$î3î9Þî;bî>oî@9îD×ïïî¦îúîWî!•î%¶î(î*î/î4Ãî7ýî:P îC4îG`ïJî¦ î˜î Wî#¸î%åî(Uî+î,æî/Uî3õî6Cî9 î; îGTï¤î¦î·îîàî"|î)\ î/Âî2î4”î7^î;¶îEÞîGjïþî¦îª ï ùî;î?9îB½ï Sî¦îHî²î"î'Xî) î1î3wî7¹î=fîD´îEßï ­î¦î·î;î î$Üî&dî+©î0î1°î3Ýî8õîEîEÓïî(o"ÿÿ}¬`m$xï\:î ìïW�î ìïUéîàïRäî ìîn{ïQ>î{î6xïMóî?WïLMî*šî1ùîA’ïJ§î ìïIî­ïEüîäîþîAÙîEýïDWîî\ï>îkî�î³î!3î)¦ï<`î îaï9î ìîî{î4îhî)£î,ÿîEýï7oî ìî Hîî4î/aî8±ï5Éî7´î;èî?DîEýï4#î ìï1î ìï-ÓîDï,-î®î 3î6‚î:¶î=;î>ï%Üî$î7îCtïŒî ìï;î¦ï•î�î"Šî)î/¨î3ýïJîA³ï¤î@.ï ùî ìï ­î;Þ !}¬P`m$¾xï\:îÍî·îvïZ”î2î3úî4¹ïW�îöîàîŸïUéî#Âî%«î&jïJ§îÂî«îjîCçîEÑîF�ï1î¤îî#ï/xî+î,{î-žïŒîÍî*îLïæîC¹îEîF8ï@î'îƒî¦ï ùî{îØîúï Sî?kî@ÈîAê"ÿÿ} ül`m$nÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿCommandscanbewrittenoutviathelepackagecommand.Forexample,aftertheusertypes:Iftheusercalls,,or,thecommandwillbeconstructedbythelepackageandaddedtothelecomsindicatedbytheuser,unlesstheuserhasalreadyexplicitlyaddedthecorrespondingexpressiontosomecommandhimself.Notethat``remembering''aneventlikewillresultinacommand,becausethiswillsavethecurrent(atthetimeofthe)valuefortheproperty,whichmayormaynotbe.Thus,evenifthereisacommandwhichsavesthepropertyforinsome,rememberingthiseventwillstillrequireacommandtoappear.[Prog.Asst.Command]``PrintPropertyList.''Printsoutthepropertylistofinaniceformat,withresetto.Forexample,isimplementedviathefunction.[Prog.Asst.Command]``PrintBindings.''Printsthevalueofwithresetto.Ifisnotbound,doesnotattemptspellingcorrectionorgenerateanerror.isimplementedviathefunction.isalsoabreakcommand(page9.5).Asabreakcommand,itascendsthestackand,foreachframeinwhichisbound,printstheframenameandvalueof.Iftypedintotheprogrammer'sassistantwhennotatthetoplevel,e.g.intheeditor,alower,etc.,willalsoascendthestackasitdoeswithabreak.However,asaprogrammer'sassistantcommand,itisprimarilyusedtoexaminethetoplevelvalueofavariablethatmayormaynotbebound,ortoexamineavariablewhosevalueisalargelist.[Prog.Asst.Command]Allowstheusertotypealineoftextwithouthavingtheprogrammer'sassistantprocessit.Usefulwhenlinkedtootherusers,ortoannotateadribblele(page6.12).[Prog.Asst.Command]Allowstheusertoevaluateanexpressionwithouthavingtheprogrammer'sassistant8.14P_MOVD?(DELFILE/DELFILE)DELFILE_REMEMBER-1(MOVD?(QUOTEDELFILE)(QUOTE/DELFILE))_FILES?MAKEFILESCLEANUP(P(MOVD?(QUOTEDELFILE)(QUOTE/DELFILE)))P(PUTPROP'FOO'CLISPTYPE)not(PROPCLISPTYPEFOO)MAKEFILECLISPTYPEPROPCLISPTYPEFOOCOMS(P(PUTPROP'FOO'CLISPTYPE))PLPRINTLEVEL(2.3)_PL+CLISPTYPE:12ACCESSFNS:(PLUSIPLUSFPLUS)PLPRINTPROPSPBPRINTLEVEL(2.3)PBPRINTBINDINGSPBUSEREXECPB;SHHEXPRESSIONEXPRESSIONFILEEXPRESSIONLITATOMLITATOMLITATOMLITATOMLITATOMLITATOMLITATOMFORMFORM|ïb'î&exï\:î¦îHîQî!î#¥î%ùî(pî*Ûî01î7|î8qî;3îAîDpîFæïZ”î¦ïMóî¦î9î¨î±î&Ùî/\î0Iî7ÿî8íî;\ïLMî5)î8@î:œ îBYîDÀîG‹ïJ§î¦î#î î$xî&eî)î.•î4Ãî6üî9™î=8îA—îD4îGjïIî¦îb î"2î&?î(Š î1e î8î9Ÿî>dîD¬ïEüî¦îîî�î'*î(íî,sïDWî¦îéî Îî"—î5Kî7Èî\îC‚îFï?eî¦îÄî]î)õî/žî5 î6Ëî@„îAsîE’îG�ï=Àî¦î+îÃî Qî"Öî#þî'€ï<î¦î$îî®î!ï9î;î?9îB½ï7oî¦îâî!Ÿî%éî)ùî,‰î/î4¶î7î>öî@ÀîBîEï5Éî¦î#©î&íî.{î/‚î2+ï,sîØîC î#�î%Èî(%î6ï)nî;î?9îB½ï'Èî¦îÔ î"æî&èî)Sî-î4Ñî@ðîDBï&#îTîcî!Þî#Kî%Áî*sî-¢î0î5"î:5 î@¨îBmîGîï$}î¦îÊî5 î'î)ºî,îçîC½îF!ïŸî¦ï ™î;î?9îB½ï ôî¦îîTî!-î"½î'ýî)Î î0cî5Mî9¦î;æ îDïî(o!ÿ}´`m$àxï\:î6¥ïW�î¦ î$AïUéî¦ïTDî¦î î äïRžî¦îˆî#jî*ùî0Û ïPøî¦ïMóî!Ïî'Ìî2îAÉîDOïLMî¦îˆî%î*ù ïIî=ïEüî.ïî6î:³ îK†{ïDWîlxî#Üî(çî1NïB±î+Jî;¼ïA î?“ï?eî!Îî1íî='ï=Àî(Žî+î2¤î6× îG«ï9î ìï5Éî¾ î(™î+î,Íï2Äî¦îï1î¦ î!»ï/xî¦ î!»î&Æî+Ðï,sî¦î-š ï)nî ìï'Èî7÷ îEýîH‚ï&#î¦ï$}î˜î1Œ ï!xî¦ï†î'Šî1ôï�î ìï ™î ì ÿ}´p`m$ÄxïEüîCñ ïA î(, ï?eî:nï=Àî@ ï9î qî[îï7oî8ãî:Íî;Œï)nî qî[îï'Èî.Íî0·î1uï&#îæîÐîŽïÒî)§î+‘î,Oï,îoîXîï�î šî Yï ™î Hî ÿÿÿ}$\`m$\ÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿTHEPROGRAMMER'SASSISTANTprocessitorrecorditonahistorylist.Usefulwhenonewantstobypassaprogrammer'sassistantcommandortokeeptheevaluationothehistorylist.[Prog.Asst.Command](Interlisp-10)Calls(page22.21)todescendtolowerexec.Ratherthanstartupanewforkeachtimetheusertypes,thecommandwillsavetheoldforkhandleuponreturnfromancommand,and,iftheforkhandleisstillactive,reuseitforthenextcommand,i.e.anfollowedbyanotherisequivalenttoanfollowedbya.[Prog.Asst.Command](Interlisp-10)Performstocontinuethelastcallto(page22.21).[Prog.Asst.Command]Acommandthatallowstheusertotype-aheadanindenitenumberofinputs.Theassistantrespondstowithapromptcharacterof.Theusercannowtypeinanindenitenumberoflinesofinput,underprotection.Theinputlinesaresavedandunreadwhentheuserexitsthetype-aheadloopwiththecommand().Whileinthetype-aheadloop,canbeusedtoprintthetype-ahead,toeditthetype-ahead,and()toerasethelastinput(maybeusedrepeatedly).Thecommandmaybeabortedby();control-Esimplyabortsthecurrentlineofinput.Forexample:8.15EXECSUBSYSEXECEXECEXECEXECEXECEXECEXECCONTINCONTIN(SUBSYST)SUBSYSTYPE-AHEADTYPE-AHEAD>ERRORSET$GOGO??FIX$QQTYPE-AHEAD$STOPSTOP_TYPE-AHEAD>SYSOUT(TEM)>MAKEFILE(EDIT)>BRECOMPILE((EDITWEDIT))>F>$Q\\F>$Q\\BRECOMPILE>LOAD(WEDITPROP)>BRECOMPILE((EDITWEDIT))>F>MAKEFILE(BREAK)>LISTFILES(EDITBREAK)>SYSOUT(CURRENT)>LOGOUT]>??>SYSOUT(TEM)>MAKEFILE(EDIT)>LOAD(WEDITPROP)>BRECOMPILE((EDITWEDIT))>F>MAKEFILE(BREAK)>LISTFILES(EDITBREAK)>SYSOUT(CURRENT)|ïb'î·î!= î-šxï\:î¦î¶îLî Pî$Üî&rî(·î*!î.ïî2qî7î;î=ûîBîDîH´ïZ”î¦ î ]î%»î,î-Øî/…î2Óî50 î;Íî=çî@DîDÑïW�î;î?9îB½ïUéî¦ îˆîäî(âî,žî0±î2^î7œî9Hî=ïRäî¦îîî"î$î%î'ßî*¹î-Ëî0Ñî3î5ìî<½î=}îC‚ïQ>î¦î<î+îuî!Êî$­î)î,›î0³î4î9®î@RîCPîD�îFçïO™î¦î0î¡î Fî$�î(1î)Œî+Îî.2î5,î;èî>aîD>ïMóî¦î î"‡î#ñ î*™î,Fî2î7´î9®î?áïJîî;î?9îB½ïIHî¦ îˆî î/%î0øî6Àî9Dî;èî>˜îF!ïG¢î¦ïD�î;î?9îB½ïB÷î¦î1îŒî"Xî&�î(Þî+Õî-‚î0„î4‚î6qî<ŠîA²îCiï?òî ìî çîjîQî#3î&qî'¿î,Êî2Óî5‡î6þî9ùî=î?ÃîBêîFîGîï>Lî ìîî?îîAîî î+Z î2€î5_î9î«îB{îE9ï<¦î ìî {î¶îŠî•îÐîÒî¯î!¯î$¤î&ßî/ÿî6Yî7Îî;¿î=Iî?„îB†îFcï;î \îìîáî îÓî>î¢î¤î&î'Åî*‹î,îî/ðî4Oî9Bî>Æî?ÉîA|îDüîG_ï9[î ìî Žîîíî! îÃî)zî/Ðî2Ìî4¶î9·î@_îHgï7µî ìî�îùîeî…îâî¨î"\î$ï4°î ìî •ïî(o!ÿÿÿ}à`m$ðxïW�î ìïUéî#SïRäî9aî?¾ïQ>î5áïO™î1Eî@WïMóî¦î.5î:×ïJîî ìïIHî&î,Ìî@kïD�î ìîï?òî#îWî4°ï>Lî$ï<¦î-î0xï;î ìî#î7 î9»ï9[î ”î$Çî;¬î@×ï1«î ìîöï0î ì ï._î ìï,ºî ìî ï+î ìï)nî ìï'Èî ìï&#î ìï$}î ì ï"×î ì îï!1î ìî ïŒî ìïæî ìï@î ìî]ïšî ìïõî ìïOî ìï©î ïîï^î î4ï¸îî?ïîï lîï Çîî‘ï !î!ÿ}àÈ`m$ÆÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿCommandsNotethattype-aheadcanbeaddressedtothecompiler,sinceitusesforinput.Type-aheadcanalsobedirectedtotheeditor,buttype-aheadtotheeditorandtocannotbeintermixed.Thefollowingaresomeusefulfunctionsandvariables:[NLambdaNoSpreadFunction]Annlambdafunctionforobtainingthevalueofaparticularevent,e.g.,,.Thevalueofaneventconsistingofseveraloperationsisalistofthevaluesforeachoftheindividualoperations.Note:Thevalueeldofahistoryentryisinitializedtobell(control-G).Thusavalueofbellindicatesthatthecorrespondingoperationdidnotcomplete,i.e.,wasabortedorcausedanerror(orelseitreturnedbell).Note:Althoughtheinputforisenteredonthehistorylistbeforeiscalled,stillreferstothevalueoftheexpressionimmediatelybeforetheinput,becauseeectivelybacksthehistorylistuponeentrywhenitretrievesthespeciedevent.Similarly,willndthersteventbeforethisonethatcontainsa.[Variable]Thevalueofthevariableisalwaysthevalueofthelasteventexecuted,i.e..Forexample,Ifthelasteventwasamultipleevent,e.g.,issettovalueofthelastoftheseevents.Followingacommand,issettovalueofthelasteventprinted.Inotherwords,inallcases,issettothelastvalueprintedontheterminal.control-UWhentypedinatanypointduringaninputbeingreadby,permitstheusertoedittheinputbeforeitisreturnedtothecallingfunction.Note:control-NforInterlisponTOPS-20.Thisfeatureisusefulforcorrectingmistakesnoticedintypingtheinputisexecuted,insteadofwaitingtillafterexecutionandthenperformingananda.Forexample,iftheusertypes8.16>LOGOUT]>FIXEDIT*(RBRECOMPILEBCOMPL)*P((LOGOUT)(SYSOUT&)(LISTFILES&)(MAKEFILE&)(F)(BCOMPL&)(LOAD&)(MAKEFILE&)(SYSOUT&))*(DELETELOAD)*OK>$GOLISPXREADLISPX(VALUEOF)(VALUEOF-1)(VALUEOF_FOO-2)VALUEOFVALUEOF(VALUEOF-1)VALUEOFVALUEOF(VALUEOFFOO)FOOITIT(VALUEOF-1)_(SQRT2)1.414214_(SQRTIT)1.189207REDO-3THRU-1IT??ITITLISPXREADbeforeUNDOFIXLINE|ïb'î&exïJnî ìî aî/î1î2î½î®î"î#¯î&î,î/�î0çî;öî>3îBdîEÞïHÉî ìî tî>î-îvî#î€î×î!Uî$Wî(Vî*î,`î0^î3î9wî=ïî?Þ ïEÃî ìî ÁîÎîî¯îÄî"½î%r ïB¾î6*î=îC˜ïAî¦îæî€î$äî'î-î/bî2÷î4�î5µ î;Ôî?Ïï?sî,î)-î*&î,Ñî0Lî1Øî3œî7# î=Gî>ÔîC5 ï=Íî¦îî9îuî,î Šî$´î&ïî*î+Ôî.2 î4® ï:Èî¦î·îŸî"Wî%�î'Kî(†î-%î0Èî2E î8¦î:eî=,îBHîCêîE'îH´ï9"î¦îJîÿî±î%Zî(#î*~ î3jî9‹î;üî>lîD¤îG4ï7|î¦î­îoî"èî$Öî(Eî*€î-4î.‰î4ï4wî¦î%î"ˆî%/î) î2Tî4î9Bî;�î>6îC îE’ï2ÑîGîíî/Wî20î6=î8%î:¾î> î@’îC+ ï1+î¦ î˜î$î- î14î<ù îC–îG€ï/†î¦îîAî ;î"Íî&Gî)áî+î0‡î2Îî8Xî<… ï-àî†î/î!î#cî&#î)Ôî.î0¾î3hî63î;‘î??ï*ÛîC™ ï)5î¦îœîbî 9î"·î*Zî+åî0eî2âî6¨î8€î:ýî=›îAlîG£ï'�î!»î"Ãî%lï“î¦î îvîíî!˜î$:î%\î*Éî.Íî>îAîB}îD‘îF7ïîî¦îSî¦îîÆî#Bî'öî.fî1ßî:±î<î>!î?ÄîC`îE îG_ïHî¦îjî óî"Òî&€î*÷î,¶î.¶î4Øî6Tî8�î:@î<¯î?>îB÷îGÙï¢î¦îï�î ìî�î¦îÆî¦î!^î#î%«î)Sî-Ëî/Æî3yî7Lî:oîDîDíï÷î¦îîúî§î!gî#Äî'kî+¶î- î.vî4 î5¸î8îî¦îˆï™î¦ï“î1}î5±î6ˆî86îîïîî/„î8‰ïHî2”ï�îs îE5îGîïPÿî ìî‚î/î®î"¶î'Nî(ûî-«î/î1µî5î9gî:çî=Eî@<îCiîIïOYî ìî C îïîSîãîŸîdî³î"6î$î(8î*6î,�î1î3Ñî9¢î:ñî?îîA×îHïM³î ìî ‡îèîEî÷îaî¿î9î åî%”î'ñî*èî-�î1pî6î7~î9î=­î@ îCYïJ®î ìîñî“î]îZî•î¢î%‹î)Hî-î/”î1Ðî4„|ïFIî ìîiîvîtîdî î#(xïAåî ì îÏîOîOî"=î' î.»î2 î76î:¹î;¶î>Ñî@÷îCŒîH0ï@?î ìî OîýîÝî›î0î íî$î&Xî*}î0Èî2{î4Þî9&î<±î>¼îA5îFÅï>™î ìî ¹îwîàîù î¬î oî$, î-î/7î0lî4šî7†î>p îEeï<óî ìî åî3îyî²îiîÐî#’î' î)¼î/”î0ýî3eî6eîG(ï;Nî ìî£îAî—îrî `î#î%zî*Îî-+î0Üî?-î@îB†îG4ï9¨î ìîQîRîùîâ îÒî!\î#î%Zî'Òî+} î2*î4#î4øî7î½îC{îG€ï8î ìî ëîlî#¡î$…î'd î.™î0Zî2Àî9ªî=¡îB~îD4îF+ï6\î ìîéî`î¡îïîBî¸ î'¾ î0�î6î=*î>¸îAšîGï4·î ìî TîîÖî> îî!iî'Îî+3î-,î1Ðî3ˆî8Bî9¢î<ûî?cîC®ï3î ìî Cî3î’îîãî"ÿî$¦î(ªî)Ìî.Sî4¨î6 î<æî>JîAîBÁîEï1kî ìîáîbîÌîßîZî!î&ìî(Yî*Äî-ÈîC îCøîFºï/Åî ìî îXî3îÃîkî"¹î$fî&Äî*uî.Àî4zî5Uî7Èî<î@öï,Àî ìî óîÏî0îîŸî!î#ÿ î,çî2xî9‰î8î?îCoîHˆï’î ìî ¦î+îîÎî^î î áî#Pî)1î/žî3¹î6tî:�î<›î? îC[îG¢ïìî Hî:îî&î§î\îwîëî"�î%‘î'vî+(î/¥î2²î9¨î<Šî?î@ËîF6ïGî ìî Fî›îQî¹î.î›î#V î+ªî/‡î1=î3@î5§î9î;‰î>î?¼îF+ï¡î ì ïœî ìî Ðî¯î%îšî îAî! î"‹î#Ëî(oî.áî3î6ìî8°î>îB7îCwïöî ìî µ î”îU îèî"Dî$mî&âî+‡î-Ûî0œî4eî6@î9#î>îAßîG¢ïPî ìî åîÄ î¸î�î/î"0î$»î'žî*ðî2Wî5-î;2î@�îC(îFLïªî6tî7Qî:î=@î?žîBkïî Ãî ¾î4îCî"^î#Rî%²î(Îî-î/’ï_î!æî#ƒî%b î,¡î/Fî4hî6%î8sî=îBtîF�ï ¹î ìî —î óîpîxî îeî �î'3î,î-Ãî0î3Ïî8î9ñî@îAÊîDhï î ìî ªîCîŒî*îaî«î!Aî'äî*…î.íî0†î2Ïî6mî:¤î=ìî?¦îCiîE²ï nî ìî ßîŸî¡îŒîæî lî#,î%~î*Cî+äî/ãî1î5‚î;Òî=1 îDîEeîH&ïî(o} È`m$€xï\Aî ›î+îˆî@î�î(ïWOî%ËïTJî'zî/ î2fî9î<{îDâîH*ïR¤î2qïPÿî¢îE¥{ïOYî=“xïJ®îOïAåî3Ùî83ï<óî:î=\î? î@¹îBgîEÃï;NîYîµîcîÀî2“î5ïî7�î9Kî:úî>Vï9¨îýî î3Lï8î‚îÞîŒîéî—î!î6Nî:�î?l{ï3î:xï1kî1fî4Ãî8î;{î>ØîA]îB4ï/ÅîŸîÒî‘îhî1î>qï)uî'eî*Âî.î1{î83î;�îBHîE¥ï'Ïîxî* î.@î67ï&)î%7î(”î+ðî/MîC÷îF}ï$ƒîÁî)~{î1îxî<Åï"Þî9bî<¿î@îCwï!8î ìî Hîî]î"uî8Vï’î&ïìî ìïªî ìî Hî¤îîºîî$Ïî(+î,^î.äî/»î1iî4Åî5œîEýïî ìîíîIî¥îî6î9bî<¿î@îFÔï_î ìî¤îî]îâîºîhîÄî ›î@RîA)ï ¹îyî)æî*½îG«îH‚ï îLî,Ïî-¦!} ȸ`m$TÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿChangingTheProgrammer'sAssistantthecurrenthistory,nottheoriginalcontext''doesnotapplyifthecorrectionisperformedimmediately.8.3CHANGINGTHEPROGRAMMER'SASSISTANT[Function]Changesthetime-sliceofthehistorylistto(seepage8.25).Ifis,changesboththetoplevelhistorylistandtheedithistorylist.Note:Theeectofthetime-sliceisgradual:thehistorylistissimplyallowedtogrowtothecorrespondinglengthbeforeanyeventsareforgotten.thetime-slicewillimmediatelyremoveasucientnumberoftheoldereventstobringthehistorylistdowntothepropersize.However,isundoable,sothattheseeventsare(temporarily)recoverable.Therefore,iftheuserwantstorecoverthestorageassociatedwiththeseeventswithoutwaitingmoreeventsuntiltheeventdropsothehistorylist,hemustperformacommand(page8.13).[Variable]Whenthisvariableissetto,thecurrenteventnumbertobeprintedbeforeeachpromptcharacter.See,page8.31.isinitially.[Variable]Thevalueofisalistofexpressionwhichareevaluatedeachtime(page8.31)iscalledtoprintthepromptcharacter.Ifisgoingtoprintsomething,itrstmapsdownevaluatingeachexpressionunderan.Theseexpressionscanaccessthespecialvariables(thecurrenthistorylist),(thepromptcharactertobeprinted),and,whichiswhatwillprintbefore,ifanything.Whenis,willbetheeventnumber.Theexpressionsoncanchangetheshapeofacursor,updateaclock,checkformail,etc.orchangewhatisabouttoprintbyresettingand/or.Aftertheexpressionsonhavebeenevaluated,isprintedifitis(still)non-,andthenisprinted,ifitis(still)non-.[Variable]Thevalueofisalistofexpressionsthatareevaluatedundererrorsetprotectioneachtime(page8.32)createsanewevent.Thishappenseachtimethereisaninteractionwiththeuser,butnotwhenperforminganoperationthatisbeingredone.Theexpressionsonarepresumablyexecutedforeect,andcanaccessthespecialvariables(thecurrenthistorylist),(thecurrentpromptcharacter),and(thecurrenteventwhichisgoingtoreturn).Notethatandtogetherenablebracketingeachinteraction8.18(CHANGESLICE)NILLISPXHISTORYEDITHISTORYincreasingDecreasingCHANGESLICECHANGESLICEFORGETPROMPT#FLGTPROMPTCHARPROMPT#FLGTPROMPTCHARFORMSPROMPTCHARFORMSPROMPTCHARPROMPTCHARPROMPTCHARFORMSERRORSETHISTORYIDPROMPTSTRPROMPTCHARIDPROMPT#FLGTPROMPTSTRPROMPTCHARFORMSPROMPTCHARIDPROMPTSTRPROMPTCHARFORMSPROMPTSTRNILIDNILHISTORYSAVEFORMSHISTORYSAVEFORMSHISTORYSAVEHISTORYSAVEFORMSHISTORYIDEVENTHISTORYSAVEPROMPTCHARFORMSHISTORYSAVEFORMSNHISTORY_HISTORYNHISTORYN|ïb'îî$4î' î/Ëxï\:î ìî IîîóîeîÃîÈî%Gî(tî*çî.¯î0î2k î8Üî:GîA |ïUî ìîiîÈîN î'«xïP²îC5 ïO î¦î îmî"„î%�î'(î)uî-òî5Ùî8Òî;Œî>¿îB ïMfî¦î†îSî!kî$”î&âî)Fî,yî0÷î=¬î@QîBŸîEPïKÁî¦î# ïH»î¦îÁî­î"vî*¼î-1î0Hî3lî4íî:„î<ùîA�îCðîEqïGî¦îî÷î"¯î$¥î'L î0„î5î9—î<î@þîC™ ïEpî‹î áî#øî&ýî)ž î1fî6Cî7cî=(îBHîC÷îFMïCÊî¦îÁîRî Þî# î'’î)³î-_î.ñî13î5�î8²îHsïB$î¦îüî·î"{î%úî*(î,r î4¿ î<Œ îC8îD�îFæï@î¦î“îPî"9î$¦î)d î/Úî3î6—î:Üî?óîFMï>Ùî¦îÖîî+'î.Òî2Ÿî4³î7 î;‘î> î@ îChîH´ï=3î5î#�î'Lï:.îC™ ï8ˆî¦î³îJî#tî$×î&êî)fî*:î,�î1Mî4÷î:î;¼î=£îBlîF¯ï6âî¦îŒ î"òî-íî.Èî2 î>dî?ÎîE ï3ÝîC™ ï27î¦îÆî¶î.î/Ôî1Fî3Ìî5Í î<ÉîAîC¸ï0’î¦îþî']î+Cî.Ðî0cî4€î6Vî9äî•î?´îB•îFÆïÂî¦îî Gî#mî&÷î(fî*Y î11î4Mî6¯î:î<…î>üîB² ïî¦î•î¹î"…î#ïî'·ïî¦îv î!¦î1”î3ß î;<î@îîC#îG(ïqî¦î)î,î ‚î$óî1î3Ñî8�î=îBHîEïÌî¦î£ î#sî+ î-ùî2Ôî6œîD•îFï &î¦îSï !î ìî ˆîÅî.Âî4Jî8Õ î?±îC ïî(o"ÿ}D`m$LxïP²î ì îôïMfîî3# ïKÁîâ {ïH»î$E ïEpî¦ xïCÊî>Ì ï>Ùî!k ï=3î¦ï:.î ì ï8ˆî(�ï6âî%† î5y îDÉï3Ýî ìï27î ·ï0’îI ï.ìî¦ î<¿ï-Fî.ï*Aî6èï(›îêî8ï&õî¦ î,î= îH*ï%Pî¦î<¿ï"îè î5î;«ï ^î ýî;rï¹î"î+Mî>€ï³î ìïîžïhî)[ ïî#¤ïqî*¢î@ïÌî&>î:½ ï !î}î £"ÿÿ}D¬`m$œxïP²îØî îîÉïO î0î4Žî7vîDîH�ï@îDÑ"ÿ}ð`m$&ÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿTHEPROGRAMMER'SASSISTANTwiththeuser.Thesecanbeusedtomeasurehowlongtheusertakestorespond,touseadierentreadtableorterminaltable,etc.[Variable]Thevalueofisalistofformsthatareevaluatedateach,i.e.whenusertypescontrol-D,callsfunction,ortypescontrol-Cfollowedby.[Variable]Iftheofis,andaneventisabouttodropotheendofthehistorylistandbeforgotten,iscalledasafunctionwithtwoarguments:theinputportionoftheevent,andtheentireevent(seepage8.25fortheformatofevents).Ifreturns,theeventisarchivedonapermanenthistorylist(seepage8.13).Notethatmustbesetanddened.isinitiallyandundened.Forexample,deningaswillkeeparecordofallcallsto.[Variable]Ifthevalueofisnon-,thesystemautomaticallymarksalleventsthatarereferencedbyhistorycommandssothattheywillbearchivedwhentheydropothehistorylist.isinitially,soonceaneventisredone,itisguaranteedtobesaved.Aneventis``markedforarchiving''byputtingtheproperty,value,ontheevent(seepage8.25).Theusercoulddothisbymeansofanappropriatelydened(seebelow).[Variable]providesamacrofacilitythatallowstheusertodenehisownprogrammer'sassistantcommands.Itisalistofelementsoftheform.Wheneverappearsastherstexpressiononalineinainput,thevariableisboundtotherestoftheline,theeventisrecordedonthehistorylist,isevaluated,and'svalueisstoredasthevalueoftheevent.Similarly,wheneverappearsasofaforminainput,thevariableisboundtooftheform,theeventisrecorded,andisevaluated.Anelementoftheformisinterpretedtomeanbindandevaluateasdescribedabove,exceptdosavetheeventonthehistorylist.[Variable]allowstheusertodeneprogrammer'sassistantcom-mandsthatre-executeotherevents.isinterpretedthesameas,exceptthattheresultofevaluatingistreatedasalistofexpressionstobe,exactlyasthoughtheexpressionshadbeenretrievedbyacommand,orcomputedbyacommand.Notethatreturningmeansnothingelseisdone.Thisprovidesamechanismfordeningcommandswhichareexecutedforeectonly.8.19RESETFORMSRESETFORMSRESETRESETSTARTARCHIVEFNvalueARCHIVEFNTARCHIVEFNARCHIVEFNTARCHIVEFNbothARCHIVEFNNILARCHIVEFN(LAMBDA(XY)(EQ(CARX)'LOAD))LOADARCHIVEFLGARCHIVEFLGNILARCHIVEFLGT*ARCHIVE*TLISPXUSERFNLISPXMACROSLISPXMACROS()LISPXLISPXLINECARLISPXLISPXLINECDR(NIL)LISPXLINEnotLISPXHISTORYMACROSLISPXHISTORYMACROSLISPXHISTORYMACROSLISPXMACROSunreadREDOUSENILLISPXCOMMANDDEFCOMMANDDEFDEFCOMMANDDEFCOMMANDDEFDEFDEF|ïb'î·î!= î-šxï\:î ìî +î¯îŸîÄîuî‹îëî!¿î'Oî*xî-¶î0;î3Yî6úî8Îî>•î@iîCîDSïZ”î ìîäî§îîØïW�îC™ ïUéî¦îqî î(˜î)øî+î-Fî.óî2Ïî5�î7Öî=ðî?|îFÒîG£ïTDî¦îiîqî"î&·î(Âî+àî5šî6‡î8[î;ýî@ îB2îGãïRžîÚïO™îC™ ïMóî¦îKîyî)�î+óî,óî/Ìî1ßî5¶î7Dî;Gî=î@ŒîBÊîELîH&ïLMî¦î7îøî!gî$Oî&r î5>î6Üî;î<ãî>@îCèîG3ïJ§î¦ îî!©î%|î*ƒî,fî.ðî30î6î8›î<¯î@�îCƒîFóïIî¦îî‚î!î"óî(‰î2`î8î9î;ƒî?Vî@âîFŽîH´ïG\î¦î¦î#Tî%°î(›î,î0Hî3Üî>ýîBƒîGÂïE¶î¦î[î'Øî)Cî1Fî3ûïB±î¦î#îxîËî,ÛïA î¦îOîžîÆî#î$Éî&¸î)Äî.Îï>îC™ ï<`î¦îî\îîî)hî*¿î0î0Ëî3î7w î?ÎîCÍîE¨ï:ºî¦î{îÖ î#�î%¡î*7î1î2ëî5Àî8×î;‰î=�îCîFÐï9î¦îñîîbî#ëî/�î0÷î6Åî7�î9[î<›î>†îB4îC›îHˆï7oî¦î î î!Éî#¸ï4jî¦îòîŸîî$ªî&à î-ƒî/xî48î6‘îC±îD‰îIï2Äî¦î¥îüî¨î"mî%ªî)�î,^î/Oî3î5î7©î9žî=Øî?‰îAr ï1î¦î&Nî)ï.îC™ ï,sî!�î'?î(Žî,ßî1ˆî4zî8Êî;Nî>kî@>îD…îFÜï*Îî¦ î Xî%²î-î.…î/ëî1î3Gî4úî:«î<^î>·ï)(îãîî)–î.¥î0Zî2Àî5‰ îQî?‚îB?îCôï'‚î¦îôî�î,Tî-ýî2“î4î7î9ùî;ïî>‹îAæîD‚îHsï%Üî¦îˆî¸î"Aî&úî,Úî.p î5#î:iî;ôî?ÆîA\îE¨îG€ï$7î¦îOî îhî#¤ î)Õî6÷î<î@ºîBtîCŸîGîH´ï"‘î`î aî"Àî0 î1vî5Ïî:‰î¢îB`îD¿îHsï ëî¦îµî#Tî$¾ ïæî¦îBî¿î!Áî$iî7šî9O î@¥îB�îF¤ï@îÔî"¢î+î,åî3#î7šî<î@™îC´îF+ïšî¦î«îî –ï•îC™ ïïî'�î(‰î+âî.vî1¤î3ˆî7ßî9äî<åî@ÍîAöîC`îFcïJî¦î2î)î Êî%æî)­î>´î@IîArîC îG€ï¤î¦îî%öî&Èî(î+ î-Ìî0î3Üî5Šî9¿î>ñî@QîDàîFƒîG¡ïþî¦îhî½î0î ©î"aî(Rî);î*�î-Þî/•î4Oî6·î8 î:~î=øî@¸îDïXî¦î×îMî!Ëî&Dî(=î*»î.Ûî1 î5«î8)î=-î@×îCÚîG�ï ³îºîî!¹î$î&Þî(Rî,dî/…î5î6Lî=‚î?Èï î¦î$î…î"�î$áî&5î*˜î,Óî0…ïî(oÿÿÿ},`m$ÆxïW�î ì ïUéî¸ îBŸïTDî1fïRžî¦ïO™î ì{ïMóîÍxî!Uî+ïLMî,÷ïIî*+î70ïG\î6È{îD’xïE¶îÄî.=ïB±î$óî.[î5î7™î:î={îA®îD3ïA î+qï>î ì ï<`î ’ î-~ï9î&© î5íï4jîxï•î ìïïî¦ïJî.æï¤î¸ {ïþî$Zî%ÔxïXî6î2kï ³î¦îE& ÿÿÿ},h`m$¸xï*ÎîBîï)(î¦î"Ÿï%Üî)Äî8ï$7î0ï ëî jïæî(ïî3Žï@î(ï¤î<"ÿÿ}”4`m$0ÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿChangingTheProgrammer'sAssistantManyprogrammer'sassistantcommands,suchas,,,etc.areimplementedthroughor.Note:Denitionsofcommandsonorcanbesavedonleswiththelepackagecommand(seepage11.24).[Variable]Whenissetto,itisappliedasafunctiontoallinputsnotrecognizedasaprogrammer'sassistantcommand,oronor.Ifdecidestohandlethisinput,itsimplyprocessesit(theeventwasalreadystoredonthehistorylistbeforewascalled),setstothevaluefortheevent,andreturns.Theprogrammer'sassistantwillthenknownottocallor,andwillsimplystoreintothevalueslotfortheevent,andprintit.Ifreturns,oriscalledintheusualway.Notethatmustbebothsetanddened.isgiventwoarguments:and.istherstexpressiontyped,andistherestoftheline,asreadby(page8.30).Forexample,iftheusertyped,=,and=;iftheusertyped,=,and=;andiftheusertyped,=and=.Byappropriatelydening(andsetting),theusercanwithaminimumofeortincorporatethefeaturesoftheprogrammer'sassistantintohisownexecutive(actuallyitistheotherwayaround).Forexample,couldbedenedtoparseallinput(otherthanp.a.commands)inanalternativeway.Notethatsinceiscalledforeachinput(exceptforp.a.commands),itcanalsobeusedtomonitorsomeconditionorgatherstatistics.[Function][Function][Function][Function][Function][Function][Function]Inadditiontosavinginputsandvalues,theprogrammer'sassistantsavesmostsystemmessagesonthehistorylist.Forexample,,,,outputof,,,DWIMmessages,etc.Whenprintstheevent,theoutputisalsoprinted.Thisfacilityisimplementedviathesefunctions.Thesefunctionsprintexactlythesameastheirnon-counterparts.Then,theyputtheoutputonthehistorylistundertheproperty(seepage8.25).Ifisnon-,thesefuctionsdonotprint,butonlyputtheiroutputonthehistorylist.Toperformoutputoperationsfromuserprogramssothattheoutputwillappearonthehistorylist,theprogramneedssimplytocallthecorresponding8.20RETRIEVEBEFOREAFTERLISPXMACROSLISPXHISTORYMACROSLISPXMACROSLISPXHISTORYMACROSLISPXMACROSLISPXUSERFNLISPXUSERFNTLISPXMACROSLISPXHISTORYMACROSLISPXUSERFNLISPXUSERFNLISPXVALUETEVALAPPLYLISPXVALUELISPXUSERFNNILEVALAPPLYLISPXUSERFNLISPXUSERFNREADLINEFOO(ABC)FOO((ABC))(FOOABC)(FOOABC)NILFOOABCFOO(ABC)LISPXUSERFNLISPXUSERFNLISPXUSERFN(LISPXPRINT)(LISPXPRIN1)(LISPXPRIN2)(LISPXSPACES)(LISPXTERPRI)(LISPXTAB)(LISPXPRINTDEF)FILECREATED(REDEFINED)(RESET)TIMEBREAKDOWNSTORAGE??LISPX*LISPXPRINT*NILLISPXXLINEXLINEXLINEXLINEXLINEXYZNODOFLGXYZNODOFLGXYZNODOFLGXYZNODOFLGXYZNODOFLGXYZNODOFLGEXPRFILELEFTDEFTAILNODOFLGFNVARNODOFLG|ïb'îî$4î' î/Ëxï\:î ìî îÞîaî#Åî'î/¡î5µî:òî;ûî?îA“ ïZ”î ìîáî)ÃïW�î ìî Î îÅîhî3î(Òî:î<…î>`îBîDîFÅïUéî ìî Iî›îØî#õî&Àî*ïRäîC™ ïQ>î¦î&Pî($î*¨î-–î.Ûî0™î2nî7½î9Óî;eîADîCZîE²ïO™î¦îK î![î#9î$” î-|î3 î9ýî;ñîHïMóî&Æî'”î2½î7‹î9,î=¢î@4îD)îEqïLMî¦î•îáî!®î%Wî'÷î,¼î0Óî2Îî5"î9§î;ÙïJ§î¦î‰î”î+�î-vî0 î3ëî6`î8öî=Gî@5îEóîGïIî¦ î Rî%¦î(Dî+]î/î1vî3î9lî?Wî@)îBÓîEqïG\î¦î#³î&mî(®î,9î.±î0Ðî3î7î9žî<çî>¶ïE¶î¦îÎî#sî)Öî+4î/î0½î3î6Ÿî9óî=[ïDî¦î îúî 4î"Oî%ïA î!Tî"«î&Hî(Þ î1=î6¸î8Çî:îDî?Hî@¬îCîF ï<î äî"¼î-Zî.Zî4î7ìî9î;Øî=Uî?ÏîBãï:tîÚî�î!öî'…î.Æï7oî¦î* î"þî(»î,Rî:Ôî<î>àîB@îE3îH´ï5Éî¦îîÆî#ƒ î*Òî-;î2oî43î6� î?`îDÊîG¬ï4#î¦î«î ²î&@î'˜î)î+gî/î1ßî7Ÿî:Kï2~î¦î�î‚î"{î$:î'èî)éî-¢î1Éî4ÿî8î?jîA)îC* ï0Øî¦î¸îiî"sî0 î1Èî5úî8sî;ßî?ÄîDÇîG@ï/2î¦ îVî «î#3î%ýî'ìî+%î,Òî2î5žî;·î=yîA¯ ï,-îC5 ï*‡îC5 ï(áîC5 ï'<îC5 ï%–îC5 ï#ðîC5 ï"JîC5 ï ¥î¦î«îLî!0î%›î)þî,éî1°î4E î=2îBÈîF„ïÿî¦îhî"‰î$Øî'€î,Xî/÷î2ê}îCÿîDœîE8xîE™ïYî î*(î+î/�î4Äî=CîDîEï³î¦îßî ­î'Bî+3î-™î1­î4î8‰î9üî<ÎîB;îE[ïî¦î î![î#–î' ïî¦îÈî!åî%nî*+î,¬î0Jî2î5ƒî= îEêïcî¦îÑîmîçî$sî&”î)î-ºî0î4/î6©îGï½î¦îêï¸î¦î¨î!î&Vî'0î*µî/çî1êî4\î8î:–î=«î@)îClîGÙïî¦îî‘ï î¦îÛî>î#» î*sî-æî0ìî7 î8Üî;·î>$îB¢îEZï gî¦îÛîhî!%î#õî&‚î,;î0Iî4åî6Áî9zî< ïî(o!ÿ}Ü`m$fxï\:î(éî0«î6¿ïZ”î î£ïW�î$ î*€ïUéî3 ïRäî ì ïQ>î$ î,¾ïO™î>' ïMóî¦î) ïLMî@ ïJ§î"l îEïIî5–î;$ïG\îä î@ ïE¶îIîŸî%*î@ ïA î¦ ï?eî1eï=Àî Üî%æî'”î,[î6´î:î;¿ï<î¦îÚîˆî6î$î(Oî)þî+¬î5fîFÔï:tî¦îTîîíî(åî+jî-ï7oî1– ï4#î@ ï0Øî& ï,-î ì îï*‡î ì îï(áî ì îï'<î ì îÝï%–î ì îÝï#ðî ìîXï"Jî ì î/Bïÿî9î=GîFÒïYî¦ î!î%î1hî5´î>2ï³î$Êïî8Bïcî<\ ï¸î#Ðï gîE&ÿÿ}Üì`m$æxïA î/õî3Þî7ï?eîMï=Àî*$î2{ï<î!åî1-ï:tî¶î$«ï,-îî¹îpîîï*‡îî¹îpîîï(áîî¹îpîîï'<îØî�îGîÞîõï%–îØî�îGîÞîõï#ðîSî îÂîYîpï"Jî†îµîNî"[î%¡î&`î)Bî.YïÿîGªïYî!Øî"†ï¸î&î= ÿ}È|`m$ŽÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿTHEPROGRAMMER'SASSISTANTprintingfunction.[Function]Thefunctionisavailabletopermittheusertodeneadditionalprintingfunctions.Iftheuserhasafunctionthattakesthreeorfewerarguments,andthesecondargumentisthelename,hecandeneaprintingfunctionbysimplygivingthedenitionof,forexample,with.isdenedtolookbackonthestack,ndthenameofthecallingfunction,stripotheleading``'',performtheappropriatesavinginformation,andthencallthefunctiontodotheactualprinting.[Variable]If=,theprintingfunctionswillnotstoretheiroutputonthehistorylist.isinitially.8.4STATISTICSTheprogrammer'sassistantkeepsvariousstatisticsaboutsystemusage,e.g.,numberofuserinputs,numberofundosaves,numberofcallstoeditor,numberofeditcommands,numberofp.a.commands,cputime,consoletime,etc.Thesecanbeviewedviathefunction.Theusercandeneaddnewstatisticstothep.a.statisticsviathefunction,andincrementthemwith.Note:Thecollectionofprogrammer'sassistantstatisticsisnotsupportedinInterlisp-D.andaredenedwithnulldenitions,soprogramscanbetransferred.[Function]Printsprogrammer'sassistantstatistics.If=,returnsthestatisticsasalistofelementsoftheform.[NLambdaNoSpreadFunction]Eachisalistoftheform.Eachisdenedasthenameofanewstatistic.Forexample,willdenetwonewstatistics,namedand.[Function]Incrementsthestatisticwithnameby(or1if=).hasa(seepage12.14).Theusercansavehisstatisticsforloadingintoanewsystembyperforming.Aftertheleisloaded,thestatisticsprintedbywillbethesameasthosethatwouldbeprintedfollowingthe.8.21(USERLISPXPRINT)USERLISPXPRINTLISPXLISPXLISPXUSERLISPXPRINTMOVD(USERLISPXPRINTLISPX)USERLISPXPRINTLISPXLISPXPRINTFLGLISPXPRINTFLGNILLISPXLISPXPRINTFLGTLISPXSTATSADDSTATSLISPXWATCHADDSTATSLISPXWATCH(LISPXSTATS)T(.)(ADDSTATS)(.)(ADDSTATS(EDITCALLSCALLSTOEDITOR)(UNDOSTATSCHANGESUNDONE)EDITCALLSUNDOSTATS(LISPXWATCH)NILLISPXWATCHBLKLIBRARYDEFMAKEFILE(DUMPSTATS)DUMPSTATSLISPXSTATSMAKEFILEXFILEZNODOFLGFNFNFNRETURNVALUESFLGRETURNVALUESFLGVALUEEXPLANATIONSTAT1STATNSTATiSTAT-NAMEMESSAGESTAT-NAMESTATNSTATNN|ïb'î·î!= î-šxï\:î¦îäïY5îC5 ïW�î¦îaî+èî-7î2Òî4dî8¶î:ùî=Ôî?gîCl ïUéîcî!¦ î(3î)¹î,î/î1�î2¾î:rî=Cî@ÃîDNîFïTDî¦ îéî!Óî$eî)(î/�î1!î3³î6:î:�î<µî?sîCÈïRžî¦îÛî"Hî$:î(�î3î5gî;�îIïPøî¦îÿîðî:­îHsïORî¦î˜îPî!rî$Áî&Ñî):î-î/ñî2Zî6"î7åî:Mî>ºîD•îGÃïM­î¦îî î#íî%›î+ î-ƒ î4÷î9G îAEîDîGTïLî¦îîxî!%î#*î%ˆî)‡ïIîC™ ïG\î¦î#ïî'Ôî(Œî/Xî4rî:Fî<Ëî?îBOîEoïE¶î¦î«îî •î.Äî0/î6|ï>“î ìîi xï:.î ìî  îùî—îªî$® î*Nî.lî3$î7”î:Ãî@+îB#îEZï8ˆî ìîîËî\î9î`îî"$î#Ñî((î-Oî/î1Çî8þî>%î?ÝîB¦ï6âî ìî ‰îøîÏî?îîîßî!Zî#;î'Ñî)þî,Nî:î:êî=±î@šîCîG(ï5=î ìî × î6îãî@î îhî £î#î/.î0 î2¾î9/î<µîH4ï27î ìî ëîÊ îîÄ î!„î&ì î,Tî-Èî0Dî6Àî8v î=ßîG(ï0’îÖî(îî&îû î'î(Éî.Öî1_î3N ï-ŒîC5 ï+çî¦îá î$ßî*† î1?î?/îAfîB‰îG€ï*Aî¦ îî²îÚî"î#Íî)ƒî+:î-˜îAË}ï'<îÃî`îüxî6*î=îC˜ï%–î¦îî vî!«î#òî%µî(îkîAÛîCîGïŸî ìîîîÕîâî#øïî(o"ÿÿ}°`m$´xïY5î ìî$DïW�î» ïUéî¦ïTDîE&ïRžî,´î=> ïPøî#%î3óî9Öî< ïM­îºïIî ì ïG\î î%Oî*ÅïE¶î#T î5)ï6âî1µ ï5=î(uî?Í ï27î?âï0’î ì ï-Œî ì î )ï+çî@�ï*Aî0ûî6�î@ôï'<î ìî!ï%–î+Žî4,î;vï ëî!î)l î2ªî7´î:9î@ò ïEî¦î_î>¡ïŸî¦ïšî ì îÅïõî:Äïïî¦ î$- ïêî9 ïDîî.¯ ïŸî@"ÿÿ}°„`m$¢xïY5î]îî®îEî#\ïUéî89ïRžî0çïPøî8'ï-Œîîßîuî@ï+çî3î8åî:|î>Gï*Aî1Óî2�î4î8<î=èï'<îSî·îvï&ÒîNï'<î>î¢îaï&Òî9ï%–î"î‡îFï%-îï%–î,eî-Êî.‰î/Äî5Úî9Æî@óîBXîCîDRïšîîfî$îÜïõî,Éî.-î.ìî2Bî8|ÿÿÿ}4t`m$Žÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿ22Undoing8.5UNDOINGNote:Thisdiscussiononlyappliestoundoingundertheexecutiveandbreak;theeditorshandlesundoingitselfinaslightlydierentfashion.Thecapabilityoftheprogrammer'sassistantisimplementedbyrequiringthateachoperationthatistobeundoableberesponsibleitselfforsavingonthehistorylistenoughinformationtoenablereversalofitssideeects.Inotherwords,theassistantdoesnot``know''whenitisabouttoperformadestructiveoperation,i.e.,itisnotconstantlycheckingoranticipating.Instead,itsimplyexecutesoperations,andanyundoablechangesthatoccurareautomaticallysavedonthehistorylistbytheresponsiblefunctions.Thecommand,whichinvolvesrecoveringthesavedinformationandperformingthecorrespondinginverses,worksthesameway,sothattheusercanan,andthatetc.Ateachpoint,untiltheuserspecicallyrequestsanoperationtobeundone,theassistantdoesnotknow,orcare,whetherinformationhasbeensavedtoenabletheundoing.Onlywhentheuserattemptstoundoanoperationdoestheassistantchecktoseewhetheranyinformationhasbeensaved.Ifnonehasbeensaved,andtheuserhasspecicallynamedtheeventhewantsundone,theassistanttypes.(Whentheusersimplytypes,theassistantsearchesforthelastundoableevent,ignoringeventsalreadyundoneaswellasoperationsthemselves.)Thisimplementationminimizestheoverheadforundoing.Onlythoseoperationswhichactuallymakechangesareaected,andtheoverheadissmall:twoorthreecellsofstorageforsavingtheinformation,andanextrafunctioncall.However,eventhissmallpricemaybetooexpensiveiftheoperationissucientlyprimitiveandrepetitive,i.e.,iftheextraoverheadmayseriouslydegradetheoverallperformanceoftheprogram.Hencenoteverydestructiveoperationinaprogramshouldnecessarilybeundoable;theprogrammermustbeallowedtodecideeachcaseindividually.Thereforeforeachprimitivedestructivefunction,Interlisphasdenedanundoableversionwhichalwayssavesinformation.Byconvention,thenameoftheundoableversionofafunctionisthefunctionname,preceededby``.''Forexample,thereisand,and,etc.The``slash''functionsthatarecurrentlyimplementedcanbefoundasthevalueof.Thevarioussystempackagesusetheappropriateundoablefunctions.Forexample,usesandsoastobeundoable,andDWIMusesand,whenitmakesacorrection.Similarly,theusercansimplyusethecorrespondingfunctionifhewantstomakeadestructiveoperationinhisownprogramundoable.Whenthefunctioniscalled,itwillsavetheinformationinthecurrenteventonthehistorylist.Theprogrammer'sassistantcannotknowwhethereciencyandoverheadareseriousconsiderationsfortheexecutionofanexpressioninauser,sotheusermustdecideifhewantstheseoperationsundoablebyexplicitlycalling,etc.However,expressionsrarelyinvolveiterationsorlengthycomputations.Therefore,beforeevaluatingtheuserinput,theprogrammer'sassistantsubstitutesthecorrespondingundoablefunctionforanydestructivefunction(see,page8.34).Forexample,iftheusertypes,itisactuallythatisevaluated.Obviously,withamoresophisticatedanalysisofbothuserinputanduserprograms,theTheeectsofthefollowingfunctionsarealwaysundoable:,,(usedtogiveafunctionacompiledcodedenition),,,,,,,,,,,,,,,,,,,,,,plusanychangescausedbyDWIM.8.22UNDOUNDOUNDOUNDOUNDONOTHINGSAVEDUNDOUNDO/RPLACA/RPLACAREMPROP/REMPROP/FNSBREAK/PUTD/REMPROP/RPLACA/RPLACD//UNDOprogram/MAPCONCtyped-indirectlyLISPX/(MAPCONCNASDIC)(/MAPCONCNASDIC)DEFINEDEFINEQDEFCDEFLISTLOADSAVEDEFUNSAVEDEFBREAKUNBREAKREBREAKTRACEBREAKINUNBREAKINCHANGENAMEEDITFNSEDITFEDITVEDITPEDITEEDITLESUBSTADVISEUNADVISEREADVISEyï&ŠîHÅïÌî ì!}`m$|ïb'î' ï\8î ìîixïWÓî ìî ÎîÓ î<î?îÐî jî%Àî)¬î+öî1çî4ˆî8Çî;î?€îDtïV-î ìî EîòîîßîiïS(î ìî¬ îìî¨î î#Æî)*î*™ î2èî4çî:äî=µî@èîGïQƒî ìî Lî ïîÓîÍî± îÓî!"î#Sî'}î)wî+Ëî0Nî2î7Z î>Óî@vîDÍïOÝî ìî ˜î eî/îäî¦î6îŽî ßî&2î)Tî+»î0Ëî4qî5»î7î:ìî<�îAÕîBò ïN7î ì îˆî:î©î-îº îPî%!î&ý î/=î4…î5ôî:yî@ îG(ïL‘î ìî Œî’î»î‰îHî › î)î,Òî.Øî18î5Çî8î:î<` îC� ïJìî ìî’î?îBî Œ î'7î)�î-M î4Èî7u î>™î@ï ïIFî ìîuîrîÐîIîvî9î!î#bî&Xî,Áî2 î2èî9}îîBiîCòîGjïAOî ìî @î[î îcîTî î"§î'$î)}î-)î/î2ëî8:î:“î?ìï?ªîî î­îî&î¤î$¤î%“î(î-tî2åî53î7£î:3î@IîDjï>î ìî!îðîìî˜îƒî" î(¸ ï:ÿî ìî  îî³î -î&6î(Žî.Ðî2[î6 î<×î@þîF,ï9Yî ìîòî"î|îîLî!î"`î&cî(ëî*Œî-ñî0Üî2rî6ÿî9î=,î?h îG(ï7³î ìî Íî0î˜îŸîÄî úî#�î'î*}î-rî/Tî1®î7æî99î;‰îA îBþ ï6 î ìîîç îŒî]îîî ~î$ î*?î-rî3Oî8´î;Cî?÷ îH&ï4hî ìî bî¸îî©îr î$vî*²î,wî-¹î3[î7ë î>×î@ÞîG€ï2Âî ì îÇî+îî+îØî"/î%]î(I ï/½î ìî?îsîšîu î"Yî(!î-Žî/ùî4Ùî6Àî<½îAyîE|ï.î ìî u îˆî§ îî!pî%1î&ìî)Nî/Vî4î5Ùî7î<î=îî@PîEÉï,qî ìî‰î™î îî×î¾î"Yî)~î2*î9—îCîDîGï*Ëî ìî¤î�îiîºî‘ î'Ûî*dî,Sî0]î2 î4gî8 î=!ï'Æî ìî ˜î3î‚îîdî™ î&Éî,¤ î3î5’î?ÌîG(ï& îîÐîpîîñîBî êî%·î.ùî7‚î8Qî;õî==îAeîB€ ï${î ¨ îî²îáî¢îFî ñî#‡ î.Aî3îî5†î7­î;Ãî=¨îA‘îBò ï"Õî ìîî¡îÅî¸î4î"·î&½î*[î/Âî1 î5`î6¨î9Cî<7îBZ ï!/î ìî ˜î öî»îmîqîÏî\ï*î ìî Ó î›î î”î#aî(¼î.Ñî1—î7–î9ùî>¢ îG¢ï„î ìî \îŸîiîk î0îðî ,î(î)î*Úî-Kî0Uî3Íî87î9ªî;¬î?œîC5 ïÞî ìîöî÷ îáî#î#åî&¯î2 î9Wî=FîB îHï9î ìîö îÔîL î$,î(� î/Tî1×î4òî9 î;£ îDï“î ì îÁî? îNî"rî(î*dî-# î4/î9ÄîAºîB¾îF#ïíî ìî ¢îîíîXî\}î*mî+ î+¥xî,Þî-Ëî/.î0¦}îDîD«îEGxîGïGî ìî t ît îwî­îóî!  î)Ýî/ î0ßî46î7Jî;î=áî@öîG€ïbî €î |î×îµî8îkî"Šî%î)ˆî5[î¸îCÝîIï Úîîîìî!€î)î)ðî,çî/…î4­î9%î;ïî(o"ÿ} ¨`m$öxïS(î ÆïJìî ºïIFî(áî.°î5�ïAOîCwï?ªî ìî!Hï>î0ï,qîIî#Úî,Iî3î‡{ï„î#6xïÞîI{î,çî0nï9î’xï“î<¯ïíîûî$‹î,î5Æî>-îE¨ïbî0Qî6]î=Aï àî# î)øî.^î5Iî=ãîC ï ]î ìî¾îãîµî%6 î.Žî5aî:…î?©îDÎï Úî ìîûîáîÇî"\"ÿÿÿ} ¬P`m$¦î ìïÆþ=$ÿ} ü`m$ÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿTHEPROGRAMMER'SASSISTANTdecisionconcerningwhichoperationstomakeundoablecouldbebetteradvised.However,wehavefoundthecongurationdescribedheretobeaverysatisfactoryone.Theuserpaysaverysmallpriceforbeingabletoundowhathetypesin,andifhewishestoprotecthimselffrommalfunctioninginhisownprograms,hecanhavehisprogramexplicitlycallundoablefunctions.8.5.1UndoingOutofOrderoperatesundoablybysaving(onthehistorylist)thelistcellthatistobechangedanditsoriginal.Undoingasimplyrestoresthesaved.Thisimplementationcanproduceunexpectedresultswhenmultiplesaredoneonthesamelistcell,andthenundoneoutoforder.Forexample,iftheusertypes,followedby,thenundoesbotheventsbyundoingthemostrecenteventrst,thenundoingtheolderevent,willberestoredtoitsstatebeforeeitheroperated.Howeveriftheuserundoestherstevent,thesecondevent,willbe,sincethisiswhatwasinofbeforewasexecuted.Similarly,iftheusertypes,followedby,undoingjustwillremovebothandfrom.Theprobleminbothcasesisthatthetwooperationsarenot``independent.''Ingeneral,operationsarealwaysindependentiftheyaectdierentlistsordierentsublistsofthesamelist.Undoinginreverseorderofexecution,orundoingindependentoperations,isalwaysguaranteedtodothe``right''thing.However,undoingdependentoperationsoutofordermaynotalwayshavethepredictedeect.Propertylistoperations,(i.e.,,and)arehandledspecially,sothatoperationsthataectdierentpropertiesonthesamepropertylistarealwaysindependent.Forexample,iftheusertypesthen,thenundoestherstevent,thepropertywillremain,eventhoughitmaynothavebeenonthepropertylistofatthetimethersteventwasexecuted.8.5.2SAVESETTyped-insaremadeundoablebysubstitutingacallto.ismadeundoablebysubstituting,andby,bothofwhichareimplementedintermsof.Inadditiontosavingenoughinformationonthehistorylisttoenableundoing,operatesinamanneranalogousto(page11.18)whenitresetsatoplevelvalue:whenitchangesatoplevelbindingfromavalueotherthantoanewvaluethatisnottotheoldone,savestheoldvalueofthevariablebeingsetonthevariable'spropertylistundertheproperty,andprintsthemessage.Theoldvaluecanberestoredviathefunction,whichalsosavesthecurrentvalue(butdoesnotprintamessage).Thuscanbeusedtoipbackandforthbetweentwovalues.Ofcourse,canbeusedaslongastheeventcontainingthiscalltoisstillactive.Notehoweverthattheoldvaluewillremainonthepropertylist,andthereforeberecoverablevia,evenaftertheoriginaleventhasbeenforgotten.andareimplementedviacallsto.Thusoldvalueswillbesavedandmessagesprintedforanyvariablesthatareresetastheresultofloadingale.Fortoplevelvariables,alsoaddsthevariabletotheappropriatespellinglist,therebynoticing8.23/RPLACACAR/RPLACACAR/RPLACA(RPLACAFOO1)(RPLACAFOO2)FOORPLACAthen(CARFOO)1CARFOO(RPLACAFOO2)(NCONC1FOO1)(NCONC1FOO2)(NCONC1FOO1)12FOOPUTPROPADDPROPREMPROP(PUTPROP'FOO'BAR1)(PUTPROP'FOO'BAZ2)BAZFOOSETSAVESETSETQSAVESETQSETQQSAVESETQQSAVESETSAVESETSAVEDEFNOBINDEQUALSAVESETVALUE(RESET)UNSETUNSETUNDOSAVESETUNSETRPAQRPAQQSAVESETSAVESETVARIABLE|ïb'î·î!= î-šxï\:î ìîn îžî× î!®î#‹î'kî-žî1–î3´î7Øî=ÚîDEîF™ïZ”î ìî îîD î‘î®î!¾î#dî%Kî&lî)q î0î3©î6wî9fî<�î=¢î@¦îD:îG¢ïXïî ìî ±î¥îOîÞî5î"î±î ³î#eî$Ãî&¯î+î,­î1Oî6'î9ˆ îCîD®îFÜïWIî ìîQî@îÉî î=îÇ î%©î(1î.5 |ïRäî ìîiîñîÈîtxïNîzî îCîfî"Ãî%iî'ðî,¦î/ƒî2 î4mî7î:î;¦î=|î?”îE'îHïLÚî ìî§î³î¥î •î%2î*iî,÷î3tî4€î7É îAÏîD‰ïK4î ì îîOîëî$+î%î'Yî*³î,¢î.éî2Nî4tî7Cî9âî<ðîAÕîD3îEÕïIŽî ìî ®î›îî‹îœî) î*î/Àî=—î>“îAÐîF¤ïGèî ìî,î0î¤î îpî›î#Wî&}î)«î/î1‡î5"îÝîA@îEÔïD�îîÒî®î¤î(îÜî \î#Ëî&‰î+iî0TîAîCÏïB÷î ì î î„îçîâî&;î'î,Áî:ƒî;eî@ÓïAQî‚î2îîÁîàî%Ðî&³î)�î/î0Êî4 î7‚î8ôî;Çî>,î@Ý îGŒï?¬î ìî Zî#îíî î#³î&î*] î2Aî3œî6¥î:Sî?ÙîB•îDSï>î ìîÎî™î î–îŽîaî!!î%áî)¦î+p î2î3äî9a îA[ îHsï<`î ìîA îBîäîÞî0îÓî#äî* î/hî6 î<¹î?!î@ÎîDtîGjï:ºî ìîLî�îîîýï7µî ìîpî� îxî!Nî(Wî0Ñî1²î3çî9 î>àî@†îC5 ï6î ìî ¯îYîÛ îEîAî –î$î)–î+Éî.î2k î:Óî=tîC:îD‘îFæï4jî ìîæî4Îî5Óî9î=ðî@mîCNîG€ï2Äî ôî‰î1î*îmî"î#oî&pî(âî,$î/}î1�î3Ýî9rî;¬î@kîBîD^îG€ï1î ìî ¬î^î|ï,ºî ìîixï(Uî ìî,î¡îëîî~î Äî# î*¨î,î.ßî6°î;ñî=žîA�îGãï&¯î ì î\î î!³î+�î,Ôî0aî2lî6Éî9n îB îD îH&ï% îÍï"î ìî Æî=î÷î8î* î#ºî%Ìî(6î,Ðî/î0Óî5AîA…îFûîH´ï ^î ìîîîQî]î!î%'î(Õî*'î-ìî/î1‚î4Áî8ßî<Žî=àîCîD*îFšï¹î ìîî�îÏî�î@î$ î%äî'$î*'î-äî0Çî2Iî9¢î;fî=Úî@Yïî ìî aî®îîœîDî‘î³î"kî$vî&jî(¸ î.µî4;î6gî:Vî<£îF\îG(ïmî ìî áîLî"cî#‘î&tî(èî,›î/1î1-î6‚î8Ëî;5îDêîEÓïÇî ìî Çî]îÌî¢îYîbî!¡î$%î'›î(Õî/Wî7¬î:FîÉïB÷îxî!1î$�î.Àî5yî8ÕîCwïAQî ìî Hî^î}î#Kï7µîlî"î*ðï4jî �î-î`î”î#)î*¹î.íî3 ï2Äî ìî=cï(Uîî0Îî7Îï&¯î£î¨î$ï% î ìï"î;ï ^îûï¹îzî4ÓîCwïîB)ïmî«îXî@·ïÇî2ãïîÃî7.ïwîA™ïÌî ìî­î'yï !îj ÿ} àL`m$Âxïmî‚î0} ,`m$ÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿUNDONLSETQandRESETUNDOvariablessetinlesviaor,aswellasthosesetviatype-in.[Function]Anundoable.scansthestacklookingforthelastbindingof,setsto,andreturns.Ifthebindingchangedwasatoplevelbinding,isaddedtothespellinglist(seepage15.14).Furthermore,iftheoldvaluewasnot,andwasalsonottothenewvalue,callsthelepackagetoupdatethenecessarylerecords.Then,ifisnotequalto,prints,andsavestheoldvalueonthepropertylistof,undertheproperty.If=,operatesasaboveexceptthatitalwaysuses'stop-levelvaluecell.Whenis,andisandtheoldvaluewasnot,simplystoresonthepropertylistofundertheproperty,andreturns.Thisoptionisusedforloadingleswithoutdisturbingthecurrentvalueofvariables(seepage5.9).If=,savestheoldvalue,butdoesnotprintthemessage.Thisoptionisusedby.If=,doessavetheoldvalueonthepropertylist,nordoesitaddto.However,thecalltoisstillundoable.Thisoptionisusedby.If=,isundoableonlyifthebindingbeingchangedisatop-levelbinding,i.e.thissayswhenresettingavariablethathasbeenrebound,don'tbothertomakeitundoable.Thisoptionisusedby,,and.[Function]Ifdoesnotcontainaproperty,generatesanerror.Otherwisecallswith,thepropertyvalue,=,and=.8.5.3UNDONLSETQandRESETUNDOThefunctionprovidesalimitedformofbacktracking:ifanerroroccursunderthe,allundoablesideeectsexecutedundertheareundone.,usedinconjunctionwithand(page9.19),providesamoregeneralundocapabilitywheretheusercanspecifythatthesideeectsbeundoneafterthespeciedcomputationnishes,isabortedbyanerror,orbyacontrol-D.[NLambdaFunction]Annlambdafunctionsimilarto(page9.15).evaluates,andifnoerroroccursduringtheevaluation,returnsandpassestheundoinformationfrom(ifany)upwards.Ifanerrordoesoccur,thereturns,andanyundoablechangesmadeduringtheevaluationofareundone.Anyundoinformationisstoreddirectlyonthehistoryevent(ifis8.24RPAQRPAQQ(SAVESET)SETSAVESETSPELLINGS3NOBINDEQUALSAVESETDFNFLGTSAVESET(RESET)VALUETSAVESETTDFNFLGALLPROPNOBINDSAVESETVALUENOPRINTSAVESETUNSETNOSAVESAVESETnotSPELLINGS3SAVESET/SETNOSTACKUNDOSAVESETRPAQRPAQQADDTOVAR(UNSET)VALUEUNSETUNSETSAVESETTNOPRINTUNDONLSETQUNDONLSETQUNDONLSETQRESETUNDORESETLSTRESETSAVE(UNDONLSETQ)NLSETQUNDONLSETQ(LIST(EVAL))UNDONLSETQNILLISPXHISTNAMEVALUETOPFLGFLGNAMENAMEVALUEVALUENAMENAMENAMETOPFLGNAMETOPFLGVALUENAMEVALUEFLGFLGNAMEFLGNAMENAMENAMETOPFLGFLGUNDOFORM_UNDOFORMUNDOFORMUNDOFORMUNDOFORM|ïb'î‰ î)/î+Íxï\:î ìî¡î¼îiî>îZî"Oî#+î$Øî'Ãî)oî- î/&î1aî4cïY5îC5 ïW�î¦îîî"mî)›î-"î/uî2Üî7Áî9óî»îCÂîIïUéî¦îZî#ëî$Æî'{î0ïRäî¦î&îƒî ”î%ýî(¥î)Îî,@î/‚î8ÿî:iî>ˆî@5îB‘îG¡ïQ>î ¬î#‘î&ðî+× î4nî5éî8aî:ãî>¥îAiîIïO™î¦î�îlî jî'ýî)Þî,oî/Žî:gî=¨î@9îB¿îH0ïMóî¦îKî¿î$äî'Lî,âî0òî8 î9Žî<î?ëîB…ïLMî¦î&î'î)ýî-¯î0:î2Ïî6£î8Õî;_îA"îC‹îIïJ§î¦î¥îî'ÌïG¢î¦îWî �î(Cî-æî/Íî4î8Œî;’î=!îA¼îH}ïEüî¦îîmî!/î$Žî.Tî0±î1©î:$îB,îDüîGuïDWî¦î.îºî%î,î0lî8tî:[î<šîBîD/ïB±î¦î’îÝî'“î(\î*ÿî3~î4Gî7Kî;�î<çî@ îB5îGïA î¦î­ î#5î%’î*Wî-þî/µî5jî85î;xï>î¦î”î"Õî*î-˜î/ôî2[î6Xî8Öî<î>sîA×îD3ï<`î¦î¾îî î#¸î)åï9[î¦î×î"Aî*î0î3\î5ûî8¤î<�î>ÓîArîGJï7µî¦îRî¢îî&*î0aî1Òî8,î:­î=YîE±îG?ï6î¦î-î!Eî%›î'î*>î/•ï3 î¦îrî&î- î.Qî41î7$î8`î:šî?ˆîC,îHsï1eî¦îÐî8î|î#æî&Oî(ïî+Ðî/ƒî5î68î;jî>7î@«îDï/¿î¦îkî î!àî%Äî'Mî.nî1¹î6Bî7àî;Mî@ÖîFîG(ï.î_ï+îC5 ï)nî¦îî 7î"™î$´î'cî({î23î7¥î=—î?uî@žîCaï'Èî2î%Kî+Èî,xî.©î4î<ãî?î?ÉîDÁîL|ï#dî ìîi îî®xïÿî ìî îî!×î#Jî(Dî+òî-õ î7 î8·î:ðî>ªîC6îG€ïYîSîîûîíî±î!Öî'|î+jî6�î8ÑîEÙîF¤ï³î ìî ² îFîÏî(Ìî,¢î0~î6"î7eî;î?÷îC¢ ïî ìî'î«îÈîxî7î*î ®î#«î(î*î/?î2Ÿî5#î:ë îCîHsïhî ìîóîíîÛî¢îeî_îˆî +ïcî<ªîC˜ï½î¦î4î î%Íî*Šî2?î68îCûïîÀî£î"_î#Åî%Ñî)Gî-�î2î4h î;eïqî Õî#mî'oî)¯î-# î4‰î?PîA îDïÌî¦î,î î”î!Çî%âî15î8nî9Oî< î>­îD¶ï &î¦îcîÏî", î(Éî2î4oï !î¦îËî€ î&'î'µî+ùî1î36î5·î:iî>>îHsïî(o"ÿ}Ä`m$„xï\:îyîïY5î ìî"ôïW�îèî#?ïQ>î¦ îC÷ïO™î#î3ÎïMóî2hîA®îCwïLMî¼î ûïJ§î#˜ïG¢î¶î!£ïEüî/Úî4zî;ªïDWî î%×ïB±î#`ï>îôî#°ï<`î%²ï9[î7î#_{î-vxï7µî'ú î?(ï6î,8ï3 îÑ î&Èï/¿î=zîAæï.î¦ï+î ìî^ï)nî.î2þï'Èî¦îî>CîF ïÿîÌ ïYî ì î-¶ î>Iï³îxî žïcî ì î%ï½î,tî:Ô ïî@îE&ïqîÀïÌî(E î5éï !î@;ÿ}Äp`m$ºxïY5î{îìî›î1î°î¾î †î" ïW�îEpïUéîEî î µî"Lî,*î,Øî.oïRäî4ëïLMî”îEpïG¢îaînîDíïEüî(¿î,ÌïDWî4+î4Ùî6pîEÈïB±î/šî0Iî1ßï>î&î¬ï9[îiîïï7µî!òï3 îî‰ï+îÍï)nîï'Èî(7î7íî;ûîBRîCØïcîî@îúïî¦îåïqî¦îåî7Ðî<ï &î*�î.À"ÿÿ}4œ`m$œÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿTHEPROGRAMMER'SASSISTANTnot),sothatiftheusercontrol-D'soutofthe,theeventisstillundoable.willoperatecorrectlyifisorhasbeenexceededforthisevent,orisexceededwhileunderthescopeofthe.Note:Cautionmustbeexercisedinusingcoroutinesorothernon-standardmeansofexitingwhileunderan.Seediscussioninpage9.19.[Function]Foruseinconjunctionwith(page9.19).initializesthesavingofundoinformationandreturnsavaluewhichwhengivenbacktoundoestheinterveningsideeects.Forexample,willundothesideeectsofonnormalexit,orifanerroroccursoracontrol-Distyped.If=,stopsaccumulatingundoinformationitissavingon.Notethatthishasnobearingonthesavingofundoinformationonhigher's,oronbeingabletoundotheentireevent.Forexample,wouldcausetheadvicetobeundone,butanyofthesideeectsin.8.6FORMATANDUSEOFTHEHISTORYLISTThesystemcurrentlyusesthreehistorylists,forthetop-levelInterlispexecutive,fortheeditors,andforarchivingevents(seepage8.13).Allhistorylistshavethesameformat,usethesamefunctions,,forrecordingevents,andusethesamesetoffunctionsforimplementingcommandsthatrefertothehistorylist,e.g.,,,,etc.Eachhistorylistisalistoftheformq,whereisthelistofeventswiththemostrecenteventrst,qistheeventnumberforthemostrecenteventon,isthesizeofthetime-slice(below),i.e.,themaximumlengthof,andisthehighestpossibleeventnumber.andarebothinitializedto.Settingortodisablesallhistoryfeatures,soandactlikeagsaswellasrepositoriesofevents.Eachhistorylisthasamaximumlength,calledits``time-slice.''Asneweventsoccur,existingeventsareaged,andtheoldesteventsare``forgotten.''Foreciency,thestorageusedtorepresenttheforgotteneventisreusedintherepresentationofthenewevent,sothehistorylistisactuallyaringbuer.The8.25NILUNDONLSETQUNDONLSETQ#UNDOSAVESUNDONLSETQUNDONLSETQ(RESETUNDO)RESETLST(RESETUNDO)RESETUNDO(RESETLST(RESETSAVE(RESETUNDO)).)TRESETUNDORESETUNDO(RESETLST(SETQFOO(RESETUNDO))(RESETSAVENIL(LIST'RESETUNDOFOO))(ADVISE)(RESETUNDOFOOT).)notLISPXHISTORYEDITHISTORYARCHIVELSTHISTORYSAVEHISTORYFINDPRINTHISTORYUNDOSAVE()LISPXHISTORYEDITHISTORY(NIL0100100)LISPXHISTORYEDITHISTORYNILLISPXHISTORYEDITHISTORYXSTOPFLGFORMSFORMSSTOPFLGXFORMSFORMSLEVENTSIZEMODLEVENTLSIZELMOD|ïb'î·î!= î-šxï\:î¦î˜îèî¤î"jî#Ãî&î) î-®î0&î2“î4Dî?î?ØîB/îEÚîG?ïZ”î¦ïW�î ¡î#Zî(Pî.î8kî9åî;·î>:îA¤îG¢ïUéî¦îEîOî î!{î'iî+î/î1vî5>î6õîA¹ïRäî¦î‘î Ìî$/î&î,î-±î1U î7ðî9±î=Jî@ îE�ïQ>î¦î^îàî!‘î%�î/åî0Àî3T î9Ðî;|î>ÀïN9îC5 ïL“î¦î‚î'î î&³î1mî5\îCÐ ïJîî¦îXîáî íî$Ó î,ªî/´î4·î64î:/î>ŽîB”îF™ïIHî¦î!Åî&®î): î0 î3¤î8ëî;ÃïG¢î31î5òî9šî<î>ýîCKïEüî¦î«îcî!dî#'î$†î&uî)äî.%î/çî1î5³î7Uî8¿ïB÷î¦îÄî úî)ìî-h î5Êî9\ î@áîB7îC£îGÙïAQî~îˆî*î $î"òî%“î'Æî,åî/î1¤î6î7íî;­ îC^îE’ï?¬î6î îî"°î$´î(|î+rî-î0°î3 î6õï<¦î¦îO}ï4°î äî!€î"xï._î¦îÑî‚î!àî& î'Íî)¼î/î3ïî6�î8Dî:¢î=wîA­îG˜|ï'<î ìîiî)îÄîî›î#!î*.xï"×î ìî îßî îUî.î$î2|î5 î7»î:#î=ºîC‚ ï!1îïîkî î5î*Xî,Ôî3 î7„î:�î>îB¾îEPïŒî ìî Îî4î´îQîKîàî aî#ý î3·î4¶î7î=ZîBîDêîG€ïæî ìî ”îÝîÃîéîS î#8î*Eî-?î0»î2—î5"î9Þî<«îIï@îî•îqï;î ìî  îqîñîŸî îŒî‡î)}î)lxî2hî3™î9€î;/î=Ðî@PîBLîFÅï•î ìî �î/î•î�}î "xî"î#Âî&fî*]î/Ëî2Mî4ðî8�î<öî@íîCÿîHsïïî ìî �îzîuîî.î~î &î# î%­î,mî0æî3©î4Èî;Sî=î?¢îD ïJî ìîîñî-:î/õî3˜ î:QîIï¤î ìî±î%½î*ûî0fî2˜î7iî=>ïþî ìîbî”î=î_î î"÷î$¤ î+ðî-§ï ùî ìî bîõî6î¯îÞî_î"õî&îî(Íî,”î0æî2ûî5ìî:(î>DîCPîGŒï Sî ìî ¦îtîëîîQî» î%Öî(˜î/î1‰î6Pî9¢î;hîAzîCðï ­î ìî °î.î£îbîÓ î Õî"Ÿî%î(î,0î.î0uî5î7eî8âî>î?CîB6îGïî(oÿ}l`m$4xï\:îî6› ïW�î¦ î/p ïUéî9R ïQ>î'~ ïN9î ì î}ïL“î)þî9Û ïIHî‚îAÉïG¢î¦ î ä î+Ðî1¾ïB÷î #î!×ï?¬î¦ï9¡î¦ï7üî,î6î"’ ï6Vî, î#jî&Æî+Ð î5ï4°î,î"~ï3 î, î#jî&Æï1eî,î {ï._î1Žxï"×î'� ï!1î ì î!+ ïŒî*y ïæî?à ï@î ì îÝï;î"Ñî1�ïJîî î# îîEîEÙïB÷î(îÛïAQî¦ï1eîÚî™ï._îCYîDï;î#¨î%Fî+hî.Çî7ñï•îüîC8îE!ïïî2âî7Á}ø@`m$Jÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿ3434FormatandUseoftheHistoryListtime-sliceofahistorylistcanbechangedwiththefunction,page8.18.Largertime-slicesenablelonger``memoryspans,''buttieupcorrespondinglygreateramountsofstorage.Sincetheuserseldomneedsreally``ancienthistory,''andafacilityisprovidedforsavingandrememberingselectedevents(seeand,page8.12),arelativelysmalltime-slicesuchas30eventsismorethanadequate,althoughsomeusersprefertosetthetime-sliceaslargeas100events.If(page8.18)issetto,an``eventnumber''willbeprintedbeforeeachprompt.Morerecenteventshavehighernumbers.Whentheeventnumberofthecurrenteventis100,thenexteventwillbegivennumber1.Ifthetime-sliceisgreaterthan100,the``roll-over''occursatthenexthighesthundred,sothatatnotimewilltwoeventseverhavethesameeventnumber.Forexample,ifthetime-sliceis150,eventnumber1willfolloweventnumber200.Eachindividualeventonisalistoftheform.isthepromptcharacterforthisevent,e.g.,,,,etc.isthevalueoftheevent,andisinitializedtobell.isapropertylistusedtoassociateotherinformationwiththeevent(describedbelow).istheinputsequencefortheevent.Normally,thisisjusttheinputthattheusertyped-in.Foranformatinput,thisisalistconsistingoftwoexpressions;foranformatinput,thisisalistofjustoneexpression;foraninputenteredaslistofatoms,issimplythatlist.Forexample,UserInputis:Iftheusertypesinaprogrammer'sassistantcommandthat``unreads''andreexecutesotherevents(,,,etc.),containsa``sequence''oftheinputsfromtheredoneevents.Specically,theeldsfromthespeciedeventsareconcatenatedintoasinglelist,seperatedbyspecialmarkerscalled``pseudo-carriagereturns,''whichprintoutasthestring.Whentheresultofthisconcatenationis``reread,''thepseudo-carriage-returnsaretreatedbyandexactlyasrealcarriagereturns,i.e.,theyservetodistinguishbetweenandformatsoninputsto,andtodelimitlinecommandstotheeditor.Thesameconventionisusedforrepresentingmultipleinputswhenacommandinvolvessequentialsubstitutions.Forexample,iftheusertypesandthen,theinputsequencethatwillbeconstructedis,whichistheresultofsubstitutingforinconcatenatedwiththeresultofsubstitutingforin.Notethatonceamultipleinputhasbeenenteredastheinputportionofanewevent,thateventcanbetreatedexactlythesameasoneresultingfromtype-in.Inotherwords,nospecialcheckshavetobemadewhenanevent,toseeifitissimpleormultiple.ThisimplementationpermitsanOn,thiseldisusedtosavethesideeectsofeachcommand.Seepage8.35.Thevalueofthevariableisusedtorepresentapseudo-carriagereturn.Thisisinitiallythestring.Notethatthefunctionsthatrecognizepseudo-carriagereturnscomparethemtousing,sothismarkerwillneverbeconfusedwithastringthatwastypedinbytheuser.8.26CHANGESLICENAMERETRIEVEPROMPT#FLGT(.)_:*APPLYEVALPLUS[11](PLUS(11))(PLUS11)((PLUS11))PLUS11cr(PLUS11)REDOUSE""LISPXREADREADLINEAPPLYEVALLISPXUSEGETD(FOO)USEFIEFUMFORFOO(GETD(FIE)""GETD(FUM))FIEFOO(GETD(FOO))FUMFOO(GETD(FOO))referencingEDITHISTORYHISTSTR0""HISTSTR0EQLINPUTIDVALUEPROPSIDVALUEPROPSINPUTINPUTINPUTINPUTINPUTyïGÅîA€ï*Pî1ïï„î ìï Iî ìÿÿÿ}`m$|ïb'îØî#±î&Oî)î*Åî-!î2xï\:î ìî îî´îÔîXîŠî îïî#Pî&_î(³î7\î8/î;iî>ÓîC5îFMïZ”î ìîjîÇîüîäî €î"—î$Åî.ãî3˜î9@î;î@�îDlîFæïXïî ìîÍîÒîÁî^ î"%î%î&Sî*þî,‘î2…î4éî9Fî<# îDµïWIî ìîîÇî3î î"Oî&î'0 î-î0³î3Ëî6Öî:î;­î=�îAÃîC,îFºïU£î ìîîÓîbîÝî ñî"žî$¹î'î*.î-:î.æî2Jî3÷î6ŠïRžî ìî{îIî¾î;îgî!ýî"ëî$ìî)_î/Hî2î4î8åî=Bî@‚îF!ïPøî ìîîQîœîïî 6î$Rî&·î*pî/ î1_î3Äî8‘îî)lî,Üî/fî3 î6ëî=î?ðîEôîG€ïLî ìî îîzîeîî>îrî!î%Oî)î.(ïIî ìî E îªîEîhî¼îÎîóî ”î"Úî8èî;�î<äî?+îCúïG\î ìî 7îæîîÎî•î]îMî"ªî$%î&’î*Iî,î.~î2œî5aî6Ü î=;î>øîG:îH´ïE¶î ìî�î½îöî£îCîÞ î'aî*yî,Öî0ˆ î7&ïB±î.î”îìî�înî¤îýî$0î*«î-Fî.«î1Fî3Ÿî7Bî: î8îBHîDôîFkîG¡ï?eî ìî £îBîë îîQî@îçî$Øî&„î(Àî*wî3î4~î8éî;µî>tîAï;5î ìî :î.ßï.Øî ìî ]î ¬î“îî³îÍ îtî$Äî+î-Ì î4Dî6ê î=yîAîE,îIï-2î qî Éî ½îˆîùî5 î#‹î%Uî'Æî,î/{î1ìî6—î;‰ îC&ï+Œî ìî ©î/î®îqîÈî ; î(’î+‰î,Ôî0Ýî3›î9×î;òî@‹îEéï)çî ìîJîO îëîÓî!î#hî$óî'/î1˜î3Hî7;î9vî=î>²îA0 ï(Aî ìî < îîaîî,î!Àî#÷î(vî2Oî< î@ŠîBîD¶ï&›î ìîîÙîî¯î~ î!Šî+ïî2Éî7åî: î>YîD[îEYîH0ï$õî ìîšîNî-îÚî8ï!ðî ìî ÅîD îSîÁîÿî> î&î+Œî/»î3qî7«î> îCa ï Jî ì îbî îÖî6î“î!Šî-.î/ãîBýîCØîF6ï¥î ìîãîÂîî‚ îåî;Gî<<î@ZîAØîDJîH&ïÿî ì îFîxî%ª î-Öî0äî38î6öî8¤ îBÿîH0ïYîïTî ìî zîaî¿îî’îTî âî$Wî)bî+*î-¢î1dî6Zî8,î9pîëîD•îH0ï Úî'îzîTîî²î iî#î&Öî(Äî.�î1¥î2Ìî6�î9gî<î?áîAŒîC„îEàïî(o"ÿÿÿ} ì`m$žxï\:î. ïWIîèîzïRžî ~ î!&ïIî&(î2fî8ïG\î÷î¾î†ïA î ìî5Æï8=î ìîÍî*˜î/£î2(ï51î ìîöî¤î*˜î0zî2(ï2,î ìîîÍzï2•îÓîTxï2,î*˜î/£î1Qï.ØîE¥ï-2î ìï)çî*ßï(Aî*Vî4êï&›î'î.Æî@(ï!ðî4žï Jî%î3î6bî9¿î=î@wï¥î dî%nî*yî2 î6<ïÿîGîxîî %î?ÿîE1ïYî ìîö{ïî‹ xïî Ü ï àîï ]îEï Úî ìîÌÿ} ð`m$ºxïIî3î&ÿî+™î-«î.Yî/ðî4î5»î9çïG\î2îàî wîB©îDPïB±î ìï?eî.Íï;5î*˜ï-2î.îE–î ìïuþ=$ ÿ} 8`m$Bÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿ55THEPROGRAMMER'SASSISTANTeventspecicationtorefertoasinglesimpleevent,ortoseveralevents,ortoasingleeventoriginallyconstructedfromseveralevents(whichmaythemselveshavebeenmultipleinputevents,etc.)withouthavingtotreateachcaseseparately.,,,,andcommands,i.e.,thosecommandsthatreexecutepreviousevents,arenotstoredasinputs,becausetheinputportionfortheseeventsaretheexpressionstobe``reread''.Thehistorycommands,,,,andrecordedasinputs,andprintsthemexactlyastheyweretyped.isapropertylistoftheform,thatcanbeusedtoassociatearbitraryinformationwithaparticularevent.Currently,thefollowingpropertiesareusedbytheprogrammer'sassistant:Alistofthesideeectsoftheevent.See,page8.33.Usedbythecommandwhenspecialformattingisrequired,forexample,whenprintingeventscorrespondingtothebreakcommands,,,and.Theandpropertiesareusedtosavetheargumentsandexpressionforthecorrespondinghistorycommand.andareusedtosaveinformationwhenerrorsoccurforsubsequentusebythecommand.Wheneveranerroroccurs,theoenderisautomaticallysavedonthatevent'sentryinthehistorylist,undertheproperty.Usedtorecordcallsto,,etc.(seepage8.20).Thepropertyonaneventcausestheeventtobeautomaticallyarchivedwhenit``fallsotheend''ofthehistorylist(seepage8.13).Theandpropertiesareusedforcommandsthatreexecutepreviousevents,i.e.,,,,,and.Thevalueofthepropertyisthehistorycommandthattheuseractuallytyped,e.g.,.Thisisusedbythecommandwhenprintingtheevent.Thevalueofthepropertyisastructurecontainingthesideeects,etc.fortheindividualinputsbeingreexecuted.Thisstructureisdescribedbelow.Whenisgivenaninput,itcalls(page8.32)torecordtheinputinanewevent.Normally,createsandreturnsanewevent.bindsthevariabletothevalueof,sothatwhentheoperationhascompleted,knowswheretostorethevalue.Notethatbythetimeitcompletes,theoperationmaynolongercorrespondtothemostrecenteventonthehistorylist.Forexample,allinputstypedtoalowerbreakwillappearlaterontheThecommands,,,,andareexecutedimmediately,andarenotrecordedonthehistorylist.8.27REDORETRYUSE...FIXUNDONAMERETRIEVEBEFOREAFTERare??()SIDEUNDOSAVE*PRINT*??OKGOEVAL?=USE-ARGS...ARGSUSE-ARGS...ARGS*ERROR**CONTEXT**ERROR**CONTEXT*$*ERROR**LISPXPRINT*LISPXPRINTLISPXPRIN1*ARCHIVE**ARCHIVE**GROUP**HISTORY**HISTORY**GROUP*REDORETRYUSE...FIX*HISTORY*REDOFROMF??*GROUP*LISPXHISTORYSAVEHISTORYSAVELISPXLISPXHISTHISTORYSAVELISPX??FORGETTYPE-AHEAD$BUFSARCHIVEPROPSPROPERTY1VALUE1PROPERTY2VALUE2yï×îHÅï Àî ì!}`m$|ïb'î·î!= î-šxï\:î ìî ² îŽîPî³îuî³î!¯î&%î*Iî, î-âî2„î7+î9î:Äî<î?ÿîCÅ ïZ”î ì îUîÓîzîÊî"gî%ƒ î,‡î/åî3Zî8èî<ªîAYîDÖïXïî ìîcîî>îlîX ïUéî HîaîÍî8î!îóî'6î)Õî-{î4dî7:î=^îBòîGŒïTDî ìî iî’îIîÙîîgî"î&ýî)Cî,Óî1î3nî5Ö î=î>Íî@Æ îGïRžî ìîxî³îëî$î*eî+@î4ýî:³î<_î@âîEôïPøî ìî rî î·îÄîïMóîqîáîîªîëî§î }î;ýî<™î=6xî>nî?QîB"îD°îF¤ïLMî ìî —î5îÔ îUî!lî"“ î(Áî,õ î3†î5áî;ì îB\îD¬îGãïJ§î ìî I î ïG¢î¦î1îmî$î‚î"Wî&�î(Dî*¡î.Öî8#î8þî î6ôî8Wî>3î@fîF+ïB÷î¦îãî! î*î+´î.î1ãî:pî<úîA2îBîFqï>Lî¦î"4î+Ê î2xî5î8~î:iî=§î@BîG(ï<¦î¦ îXî ”î"ñ î+ßî0mï7üî3î)Jî+Ãî/#î0øî4 î;Êî?£îC½îG¢ï6Vî¦ îòî!Žî#±î'¼î/î5Òî7êî;‚î@OîBÕîHsï4°î¦ î *î$ î&&î) î-°î1Xî3î5“î:9î<ëîAï3 î¦ï0î¦î7îãî!/î$;î.Oî7’î8mî;"î=ìîA/ï-î¦îVî'´î)“î+\î.èî2øî50î8¼î:Dî< îDRï+Zî¦îXî­î Gî"bî$¿î(#î)Ûî,8î0Åî3î5Ëî9ï&¯î¦î"›î+À î27î4Žî7Íî:î@òîCÃï% î¦î’î"™î)î.sî26î5øî7Nî<êî>'îA^îEfîG€ï#dîßî%šî'*î)¬î.^î4ßî7Ðî:Rî=nîB¥îFþï!¾î äî!Ïî$öî&pî)¹î+Ãî0½î7(î:éî@6îB£îGï î¦îZî î%þî+¡î-î.Pî4 î:Öî=Aî@%îDÄîG¢ïrî¦î î î$«î(r î/Õî2ìî8£î:î@3ïmî ìîÅî7îîîäîìîHî,$î/çî3Rî5î9Xî;¼î?jîAîBNîE@ïÇî ìînîî!àî&¬î'òî*úî4\î86î:°îH0ï"î ìî hî-îAî<îî!î$Øî'Tî-—î0) î<&î@…îD¸îF„ï|î ìî vî&îÆî¿îåîoî¿î!A î(7î*Áî1î4?î6qî:Ý îB îCúîF„ïÖî ìîîÔîäîLîåîÆî {î&Tî(Nî,…î0cî2î3Pî7"î;î=´îBBîEpîG€ï Vî €î aîúîïî%=î*Xî+Cî4tî6Ñî<” îDËîGŒï Ôî ìî _îîîwîïî(o"}”`m$ˆxïUéî ìî.îGî³îàïRžîWî�îÆî%Zî-õ{î2¬xîC–ïMóî sî=—ïG¢î ìî1jïD�î ìîvïB÷î8Âî;Lî=ÖîDÂï?òî ìî Hï>Lî ìî¹îî%&ï9¡î ìï7üî ìî¦î!ï6Vî&8ï4°îCwï0î ì î%è î/+ ï-î ìîÆï(Uî ìï&¯î ìî�î%Uï% î%¥î*?î/°î3sî:eï#dî¦ï!¾î¦îÚî î.0ï î‹ïmîî"[ ïÇî� î/‡î?ÿï"î î7Pï VîLîäîÖî! î&%î. }˜p`m$¸xïMóî ìî “î!Jî"ñî&7ïM‰î'çïMóî)Sî*î+˜ïM‰î-7ïMóî.¤î0Kî3‘ïM‰î5AïMóî6­î7[î8òïM‰î:‘î ìï ±þ=$ ÿÿÿ} $`m$Dÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿ66Programmer'sAssistantFunctionshistorylist.Afterbinding,executestheinput,storesitsvalueinthevalueeldoftheevent,printsthevalue,andreturns.Whentheinputisa,,,,orcommand,theprocedureissimilar,exceptthattheeventisalsogivenaproperty,initially,andaproperty,andsimplyunreadstheinputandreturns.Whentheinputis``reread'',itis,not,thatnoticesthisfact,andndstheeventfromwhichtheinputoriginallycame.thenaddsanewentrytothepropertyforthisevent,andreturnsthisentryasthe``newevent.''thenproceedsexactlyaswhenitsinputwastypeddirectly,i.e.,itbindstothevalueof,executestheinput,storesthevalueinof,printsthevalue,andreturns.Infact,nevernoticeswhetheritisworkingonfreshlytypedinput,orinputthatwasreread.Similarly,willstoreundoinformationonthesameasalways,anddoesnotknoworcarethatisnottheentireevent,butoneoftheelementsoftheproperty.Thuswhentheeventisnished,itsentrywilllooklike:Inthiscase,thevalueeldoftheeventwiththepropertyisnotbeingused;insteadreturnsalistofthevaluesfromtheproperty.Similarly,operatesbycollectingthepropertiesfromeachoftheelementsoftheproperty,andthenundoingtheminreverseorder.Thisimplementationremovestheburdenfromthefunctioncallingofdistinguishingbetweennewinputandreexecutionofinputwhosehistoryentryhasalreadybeensetup.8.7PROGRAMMER'SASSISTANTFUNCTIONS[Function]istheprimaryfunctionoftheprogrammer'sassistant.takesoneuserinput,savesitonthehistorylist,evaluatesit,savesitsvalue,andprintsandreturnsit.alsointerpretesp.a.commands,,,and.Ifisalist,itisinterpretedastheinputexpression.Otherwise,calls,andusesplusthevalueofastheinputfortheevent.Ifisalistofwhichisor,callstoobtainthearguments.isthepromptcharactertoprintbeforeacceptinguserinput.Ausercancallspecifyinganypromptcharacterasexceptfor,sinceinIfcannotndtheevent,forexampleifauserprogramunreadstheinputdirectly,andnotviaahistorycommand,proceedsasthoughtheinputweretyped.8.28LISPXHISTLISPXLISPXHISTREDORETRYUSE...FIX*GROUP*NIL*HISTORY*LISPXHISTORYSAVELISPXHISTORYSAVE(.)*GROUP*LISPXLISPXHISTHISTORYSAVECADDRLISPXHISTLISPXUNDOSAVELISPXHISTLISPXHIST*GROUP*(*HISTORY**GROUP*((SIDE)(SIDE)))*GROUP*VALUEOF*GROUP*UNDOSIDE*GROUP*HISTORYSAVE(LISPX)LISPXLISPXLISPXLISPXMACROSLISPXHISTORYMACROSLISPXUSERFNLISPXREADLINEREADLINECARLAMBDANLAMBDALISPXLISPXREADLISPX*HISTORYSAVEHISTORYSAVEINPUTIDVALUEPROPSINPUTIDVALUECOMMANDINPUT1ID1VALUE1SIDE1INPUT2ID2VALUE2SIDE2LISPXXLISPXIDLISPXXMACROSLISPXXUSERFNLISPXFLGLISPXXLISPXXLISPXXLISPXIDLISPXIDyïSî; ï Çî ì!}`m$|ïb'îg î((î. xï\:î ìî‰îyî$î!Öî'‰î-î/|î3�î7}î9fî=î>ÙîAGîDýîH&ïZ”î ìî]îfîOî­î"«î%`ïW�î ìîî‰îGîÇîcîˆî"ÿî&vî'mî,eî34î5§î<:î=ºîB¯îGïUéî ìî xîYîòîìîÌî ¸î&áî.�î/šî2~î<îBBïTDî ìî~îÌîPîîúî" î&Ûî)_î-.î.¿ î4çî6bîA2îB4îIïRžî ìî ×î�îNîxîLîÆî Cî$î'—î+Áî.>î2 î8<îFºïPøî ìî Bîˆî$òî(Ÿî*jî3gî9î;rî>.îB\îE.ïORî ìî £îLîî‡î;î":î%uî+Dî/öî1»î5…î7vî;6î=øîAäîGKïM­î ìî XîWîî‘îNî*[î+Nî0Ûî3Oî7lî;`î=ÕîA“îH&ïLî{îPî1îˆî€î.î$]î&#î-Ðî1�î6 î;bî<°î>îC^îE[ïJaî ìî ½îºîzî îéî�î!S î.ºî1`î4·î8F î?ÇïH»î ìî QîÔî‰îLî î?îºî"î$Iî'>î2.î3¡î6î8‚îQ|ï(î ìîi îÇî$>xï#ªîC5 ï"î·î{î!2î&½î,Œî.�î1S î:c îFcï ^î¦îžîãî"Eî&î'¼î*î,»î1—î4�î:½î<Íî@ îBÈîG(ï¹î¦îÃî«î#Žî*ìî-ê î4çî8LîIïî&Æî'¢î3•ïî¦îFîÚî!,î#ôî%sî' î.=î0î2šî6k î> ïhî¦î!„î"yî%Gî-:î0Jî2Áî6€î?¦îAkîCáîG¢ïÂî¦î îWî$²î&%î'Uî,©î.hî2zî9‚îA.îFÑïîºî!gî%¨î( ïîäî]î Êî%¾î+°î-lî0àî5:î;Xî>]îBµîDOîGTïqî¦î` î&î(êî. î4-î;ƒî@ îC\îD„îH0ï ]î €îÓîRî1î–î#ªî%íî+iî,Ðî.î1î6‘î;Áî>&îAÖîG(ï Úî ìî ^îšîÂîOî$Äî*{î,'î0Öî34î6Ûî:)ïî(o"},`m$nxï\:îFî"ÂïZ”î IïW�îîTî zî#ñî)FïUéî#î, î3ÖîE&ïTDî7ô îDÎïRžî<Ø ïPøî�îÏî#yî,äïORîjïM­î,î! îCWïLî ìî)ïJaî'îAÉïH»î*ïGî¶ïDî ìïBkîöï?îöï=yî*î!ÿî)pï;Ôîî!ÿî)pï:.îrï7)î'§î>Ðï5ƒîÂî2^îEýï3Ýî$—ï0Øî5% ï#ªî ìî4©ï"î¦îARï¹î&î?à ïî¦î*W ïîE&ïhîÌî8PïÂî)˜î3ìî;LîBïî¦ïqîlîB…ï ]î ï Úî }0�`m$ÄxïPøîgîîîÂîYî}î!$ïDî Ãî\îoîî´ï@Åî*ï=yîØï=îšï=yîï=îBï=yî¯î]îôï=î “ï=yî&2ï=î(Ûï;ÔîØï;jîšï;Ôîï;jîBï;Ôî¯î]îôï;jî “ï;Ôî&2ï;jî(Ûï#ªîÍîõî€î  î"Xî$Æ î.Ëî3ÀïîQïhî(VïÂîßïî¦ïqî6î ìï ¸þ=$"}Àœ`m$”ÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿTHEPROGRAMMER'SASSISTANTcertaincasesmustusethevalueoftotellwhetherornotitwascalledfromtheeditor.Ifisnot,itisusedasthelistofmacros,otherwisethetoplevelvalueofthevariableisused.Ifisnot,itisusedasthe.Inthiscase,itisnotnecessarytobothsetanddeneasdescribedonpage8.20.isusedbythecommandintheeditor(seepage8.35).Notethatthehistoryisoneoftheargumentsto,i.e.,theeditormustbind(reset)tobeforecallingtocarryoutahistorycommand.willcontinuetooperateasan/functionifis.Onlythosefunctionsandcommandsthatinvolvethehistorylistwillbeaected.performsspellingcorrectionsusing,alistofitscommands,asaspellinglistwheneveritisgivenanunboundatomorundenedfunction,beforeattemptingtoevaluatetheinput.isresponsibleforrebinding,usedby(page9.10)forcomputingtheamountoftimespentinacomputation,inordertodeterminewhethertogointoabreakifandwhenanerroroccurs.[Function]Repeatedlycallsundererrorsetprotectionspecifyingand,andusing(orif=)asapromptcharacter.isexitedviathecommand,orelsewitha.[Function]Evaluates(using)thesameasthoughitweretypedinto,i.e.,theeventisrecorded,andtheevaluationismadeundoablebysubstitutingtheslashfunctionsforthecorrespondingdestructivefunctions(seepage8.22).returnsthevalueoftheform,butdoesnotprintit.Whenrecievesan``input,''itmaycomefromtheusertypingitin,oritmaybeaninputthathasbeen``unread.''handlesthesetwocasesbygettinginputswithand,describedbelow.Thesefunctionsusethevariabletostoretheexpressionsthathavebeenunread.Whenisnot,and``read''expressionsfromuntilis,oruntiltheyreadapseudo-carriagereturn(seepage8.26).Bothfunctionsreturnalistoftheexpressionsthathavebeen``read.''(Thepseudo-carriagereturnisnotincludedinthelist.)Whenis,bothandactuallyobtaintheirinputbyperforming,whereisinitiallysetto.Theusercanmake,theeditor,break,etc.dotheirreadingviaadierentinputfunctionbysimplysettingtothenameofthatfunction(oranappropriateexpression).Note:Theusershouldonlyaddexpressionstousingthefunction(page8.31),whichknowsabouttheformatof.8.29LISPXNILLISPXLISPXMACROSNILLISPXUSERFNLISPXUSERFNEnotLISPXLISPXHISTORYEDITHISTORYLISPXLISPXEVALAPPLYLISPXHISTORYNILLISPXLISPXCOMSLISPXHELPCLOCKBREAKCHECK(USEREXEC)LISPX_NILUSEREXECOKRETFROM(LISPXEVAL)EVALLISPXLISPXEVALLISPXLISPXLISPXREADREADLINEREADBUFREADBUFNILREADLINELISPXREADREADBUFREADBUFNILREADBUFNILLISPXREADREADLINE(APPLY*LISPXREADFN)LISPXREADFNREADLISPXLISPXREADFNLAMBDAREADBUFLISPXUNREADREADBUFLISPXIDLISPXXMACROSLISPXXUSERFNLISPXFLGLISPXIDLISPXXMACROSLISPXXUSERFNLISPXXMACROSLISPXXUSERFNLISPXIDLISPXIDLISPXFORMLISPXIDLISPXFORMFILE|ïb'î·î!= î-šxï\8î¦î?î$‘î( î*”î-î0Ãî7Õî9—î< îAhîCAîEÉîG4ïZ’î¦îšîþî![ïW�î¦î"ûî$Zî)Gî*î+aî,Àî/îî1�î3âî6î"î?î@öîCªîGîHsïQ<î¦îî 'î!Óî% î''î)Üî7¾î9jî?�îA“îD×ïN7îîsî"«î$¥î(]î.¸î0eî2Âî6Áî9‹î<ÎïK2î¦î'îî kî%î(ìî+£î-hî/Òî6ˆîüîDhïFAî¦î#Éî'Íî(½î,Aî/ñî5ÿî8Èî?¼îB�îG€ïD›î¦î4îoî!î#ïA–îWî"'î'1 î. î9Oî:%î;Gî=|î?-î@ÿîH0ï?ðî¦îÆîÍî î&%î'qî(Òî,zî._î49î7ªî9dî?ÍîE’ï>Jî¦ î†î 3î%’î'ïï;Eî?îŠ î$—î&³î4^î5î85îBÜîFzï9Ÿî¦îíî Îî#7î(Iî* î-:î0íî2¥î3Ú î<3î=ëîA¨îCaï7ùî¦îïîœî Šî#`î$ˆî([î)ºî,oî0!î2î5~ï4ôîC5 ï3Nî¦ îèî&Öî*êî0 î6¢ îG(ï1©î Êî!«î$eî-Cî0ãî6óî:×î;Ùî=Šî>¸îC£ ï0îãî Mî$bî&�î(úî1î1ßî3¡î6Vî9mî@xï,þîC5 ï+Xî¦î%/î,–î-î/Èî3.î4Çî9bî:£î=ÝîAœîC5îIï)²î¦îiîíî Åî"Vî(•î+qî-õ î4¹î6Jî:.î@XîBy ï( î¦î?îÔî$ î&î) î2B î9iî?žîB£îF#ï&gîºî$hî&Æî*lî,#î.�î2<î4»î7èî:[î=Àï#aî ìîéî(î0 î­î!î$5î'ôî+pî-æî0õî5Oî6¼î8àî:»î<(î?BîAJîCQîGï!¼î ìî `î» îî î#�î&;î)¬î+§î06î4cî?’îIï î ìî?îUî�î¨î"Hî$Ôî0Çî2¢î6)î8´ î@îCîFƒïpî ìîjîî¥î ºî) î4î8¤ î?÷ïÊî ìîŒîwîNî îJî Sî#fî$Šî)8î.Zî2€î5Fî8…îî*‰î- î.¥î4‹î8Žî>^î@´îE{ï.î®îZî¸îtî+î÷î%lî'§î)• î6| ï)î ìî Øî­î£îî1îæ î%î--î0Óî30îBfîF"ïƒî ìî öî6îîqîèî$‚ïî(o!ÿÿ}ˆ`m$´xï\8îÄïW�î&Âî7¾ïUçî*I ïRâî'î4ä ïQ<î-ü ïN7î'{ïK2î&}xî8BïIŒî î+B î=žïGæî$Qî; î?¬ïFAî î%HïA–î¦î1¿ï;Eî¦î,Îî: ï4ôî ìî+Hï3Nî" ï1©î/„î8Rï0î¦î/Uî:–ï,þî ì î½ï+Xî):îDÎï&gî¦ï#aîï!¼îGî7}îBHï î*3ïpî›î5î!³î+ßîCwïÊî +îñï î(îIî3î(Mïzî ìî¤ îsî#¸ î8¿ïÔî ìï.î ì î0îï)î&Èî8¤ ïƒî ÿÿÿ}ˆ”`m$ºxï\8î2�ïW�îî<î ôïRâî< ïN7î¦îœï4ôîSîÞîþî¶î"$ ï3Nî=(îCIîEï1©î¦ î(î2Hï,þî*îXîï+Xî¶î!åïzîº"} Œ`m$LÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿProgrammer'sAssistantFunctions[Function]Readsalinefromtheterminal,returningitasalist.Ifis,returns.Otherwiseitreadsexpressionsbyperforming(isinitiallysetto)untilitencounterseither:acarriage-return(typedbytheuser)thatisnotprecededbyanyspaces,e.g.,andreturnsalistterminatingina``'',inwhichcasethelistisincludedinthevalueof,e.g.,andreturns.anunmatchedrightparenthesesorrightsquarebracket,whichisnotincludedinthevalueof,e.g.,andreturns.Inthecasethatoneormorespacesprecedeacarriage-return,oralististerminatedwitha``'',willtype``''andcontinuereadingonthenextline,e.g.,andreturns.Iftheusertypesanothercarriage-returnafterthe``'',thelinewillterminate,e.g.,andreturns.Notethatcarriage-return,i.e.,thecharacter,canberedenedwith(page6.34).actuallychecksforthecharacter,whateverthatmaybe.Thesameistrueforrightparenthesisandrightbracket.Wheniscalledfrom,itoperatesdierentlyintworespects:(1)Ifthelineconsistsofasingleor,returnsinsteadof,i.e.,theorincludedintheline.Thispermitstheusertotypeor,meaningcallthefunctionwithnoarguments,asopposedto8.30(READLINE)(READPT)NILREADLINENIL(APPLY*LISPXREADFNT)LISPXREADFNREADABCcrREADLINE(ABC)]READLINEAB(CD]READLINE(AB(CD))READLINEABC]READLINE(ABC))READLINE...ABCcr...(DEF)...(XYZ]READLINE(ABC(DEF)(XYZ))...ABCcr...crREADLINE(ABC)EOLSETSYNTAXREADLINEEOLREADLINELISPX)]READLINE(NIL)NIL)]isFOO)FOO]FOOFOOcrRDTBL__|ïb'îg î((î. xï[øîC5 ïZRî¦îûîYî Bî#Üî&nî,|î2µî4?î6!î7î:ÝîDÜîIïX­îøî&Aî'1î-Âî/,î2Ý î:(î<7 ïWî$î.‡î0!î5Kî7–î<Îî=ûîAnîBó ïUaî¦}ïR\î¦xîÚîîî#Iî'•î)�î+ìî/[î2'î3‘î6î;çî=áî@îE ïLRî¦î!˜}ïILî¦xîîSî¶ î$6î& î'[î(âî*Ÿî,tî0¦î3¹î6?î8¢î:5î?þîAÒîDWîH&ïG§î_î;ïAœî¦î!˜î/…}ï>—î¦xîÏî²î!¾î% î,Zî.î1Uî5«î:Õî>Ôî@3îB›îH0ï<ñî¦îîªî&î&öï6çî¦î!˜î,(ï3âî¦î^î¦î}î!3î#Çî%tî(îî-î2î3*î8Eî<·î>dî?wîA�îBó ï2<î¦îÙîî¤î&©î)mî,•î/Êî1{î4Kî:î?îA1îC©îFÑï0–î¦ï'@î¦î!˜î9™ï$;î¦î;î­î·î"\î'wî,“î0Òî4î6�î9Åî;jî=Üî@¤îCa ï"•î¦ïåî¦î!˜î,(ïàî¦îóî™î"µî'î)Œî.§ î4Ãî7&î8ïî>×ï:î¦îjî&«î+Äî0.î2pî7æ î>*îD îFÜï”î¦îîîî hî!Òî$³î&ïî*= î1_î4î7bï�î¦î"÷î$aî(Uî/ìî0Èî2î7† î>"î?ÏîBxïŠî¦îëîŒî î Ýî%÷î'Ïî)î.™î1Rî9²îCWîH&ï äî,îî¼î!”î&Jî+ûî-·î0$î3Šî6±î;±î>îA$îBàï >î¦îÇî¥î#;î%Æî(%î0§î3Áî5Ç î<Êî>xîCïïî(o } `m$xï[øî ìîŽïZRî<“îBuîF|ïX­î¦î#¼îCwïWî¦ î!»î$– î9rïOWî¦îTîzïOÀî î‰xïLRî[î&Gî(Ìî*zïILî( ïG§î¦ïD¡î¦îTîîˆïAœî[î&Fî(Ìî*zî,ÿï<ñîbï9ìî¦îTîï6çî[î&Gî(Ìî*zï2<îÍîQî-Eï-‘î¦îTîzï-úî î‰xï+ëî¦î±î_ï*Eî¦î±î_ï'@î[î&Fî(Ìî*zî,(î.­î0[î2áî5fî7ï$;î7@ï�î¦îTîzïùî î‰xïêî¦zïTîZîÛxïåî[î&Gî(Ìî*zïàî+ÃîAÉï:îgî4Õï�îºî+¹ïŠî-î0{î2Vî>€ï äî¦î )î#e{î$ÐxîEýï >îkî-œîE�zï ¨îHQîHÒ"} ,`m$xï[øîSîYîd ÿÿÿ}8`m$ÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿTHEPROGRAMMER'SASSISTANT(),meaningevaluatethevariable.(2)Iftherstexpressiononthelineisalistthatisnotprecededbyanyspaces,thelistterminatesthelineregardlessofwhetherornotitisterminatedby.Thispermitstheusertotypeasasingleinput.Notethatifanyspacesareinsertedbetweentheatomandtheleftparenthesesorbracket,willassumethatthelistdoesnotterminatetheline.Thisistoenabletheusertotypealinecommandsuchas.Therefore,iftheuseraccidentiallyputsanextraspacebetweenafunctionanditsarguments,hewillhavetocompletetheinputwithanothercarriagereturn,e.g.,[Function]Ageneralized.If=,performs,whichitreturnsasitsvalue.Ifisnot,``reads''andreturnsthenextexpressionon.Note:Iftheusertypescontrol-Uduringthecallto,callstheeditorandreturnstheeditedvalue.alsosetstowhenitreadsvia,andsetstothevalueofwhenrereading.[Function]Ageneralized.If=,returnsifthereisanyinputwaitingtobe``read'',inthemannerof.If=,returnsonlyifthereisanyinputwaitingtobe``read''Inbothcases,leadingspacesareignored,i.e.,skippedoverwith,sothatifonlyspaceshavebeentyped,willreturn.[Function]Unreads,alistofexpressions.[Function]Calledbytoprintthepromptcharacterbeforeeachinput.willnotprintanythingwhenthenextinputwillbe``reread'',i.e.,whenisnot.willnotprintwhen=,unlessis.Theeditorcallswith=sothatextra'sarenotprintedwhentheusertypesseveralcommandsononeline.However,callswith=,sinceitalwayswantstheprinted(exceptwhen``rereading'').If(page8.18)isandisnot,printsthecurrenteventnumber(of)beforeprinting.Thevalueof(page8.18)isalistofexpressionsthatareevaluatedbybefore,andif,itdoesanyprinting.8.31FOOFOO]EDITF(FOO)READLINEUSE(FOO)FORFOO_EDITF(FOO)...crEDIT*(LISPXREAD)READREADBUFNILLISPXREAD(APPLY*LISPXREADFN)READBUFNILLISPXREADREADBUFREADLISPXREADLISPXREADREREADFLGNILREADREREADFLGREADBUF(LISPXREADP)READPTLISPXREADPTLISPXREADNILLISPXREADPTonthisline.READCLISPXREADPNIL(LISPXUNREAD)(PROMPTCHAR)LISPXPROMPTCHARREADBUFNILPROMPTCHAR(READP)TTPROMPTCHARNIL*EVALQTPROMPTCHART_PROMPT#FLGTNILPROMPTCHARPROMPTCHARFORMSPROMPTCHARFILERDTBLFILEFLGFLGFLGLST_LSTIDFLGHISTORYIDFLGFLGFLGHISTORYHISTORYID|ïb'î·î!= î-šxï\:î¦î¤ î pî&î+°î1î3kî;"ïY5î¦îÝîoîÞî ° î'tî)Šî+ùî.¾î0:î1uî3Âî6Ÿî8î:Ÿî@”îB îEOïW�î¦îÿî6 î"Ùî%1î'á î.6î/éî5-î6ëî9Yî:©î< îBôîEÀîFÆïUéî¦î—îôî!êî#—î/�î1<î2dî6LïRäî¦î îñîWî!ûî&7î(Žî-Çî36î5šî9î;Õî>9î@± îHïQ>î¦î$î&Ÿî+Xî.î0kî2œî5¾î8&î>?î@‘îCÅîFÑîH0ïO™î¦îíî0î! î"Ÿî%’î& î):î/{î2�îBjîC+ ïMóî¦îîcîZ î&6î)8î+'î.–î2Hî7²î8Ûî>OîAîBÝ ïLMî¦î•î>î�î!.î'î)nî-î0-î54î:Zî>ÝïAQîC5 ï?¬î¦îîPî#lî$î+Qî/6î7Íî9¼ï>î6îî î!iî&î'¾î)”î-¼î5œî7î;ùîDâï<`î¦î[î î!gî$tî%Èî(;î+&î3 ï9[î¦î´îFî´î"»î&]î+î,²î10î3žî67î;QîDcîG€ï7µî¦î¥îZî#î%fî)‘ï4°î î#î.dî3°î7­î9Mî=4îCîD>îG>ï3 îºî!gî#Äî'jî/‡î39 ï0îC5 ï._î¦îY î$êî%íî*î,:î6Pî<©î>0îAÞîCpîF6ï,ºî¦îyî+î î$òî&£î)î.î7[î8:î<-î@ï+î¦î•î žî!ðî%iî&Æî)Wî,ðî1²î3Qî53îA*îBêîFï)nî¦î�î Þî#Jî(Èî+zî0°î3áî;Fî<<î>î@ýîBwîE§ï'Èî¦îêîCî+Zî.î4³ï$ÃîC5 ï#î¦îjî Fî!oî#«î%b ï îC5 ïrî¦îÞî"Sî#âî'(î)gî./î5•î9Âî<ÒïÍî¦îPîÄî *î%×î)‰î+èî.öî2žî5Hî79 î=2î?Åï'î¦îî ï"î “î#>î%³î)î2¯î4åî5Ãî<Øî?î?ùîBÐîFÑï|î Èî&…î+$î-î0î4œî62î8ºî;dî@jîDSîFæïÖî¦îBîÚî&Äî(Óî+ˆî.áî:¸îFÅï0îîKî'î –î!ëî&Lî*)î-áî2±î7vî;(ï+î¦î"Jî&#î)¢î, î5Zî6áî;õîEôï…î¦îîÉî"zî'¢î/î0î4bî:Ûï €î¦îºîŸî-ñî1ìî5Žî76î8�î;î= îD‚îGŒï Úî¦îËî(¯î-Rî0î1¿î3î6Aî8ßïî(oÿ}`m$"xï\:îî8�ïW�îDéïUéî&¤ ïQ>îÐïO™î4!î7~î<ˆî?åïIHî¦îˆïG¢î¦zïH îZîÛxïEüî¦ïDWî¦ïAQî ì îéï?¬î î%oî,°î/åî=xîD0 ï>î_î/:î9sî<Ñï<`î-*ï9[î7õî<>ï4°î¦î&î0\î?»ï3 î¦î)"ï0î ì îoï._î ·î+cî-= î;&ï,ºî/Ëî=�î@ò ï+îG{î9œî;€î> xï)nî7ï'Èî"o î2-ï$Ãî ì î(ï î ì î³ïrîºî@ò ïÍîCwï'î„ï"î¦ î,Íî4î>Eï|î¦ î'äî3ÅïÖî5î=Ï ï0îtî,†ï+îC î+)î9pî<í ï €î •ï ÚîÅ ÿÿ}¨`m$àxïAQî*îÃï>î¦ï0îî‡ï._î'•î)ï,ºî9¿î;Eï$ÃîØîýï#î%ï îîî¢îkîÛïrî3ôï"î9äî;jï|î$î%œï0î¦î,ï+î/qî3âï…î)Òî.Cî9 ÿ}°D`m$\ÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿProgrammer'sAssistantFunctions[Function]Recordsoneeventon.Ifisnot,theinputisoftheform.Ifis,andisnot,theinputisoftheform.Otherwise,theinputisjust.createsaneweventwiththecorrespondinginput,,valueeldinitializedtobell,and.Ifthehasreacheditsfullsize,thelasteventisremovedandcannibalized.Thevalueofisthenewevent.However,ifisnot,andthemostrecenteventonthehistorylistcontainsthehistorycommandthatproducedthisinput,doesnotcreateanewevent,butsimplyaddsanentrytothepropertyforthateventandreturnsthatentry.Seediscussiononpage8.28.(page8.18)isalistofexpressionsthatareevaluatedundererrorsetprotectioneachtimecreatesanewevent.[Function]Usedbyforstoringthevalueofanevent.Canbeadvisedbyusertowatchforparticularvaluesorperformothermonitoringfunctions.[Function]isaneventspecication,speciestheformatofthevaluetobereturnedby,andcanbeeither,,,,,or.parses,andusestondthecorrespondingevents.thenassemblesandreturnstheappropriatestructure.incorporatesthefollowingspecialfeatures:(1)if=,interpretsinthecontextofthehistorylistthecurrenteventwasadded.Thisfeatureisused,forexample,by,sothatwillnotrefertotheeventitself.(2)if=andthelasteventisan,thenexttothelasteventistaken.Thispermitstheusertotypefollowedbyor.(3)recognizes,andsubstitutesfor(seepage8.13).(4)recognizes,andretrievesthecorrespondingevent(s)fromthepropertylistoftheatomfollowing(seepage8.12).[Function]Searchesandreturnsthetailsofbeginningwiththeeventcorrespondingto.,,andaretherstthreeelementsofa``historylist''structure(seepage8.25).isaneventaddress(seepage8.5)e.g.,,,,,etc.Ifcannotnd,itgeneratesanerror.8.32(HISTORYSAVE)NIL(.)NILNIL(.)HISTORYSAVEHISTORYSAVEREREADFLGNILHISTORYSAVE(bell.)*GROUP*HISTORYSAVEFORMSHISTORYSAVE(LISPXSTOREVALUE)LISPX(LISPXFIND)LISPXFINDENTRYENTRIESCOPYCOPIESINPUTREDOLISPXFINDHISTORYFINDLISPXFINDLISPXFINDTLISPXFINDbeforeVALUEOF(VALUEOF-1)VALUEOFNILUNDOUNDOREDOUSELISPXFIND@@ARCHIVELSTLISPXFIND@@(HISTORYFIND)(43)(-1)(FOOFIE)(LOAD_FOO)HISTORYFINDHISTORYIDINPUT1INPUT2INPUT3PROPSHISTORYINPUT1INPUT1INPUT2INPUT3INPUT1INPUT2INPUT2INPUT3INPUT3IDPROPSHISTORYINPUTIDPROPSEVENTVALUEHISTORYLINETYPEBACKUP_LINETYPELINEBACKUPLINELINEHISTORYLSTINDEXMODEVENTADDRESS_LSTLSTEVENTADDRESSLSTINDEXMODEVENTADDRESSEVENTADDRESS|ïb'îg î((î. xï\:îC5 ïZ”î¦îúî£î#Uî*¢ïW�î¦î+îªî$¶î%¦î(î+Óî-Qî/î1ŽîGîH\ïUéîÂî ñî" î*î+Åî0ýî2î4´î8›î:Eî<<î>ÙïTDîÕîÝ î$°î'î*µî,î3ïQ>î!~î&î'Uî*Vî.î1Kî3¾ î<ÂîBîC îFÅïO™î¦ îîïî#+î*î+î,«î5!î7ºî<ýî>üîA«îDÜîG_ïMóî¦îXîÂî"mî%" ïJîî¦î�îeî* î+¬î.+î17î5Ðî<)îEßîGjïIHî,îîÛî Hî#±î'áî+¢î-¶î0"î4¿î7 îåîC‚ïG¢î¦îxî ˜î#=î1 î4?î6·î:¼î;ëî>ÜîBíîEqïEüî¦îî0î3Þî5»î>ßîD¥îGïDWî¦îXî î"»î%‡î)›î,. î2ªî4¯î7òïAQî%Ÿî)_î,Åî.3î/_î1žî3Y î:’î=aî?¶îEÞï?¬î¦î¬ î#4î&bî3Fî7Éî8ñî;Ýï<¦îC5 ï;î¦î%î!³î#Ýî(Xî*¤î.9î/Þî1¼î5êî8Äî:¡î?€îAhîDMîEéï9[î¦îá î î$;î%þî+Pî.ì î6 ï6VîC5 ï4°îîîBîî!¶ î-oî2·î4þî9_î;î=Hî@ØîBnîDGï3 î¦î!0î" î$Àî'Iî)8î1Tî8î¯î@ï ï/¿î¦î$rî'•î-åî0šî5Hî7¥ î>þ ï,ºîº î'€î)Ýî/êî4aï)´î¦îéî [î"‘î+» î5xî7Aî9»î>¨î@}îB÷îG¡ï(î’îÑî"xî& î(—î-0î0)î4®î5ûî9sî;�îADîIï&iî¦îiî&Íî)vî+éî/7î0äî9¦î=Xï#dî¦îÄîöî"Wî%î'Yî)Ïî-yî.Ûî4î4òî7Hî:Mî;òî>Gî@½îDgîEÉï!¾î¦î½î®î" î%î&®î-œî3;î9î=]ï¹î¦î"= î*¶î+Ìî.° î>­îGïî¦îêïî¦î" î)²î*¶î-‹î3)î5§ î>µîCüîG€ïhî¦î<îwî!/î#Œî'î.nî18î4|ïcîC5 ï½î¦î î"Ñî'„î)åî,Éî1Rî7¼î:Øî=9î@ï ïî¦î"Ûî%óî*‰î+]î1Oî3˜î5íî8¥î<#îAÐîC€îD ïqî¦î¡î hî#Bî&•î4Îî6Hî8Fî<î@ýîCÖîG*ïÌî¦îî"Yî*äî5ôî6ðî9ðîEeï &î¦î$ î$èî&=î,@î./ïî(o!ÿÿ}`m$xï\:î ì î0ÁïW�î"1î5î@;îFBïUéîkî.wîB|îH‚ïTDîþïQ>î¦ ïJîî = î=©ïIHî¦ïG¢î'D ïEüî/î$²î(æî.‘î8IïAQî¦ï?¬î)„ ï<¦î ìî!ï;î ï6Vî ì î(+ï3 î î-!î20î8íî=%îC ï1eî¦îÀî0 ï/¿î_ï,ºî¦ï)´î!ºî#Š{ï(î¦xîC ï&iî4î#Äî$›î3Aï#dîUî0Âï!¾î)»î55î:×ï¹îûî)î5” ïîìî(Ûïhî-ïcî ì î+äïÌî¥îüî ªî#Tî'‡î+ßî0êî2˜î;Š !}p`m$Âxï\:îØîIîîî"Tî'Œî,Äî.kïZ”î%Yî)ÊïW�î;î5ÝïW&î9 ïW�î; ïW&î>ÏïW�îAêïW&îE¬ïUéî¦ïU€îiïUéî%ïU€î(ÃïUéîCSïU€îGïTDî¦ïSÚîiïTDî.¿ïSÚî2�ïQ>î@ÜïO™î&î'­î//î3ŸïEüîî" î*”î,;ï<¦î4î:îéîï6Vî*î›îRî î!+î"Áî'ï4°î¦î)Ãï1eî'¸ï)´îeîüî1üï#dîï¹îAîEˆïcîØîýîŸî Iî$Vî*¹ï½îKî.…ïîKîXî#®î&Æî. ïqî*«î.¸ï &î}îŠ"ÿÿÿ}„`m$Òÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿ77THEPROGRAMMER'SASSISTANT[Function]Usedbyfor``matching''whenspeciesapattern.Matchesagainst,theinputportionofthehistoryevent,asmatchingisdenedonpage17.13.Initiallydenedas,butcanbeadvisedorredenedbytheuser.[Function]isahistorylist(seepage8.25).istooneoftheeventson.returnstheeventnumberfor.[Function]addsthe``undoinformation''tothepropertyofthehistoryevent.Ifthereisnoproperty,oneiscreated.Ifthevalueofthepropertyis,theinformationisnotsaved.speciesanevent.If=,thevalueofisused.Ifbothandare,isano-op.Notethat(or)caneitherbea``real''event,oraneventwithinthepropertyofanotherevent(seepage8.28).Theformofis.Undoingisdonebyperform-ing.Forexample,ifthedenitionofis,willcauseacalltowith=.ofthepropertyofaneventisacountofthenumberofssavedforthisevent.Eachcalltoincrementsthiscount.Ifthiscountissetto-1,thenitisneverincremented,andanynumberofscanbesaved.Ifthiscountisapositivenumber,restrictsthenumberofssavedtothevalueof,describedbelow.initializesthecountto-1,sothatregardlessofthevalueof,nomessagewillbeprinted,andthewillbeundoable.[Variable]Thevalueofisthemaximumnumberofstobesavedforasingleevent.Whenthecountofsreachesthisnumber,printsthemessage,askingtheuserifhewantstocontinuesaving.Iftheuseranswersordefaults,discardsthepreviouslysavedinformationforthisevent,andmakesbethevalueoftheproperty,whichdisablesanyfurthersavingforthisevent.Iftheuseranswers,changesthecountto-1,whichisthenneverincremented,andcontinuessaving.Thepurposeofthisfeatureistoavoidtyinguplargequantitiesofstorageforoperationsthatwillneverneedtobeundone.Ifisnegative,thenwhenthecountreaches-,simplystopssavingwithoutprintinganymessagesorinteractingwiththeInthespecialcaseofand,theformatofis.Whenisundone,thisformisrecognizedandhandledspecially.Thisimplementationsavesspace.8.33(HISTORYMATCH)HISTORYFIND(EDITFINDPT)(ENTRY#)EQENTRY#(UNDOSAVE)UNDOSAVESIDESIDESIDENOSAVENILLISPXHISTLISPXHISTNILUNDOSAVELISPXHIST*GROUP*(.)(APPLY(CAR)(CDR))FOO(/PUTDFOO)UNDOSAVE(/PUTDFOO)CARSIDEUNDOSAVEUNDOSAVE#UNDOSAVESLOAD#UNDOSAVESLOAD#UNDOSAVES#UNDOSAVESUNDOSAVECONTINUESAVING?NOUNDOSAVENOSAVESIDEYESUNDOSAVE#UNDOSAVES#UNDOSAVESUNDOSAVE/RPLNODE/RPLNODE2(.)INPUTPATEVENTEVENTADDRESSPATINPUTEVENTINPUTPATHISTXHISTXHISTXUNDOFORMHISTENTRYUNDOFORMHISTENTRYHISTENTRYHISTENTRYHISTENTRYHISTENTRYUNDOFORMFNARGSUNDOFORMUNDOFORMDEFNEWDEFUNDOFORMDEFUNDOFORMUNDOFORMUNDOFORMUNDOFORMUNDOFORMUNDOFORMXOLDCAROLDCDRUNDOFORMyï<Êî3Ôï Iî ì!}`m$|ïb'î·î!= î-šxï\:îC5 ïZ”î¦î6î&ðî)+ î0‚î>FîC¤îDÌïXïî¦î _î(÷î*î,«î0�î5¨î7œî:7î?îGîH0ïWIî¦î¤îî#ÿî& î)Rî-î2Ÿî7‹ïU£îTî0î¯î8î!'î&î'Úî-èî/âî2@ïRžîC5 ïPøîÓî.îFî!Äî#ïî&©î)Ýî/ î2†î4#î6¼î8cî:±î>ÖîCƒïORî¦îUî²î"dî'Œî*ŸïLMîC5 ïJ§îÝî"î$gî(¢ î8fî: î@?îEÎîG€ïIî¦î!î&¨î'qî(àî,Tî-¬î3mî9Kî;ãî=;îB}îCëîF7ïG\î¦î^î›î%1î+¦î,�î.ß î6bî7Ìî:?ïDWî%î$—î&™î+î3ƒî7hî8Wî:Çî>�îHsïB±î¦îgîèî'�î2[î73î?Nî@ºîAäîCÞîFjïA î¦î!Ûî+¤î, î/'î3î4üî6$î:6î>>î?ÿîAìîEœï?eî¦î iî%ÿî'¶î,¼î0nî38î6|ï<`î¦îÓîŽî(’î3}î6î<7î=ùîAÀîDîFï:ºî¦î:=îtî@øï7oî¦î!Øî/²ï4jî½îƒî"Üî(î*Eî,Aî0î1yî2°î6‘î8Vî:Áî?÷îHÕï2Äî¦îwî¼î dî$µî(/î*Áî3½ î:¼î=dîA×îCaîF ï1î¦î9î|îQîÊîˆî"Óî$Pî%ãî)Ò î28î5î7Üî=+îF$îGTï/xî¦î¬î;îÓî"ˆî&sî'ôî)3î.[î;Kî@sîBçîH&ï-ÓîÀî¬î#Yî$ëî'-î*¹î4¼î5}î;‡îCÐ ï,-î¦îîñîªî #î!¿î#Žî&g î,Îî.’î0üî4°î>Ûî?ÄîAÕîG4ï*‡î¦î•î½î!rî'°î*Yî,Hï'‚îC™ ï%Üî¦îYîÜî(8î)î+¹î2î7î?Ãî@¨îB2îCþîG¢ï$7î¦îÛîÏî!'î%Hî'±î+�î4mî5�î:gî=ï"‘î¦î•îøî0Âî1¦î5ëî8Oî;Kî<±î>¦îB‰îD<ï ëî¦îøî¬î!<î$fî,î.î;?î@°îCA ïEî¦îm î"ïî%)î'Çî+Ðî.„î8Eî:3î<�î@5îAëîDGïŸîîïî î%Aî'ðî,¤î0éî35î5äî:Jî;Ûî>IîAPîIïúîÂî#Éî&î)¸î+Dî+½î-/î1î2bî5dî9 îA$îC¸ïTî¦î_î5î$sî&*î(Êî-nî.Øî0†î4Bî7¼î9Íî=1 îCwîE/ï®î¦îá î ‰î#Uî%þî)Åî-î.Ëî0ºï©î¦î#'î%î+‹î/9î3vî6^î:¼î@!îIïî¸î"øî&Hî*Qî/-î4?î6³î<^î=õ îD“îG€ï àî €î ¡îRîî[î öî+Žî,Òî/‚î4Mî>Hï ]îâî8îÉî £î&‚î)‘î-dî/> î6�î9±î?j îFÆï Úî ì îÁîFïî(o"ÿ}Ô`m$–xï\:î ì î!�ïZ”î/ ïWIî9< ïU£î¦ïRžî ìîïPøî0dîDOïLMî ìî!4ïJ§î¦îïPøî¦î-¾î@ÊïORî)ÇïLMîSî’îLî \ïJ§î0Ïî5ïIîÁî%ÑïDWî¦î¶î,›î2«ïB±î #î&3ïA îqî €ï<`î �î$Üî++î/`î1ï:ºî$zî(¹î1uî5´ï9î#îî0iï7oî¾îýî,uï4jîA¼îEûï1î? îCJï-Óî¦îåï%Üî8ªî<éï$7î-Sî1“î ìï;þ=$ï àî6Xî:—î@ÝîBŒï ]î ìî¼îû!ÿÿÿ}Dü`m$ÂÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿProgrammer'sAssistantFunctionsuser.=isequivalentto=innity.isinitially.[Function]performsthenecessaryhousekeepingoperationstomakebetranslatedtotheundoableversionwhentyped-in.Forexample,canbemadeundoablewhentyped-inbyperforming:[Function]performsthesubstitutionoffunctionsfordestructivefunctionsthataretyped-in.Ifisnot,itisthenameofafunction,andisitsargumentlist.Ifis,isaform.Inbothcases,returnswiththeappropriatesubstitutions.isalistofboundvariables(optional).incorporatesinformationaboutthesyntaxandsemanticsofInterlispexpressions.Forexample,itdoesnotbothertomakeundoableoperationsinvolvingvariablesboundin.Itdoesnotperformsubstitutioninsideofexpressionsofwhichisannlambdafunction(unlessoftheformhasthepropertyvalue,seepage5.4).Forexample,typedto,willbreakon,not.Similarly,substitutionbeperformedintheargumentsforfunctionslike,,etc.,sincethesecontainexpressionsthatwillbeevaluatedorapplied.Forexample,iftheusertypesthemustbereplacedby.[Function]isaneventspecication.isthefunctionthatexecutescommandsbycallingontheappropriateentry(s).[Function]Undoesoneevent.returnsifthereisnothingtobeundone.Iftheeventisalreadyundone,printsandreturns.Otherwise,undoestheevent,printsamessage,e.g.,,andreturns.If=andtheeventisalreadyundone,orisanundocommand,takesnoactionandreturns.usesthisoptiontosearchforthelasteventtoundo.Thuswhen=,simplysearcheshistoryuntilitndsaneventforwhichreturns.Undoinganeventconsistsofmappingdown(of)thepropertyvaluefor,andforeachelement,applyingto,andthenmarkingtheeventundonebyattaching(with)atothefrontofitsproperty.Notethattheundoingofeachelementonthepropertywillusuallycauseundosavestobeaddedtothe,therebyenablingtheeectsoftobeundone.8.34#UNDOSAVESNIL#UNDOSAVES#UNDOSAVESNIL(NEW/FN)NEW/FN/RADIX_(DEFINEQ(/RADIX(X)(UNDOSAVE(LIST'/RADIX(RADIXX))(/RADIX)_(NEW/FN'RADIX)(LISPX/)LISPX//NILNILLISPX/LISPX/CARCARINFOEVAL(BREAKPUTD)LISPXPUTD/PUTDshouldMAPCRPTQ(MAPC'(FOO1FOO2FOO3)'PUTD)PUTD/PUTD(UNDOLISPX)UNDOLISPXUNDOUNDOLISPX1(UNDOLISPX1)UNDOLISPX1NILUNDOLISPX1ALREADYUNDONETUNDOLISPX1SETQUNDONETTUNDOLISPX1NILUNDOLISPXNILUNDOLISPXUNDOLISPX1TCDRSIDECARCDR/ATTACHNILSIDESIDEcurrentLISPXHISTUNDOLISPX1FNFNFNXFNVARSFNXFNXXVARSXLINELINEEVENTFLG_FLGLINE|ïb'îg î((î. xï\:î¦î#šî( î)z î0)î:CïZ”î¦îî ‘ïW�îC5 ïUéî%î"ìî%9î+7 î3¾ î:Vî;óîA¸îC— ïTDî¦îkîàî!ûî)øî-Áî1Šî4î6ÁîAyîDîF!ïRžî¦îªî![î%$î&Ðî(Ê ïG¢îC5 ïEüî/î"ÿî%W î,Àî/Æî5¹î7î î>ÓîDÆîGŒïDWî¦îoî�î!Iî"¯î'£î({î)Ìî+3î-Œî1Dî2øî4î9æî=ïî?UîA*îGJïB±î¦îmîfî!±î#%î$Wî(Zî*1î-tî6ßî<üî@îB… ïA î¦ î#µî%î&Hî(„î*;î.’î4H ï>î… î%› î-oî1žî4Kî8Üî;áîBaîDiï<`î¦ îTî!Ûî'‹î(¾î+Êî.î2Zî3åî7tî=V îCÛï:ºî¦îMî!–î$ î$Ùî&Aî)`î+Äî1 î8jî îH&ï9î¦î˜îêîÁî$Tî)±î1"î2Áî5î8Rî:¬î<ñîF7ï7oîîÉîî!4î$dî&øî77î:õî@ÁîA‡îDîGÙï5Éîîõî"²î#ü î*F î6%î8*î>þî@ÁîC5ï4#î¦îî î&Eî*Ÿî+�î.¨î29î5áî:Þ îB6îE#îGîï2~î¦îî 'î&wî)mî/˜î1Eî3ïî73ï0Øî"?î(}î+âî-Ñî3Pî9~ï-ÓîC5 ï,-î-îÁîØî"² î3³î5Gî7Íî=kî@_ï*‡î¦î…î î-Ëî/Ïî2, î9…ï'‚îC5 ï%Üî¦îÐî‘î-î4ûî6sî:î;”î@¾îBƒîDŠï$7î¦î‚î:î Gî" î'7î6BîG(ï"‘î¦îîí î-•î2Aî4’î8‘î½îA%îDáï¤î¦î¨î’î) î*î.Qî0î2jî5áî7 î=hîC—îGïþî¦îôîNî öî$î)8î+-î1Lî6Òî9lî> îA®îH0ïXî¦î„î“î/î-£î.mî3Xî8Üî;(î?Lï ³î¦îSîBïî(o!ÿ}|`m$ xï\:î3 î$úî1Ü î@ò ïZ”î ïW�î ìîTïUéî¦ïTDî&Öî<ªïO™î¦îTî äî'�ïMóî î(tî-î47î:ïLMî¦ïJ§î¦îTî ïG¢î ìîïEüî¦î.qïDWî%ïB±îáî1Gï>î¦ï:ºîE+ï9î.1îBoï7oî¦î,³î2”î<�ï5Éî¦î~{î1Ìxï4#î"éî'Cï2~î;î@îEýï0Øî¦î±î$�î5Jï-Óî ì îï,-î+wîEýï*‡î$à ï'‚î ì î€ï%Üî$ î1Ùï$7î,ü î:†îA?ï"‘îHî$· îEýï ëî¦î$ðïæîßî@ò ï@î)&î,¢ïšî/µî3-ïõî+ î9ïïî3îE¥ïJî+&î/òï¤î#*î+@î9€ïþî-{{ïXî!{xî&î@ò ÿ}|È`m$ôxïW�î¤ïUéî?”ïTDî'­ïG¢î¤î\îìîšïDWîî<—ïB±î0î Lî;—ïA î î Ëï:ºî#5ï-Óî*ï,-î¦ï'‚îîî�îUïæîî˜ïšî+{"ÿÿÿ}D4`m$Rÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿ88THEPROGRAMMER'SASSISTANT[Function]isaneventspecication.printstheeventsonspeciedby,e.g.,.Printingisperformedviathefunction,sothatifthevalueof=,eventswillbeprettyprinted.isan(optional)functionalargumentthatisappliedtoeacheventbeforeprinting.Ifitreturnsnon-,theeventisskipped,i.e.,notprinted.If=,orappliedtothecorrespondingeventistrue,thevalueisnotprinted.Forexample,iswhenprintingeventson.Forexample,thefollowingwilldeneasacommandforprintingthehistorylistwhileskippingall``largeevents''andnotprintinganyvalues.8.8THEEDITORANDTHEPROGRAMMER'SASSISTANTAsmentionedearlier,alloftheremarksconcerning``theprogrammer'sassistant''applyequallywelltouserinteractionswith,ortheeditor.Thedierencesbetweentheeditor'simplementationofthesefeaturesandthatofaremostlyobviousorinconsequential.However,forcompleteness,thissectiondiscussestheeditor'simplementationoftheprogrammer'sassistant.Theeditorusestoprintitspromptcharacter,and,,andforobtaininginputs.Whentheeditorisgivenaninput,itcallstorecordtheinputinaneweventonitshistorylist,.followsthesameconventionsandformatas.However,sinceeditcommandshavenovalue,theeditorusesthevalueeldforsavingsideeects,ratherthanstoringthemundertheproperty.Theeditorrecognizesandprocessesthefourcommands,,,andwhichrefertopreviouseventson.Theeditoralsoprocessesitself,asdescribedbelow.AllotherhistoryExceptthattheatomiccommands,,,,,andarenotrecorded.Inaddition,numbercommandsaregroupedtogetherinasingleevent.Forexample,isconsideredasonecommandforchangingposition.8.35(PRINTHISTORY)PRINTHISTORY(-1THRU-10)SHOWPRIN2SYSPRETTYFLGTNILTTEDITHISTORYLISPXMACRO??'(??'(PRINTHISTORYLISPXHISTORYLISPXLINE(FUNCTION(LAMBDA(X)(IGREATERP(COUNT(CARX))5)))TT))EVALQTBREAKLISPXPROMPTCHARLISPXREADLISPXREADPREADLINEHISTORYSAVEEDITHISTORYEDITHISTORYLISPXHISTORYSIDEDO!E!F!NEDITHISTORYUNDOOKSTOPSAVEP?PPE33-1HISTORYLINESKIPFNNOVALUESFILELINEHISTORYLINESKIPFNNOVALUESNOVALUESNOVALUESyï Ìî,ï Iî ì!}`m$|ïb'î·î!= î-šxï[øîC5 ïZRî<îßîî"ï î6±î:Òî=gîAÔïX­î¦îÑî#.î$”î3 î5®î;€î=tîD»îG€ïWî¦î$íî&î(!î+/î,Ñî/pî3Yî?hîAžîB¼îG4ïUaî¦î• ïR\î©î*î / î&• î-(î3cî6Eî7Æî<Âî>…îAÊîE’ïP¶î¦îgîçî <î$ëî*/î+ î-hî1î2„î7ùî:Šî<ýïM±î¦îªî!áî"îî+èî0ÿî2Ýî5l î>‹îBnîD îG€ïL î¦î—îLî î&=î)0î6zî9Õî=ÑîCYîGÙïJfî äïG`î¦î‰î žî#5î2¡î5…î=Ãî?ªîA îG¢ïE»î¦îî³î$zî&îî*Ùî0œî2Ãî7î<.î?îAÈîG?ïDî¦|ï0 î ìîiîïîÿîšî î,}xï+¥î ìî îúî­î±î~îòî#D î*Yî-| î6I îîoî/îî ˆî"äî'Zî,€î.Mî8¯î>ëîA0 ï&´î ìî ‹î#îåîBî î'ñî)©î, î4¼ ï#®î ìî îkî÷îúî#´î%ãî+ î1Äî<^îE÷îG(ï" î$î[îpîî"-î$†î(€î)æî-“î/}î3yî4ÊîA�îC8îG€ï cî ìî  îZî�îˆîGîXî>îÙî+»î7˜î<]î>ÇîBN ï½î ìî ¦î"îéîÉî#þî'sî*8î1î4dî6nî:sî<Õî@ÙîCÔîF7ïî ìî î?îsîIî×îàî"î&�î*î.î0rî9dïî ìî éî îÔî±î Ñî#Wî&�î/6î1èî4šî5žî:Õî?îB~îDSïlî ìî;î—î‹îzî!’î$vî.�î2Rî4î:Wî?0îAšîEPï àî €î8î-î´îUî" î&mî*Ïî,«î.ˆî1óî6Vî8Ñî;nîB$îDï ]î ìî&îîzîöî#hî%&î&bî*\î.Èî1ƒî=î>ƒ îEuîG4ï Úî ìîGî‚îZïî(oÿÿ}Ì`m$œxï[øî ì î.ÆïZRî+à ïX­î(î)Íî+{î/®î0…ïWî]î5S î@ÇïP¶î'ªïM±î! ïL î8/ïJfî¦ ïG`î)| î9ßïAî¦îÚ ï?jî6 ï=Äî6ï<î6î'�î.Vï:yî!» î*ùî0Ûî5î8kï8Óî6ï7-î6ï)ÿîîóï(YîÆï#®î· î4Ïî=� ï" î ìî7Ò ï cî"} î-È ï½îÓ ïî6ïî-ˆî0:î2ìî8{ïlîY î*‡ï àî ]î#î'sî+Ôî-±î/˜î4Òï ]î7fî9î:Âî;™ÿÿ}Ð@`m$®xï[øî¯î îØî’î$Ûî&£î'Qî(èî, ïZRî¦îDîH�ïX­î TïR\î¦ïM±îXî îÏîeî$áî&©î'Xî(îïL î/Yî1"î1Ðî3fî ìï;þ=$!ÿ}L`m$Pÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿ99TheEditorandtheProgrammer'sAssistantcommandsaresimplygiventoforexecution,afterrstbinding(resetting)to.Theeditoralsocallswhengivenancommand(page17.45).Inthiscase,theeditorusesthefthargumentto,,tospecifythatanyhistorycommandsaretobeexecutedbyarecursivecallto,ratherthanbyunreading.Forexample,iftheusertypesintheeditor,hewantsthelasteventonprocessedasinput,andnottobeunreadandprocessedbytheeditor.Themajorimplementationdierencebetweentheeditorandoccursinundoing.isalistofonlythelastcommands,whereisthevalueofthetime-slice.Howevertheeditorprovidesforundoingchangesmadeinasingleeditingsession,evenifthatsessionconsistedofmorethaneditcommands.Therefore,theeditorsavesundoinformationindependentlyoftheonalistcalled,(althoughitalsostoreseachentryonintheeldofthecorrespondingeventon.)Thus,thecommands,,and,arenotdependenton,andinfactwillworkif=,oreveninasystemwhichdoesnotcontainatall.Forexample,speciesundoingthelastcommandon,evenifthateventnolongerappearson.Theonlyinteractionbetweenandthehistorylistoccurswhentheusertypesfollowedbyaneventspecication.Inthiscase,theeditorcallstondtheevent,andthenundoesthecorrespondingentryon.Thustheusercanonlyundoacommandwithinthescopeofthe.(Notethatthisisalsotheonlywaycommandsthemselvescanbeundone,thatis,byusingthehistoryfeature,tospecifythecorrespondingevent,e.g.,.)Theimplementationoftheactualundoingissimilartothewayitisdonein:eachcommandthatmakesachangeinthestructurebeingediteddoessoviaafunctionthatrecordsthechangeonavariable.Afterthecommandhascompleted,thisvariablecontainsalistofallthepointersthathavebeenchangedandtheiroriginalcontents.Undoingthatcommandsimplyinvolvesmappingdownthatlistandrestoringthepointers.asindicatedbytheirappearanceon,alistofthehistorycommands.in-terrogatesbeforeattemptingspellingcorrection.(Allofthecommandsonarealsoonandsothattheycanbecorrectedifmisspelledintheeditor.)Thusiftheuserdenesaandwishesittooperateintheeditoraswell,heneedsimplyadditto.Forexample,isimplementedasaandworksequallywellinandtheeditor.8.36LISPXLISPXHISTORYEDITHISTORYLISPXELISPXLISPXEREDOLISPXHISTORYLISPXLISPXEDITHISTORYallEDITHISTORYUNDOLSTUNDOLSTEDITHISTORYUNDO!UNDOUNBLOCKEDITHISTORYEDITHISTORYNILLISPXUNDOUNDOLSTEDITHISTORYUNDOUNDOLISPXFINDUNDOLSTspeciedEDITHISTORYUNDOUNDOUNDOLISPXHISTORYCOMSEDITDEFAULTHISTORYCOMSHISTORYCOMSEDITCOMSAEDITCOMSLLISPXMACROHISTORYCOMSRETRIEVELISPXMACROLISPXLISPXFLGNNNyï\¤îGïÜî ì!}`m$|ïb'î’îhî#œî&:î(– î1Vxï\:î ìîtîÛî]î#î"²î% î+¥î.óî1Éî6ð îH0ïZ”î*îîøîîÞî%Àî)€î-@î0§î7î:Üî?ŸîA|îD*îG€ïXïî ìîîAîÏî÷îKî#\î*Fî+Rî-/î1øî4ôî7Ãî<€îC�îFîGîïWIî ìî�î�î²îxîúî Ôî!ªî%­î(Êî*¾ î1»î4]î:$î;}î=Ôî@ÄïU£î ìî „î Ìîîíî¶îþîgî î,yî2Ÿî8Ùî<Èî?hîAÇîC_îE9ïSýî ìî ¡îÛîÕî3ïPøî ìî Äîº î’î ðî&]î(¾î,¿î42î8vî:%ïORî ìî Oî pî¤îTîcî¹î“î Äî&5î'˜î)îî-�î/=î1’î4ªî87î>î@\îDSïM­î ìî ;îÅîîÑî‘îÎî#Êî(vî-~î0Öî2Iî5)î9Ôî?ÊîA–îE:ïLî ìî Äîm î=î²î!Èî%eî) î0¨ î9»î;ŠîGÙïJaî ìî î \î7îîNî©î"xî&[î)�î-%î5›î7Mî9±î<Îî>Œî@ï ïH»î ìî Ëî:î¼îÇî!Rî+ºî0÷î2î:Äî;Íî>Lî@ìîGÙïGî*î>î+îîóîÔî"‡î-]î1Aî2Vî4Pî7Ìî9±î;î?ÂîDîGjïEpî ìîxî î|î"î#Éî)%î.‹î0åî3`î9¸îA›îBtîEµîGïCÊî ìî ‡îuîžîŽî#ºî$î'>î*? î0ýî:î<¹î?îCwîEœïB$î ìî ¨îîîšî Dî"Iî$Cî( î0kî2Dî4îî8@î:¨î>²ï@î ìî ¥îˆîòî îÍîüîÂî", î+'î.Äî6·î7Ÿî;&î=�î@“îC)îFLï>Ùî ìî{îãî0îšî!oî#3î.Ûî/Âî3»î6”î9?î:·î=�î?÷îCï=3î ìîÖ îÌî`î[î!½î$”î&eî(kî,î.†î3î8)î9áî>†î@ï ï;�î ìî õîdï8ˆî ìî ¼ îŒî=î•î�î#óî%Xî)Ôî+{î-Óî0£î1òî3Wî6Áî<œî=“î@¼îGï6âî ìîî2îÊîjî¼îhî!$î%Cî(eî*î,Kî-hî2Ñî5‘î:Uî<¦îA>îC7îDTï5=î ìî îÔî'î’ îŒî"#î'Mî,£î-Äî/÷î1§î3�î5âî;"î=æîA!îDsï3—î ìî –îÏîÊî³î iî#*î)zî-Üî3#î8Ïî<‹î?LîA}îD(ï1ñî ìî Iïsî €î +î Tî}îîîRî½î}î)¾î*˜î+¿î-ùî/¯î2 î3·î6–î9îG¸ïðî ìî ƒîÌî7îîî"‡î$Ðî'„î)Íî+¦î-iî0»î3qî5î7_î9Üî>*ïmî ìî 3îòîöî#ªî%bî($î+&î-¥î/Šî1bî5xî6Î î=vî?îAkîFbï ëî ìî Vî ¾îÀîoî˜î"Xî&¹î(î)Ñî.Áî0yî2áî6êî8¢î;òî=ìîAQîEÈîHˆï hî ìîâîÉî}îÒî% î'î*oî/kî1#î;Nî>îBîFòï åî ìîPîîbïî(o!ÿÿ}Ä`m$Üxï\:îåî=‚ ïZ”î ì î ùî/=ïXïî(ïWIî¡îDOîEýïU£î!ô î47ïPøî/wî@ {ïM­î¸xïLî=ÿ ïJaîUî/0ïH»îü î(^î,Ãî4âïGî ì î$ î.¼ïEpîÃîìî;ºïCÊî| î6PïB$î®îAÉï@î0Õ{ï>Ùî !xî%� îEýï;�îÔîï8ˆî8hïsî € î=÷ ïðî î@ ïmîíî¡ï ëî¢ ï hî ¤ îWî2W ï åî ˜ ÿÿ}Èd`m$–xïXïî$hî)^ïORî/î$ÑïM­îHqî ìïÍþ=$ ÿÿ} , `m$"ÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿ TIMESROMANþ¡GACHAþ¡CMSîþç CMRðÿ  CMIðÿ   TIMESROMANþ¡  TIMESROMANþ¡ CMSYêþ¡Z  ¾ š* ú4 Ø= F üR ä\ |g Ðr œ}>…t‹ø“j¡ jª ì´ ‚¾FÆ ¾Ó øß ¼é ¾ò ¦þ Ð v p*" ¦+ 4 *> rG¢O ºYj/\%Zÿÿ›�µhÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿ ChapPA.PRESSSANNELLASEPTEMBER 15, 1983 11:41:44