CommonLispSpecialFormsauthor:JonLWhitefiles:[Eris]...Library>--CMLSPECIALFORMSdocumentation:CMLSPECIALFORMS.tedit/presscreated:13-Jan-84byJonLmodified:5-Oct-84,14-Nov-84,and18-Dec-84byJonLMacrosareprovidedforthefollowingCommonLispconstructs(so-called"specialforms"):LET,LET*,PROG*,PSETQ,PROGV,LIST*,DEFUN,CATCH,THROW,*CATCH,*THROW,andUNWINDPROTECT.Additionally,forefficiencyintheinterpreter,therearefunctionaldefinitionsforCATCH,THROW,andLIST*.Insofaraspossible,thesyntaxoftheseconstructsfollowsthatdescribedinthereferencemanual"CommonLisp:TheLanguage",publishedin1984byDigitalPress.LETisanalternativetoLAMBDA,whichputsthebindings"upfront"likePROGdoes;e.g.,(LET((X(MUMBLE))(Y(GRUMBLE)))(DO.FIRST.THING)(DO.LAST.THING))expandsinto((LAMBDA(XY)(DO.FIRST.THING)(DO.LAST.THING))(MUMBLE)(GRUMBLE))LET*issimilar,butthebindingshappensequentiallyratherthaninparallel.E.g.(LET*((X(MUMBLE))(Y(GRUMBLE)))(DO.FIRST.THING)(DO.LAST.THING))expandsinto((LAMBDA(X)(LAMBDA(Y)(DO.FIRST.THING)(DO.LAST.THING))(GRUMBLE))(MUMBLE))PROG*isthesimilarextensiontoPROG,namelythebindingshappen"sequentially"ratherthaninparallel.Likewise,PSETQisa"parallelSETQ",usingtheCommonLispsyntaxwhichpermitsnumerousassignmentstoappearinone"call"toPSETQ:(PSETQA(MUMBLEX)BA)willassigntoAthevalueof(MUMBLEX)andassigntoBthevaluewhichAhasbeforethecalltoPSETQ.PROGVprovidesameansforlambda-bindingalistofvariables:(PROGV......)islikePROGNexceptthatthefirsttwoitemsinthe"arglist"areevaluatedtoobtainalistofvariablenamesandalistofvalues;thenthevariablesarebound(asSPECVARS)tothecorrespondingvalues,andtheformsinthebodyexecuted,withthevalueofthelastonebeingthereturnvalueofthePROGV.ThisfunctionsexistsprimarilyasanaidinwritingLisp-likeinterpretersinLisp. êq?€`½ îïp`¬ÿ êq?€`½îïî êïg_p`¬î ôïb5q`×î Ëïb5î ôï`Ýî Ëï`Ýî ôï_…îêîàîÖî·î"êî)¢î.¬ï_…î ôï^-î Ëï^-î ôï\Õî¬îƒîßî�î—ï\Õî ôï[}îÕî#ýî&‚î3òï[}î ôïZ% î�î.ïZ%î ôïXÍîƒîéînî ¡ïXÍî ôïWuîZîÀ î#ýî'Yî/¿î2Dî6wïWuî ôïVî ËïVî ôïTÅî ËïTÅî ôïSmîêîËî'î¶î#î&nî.Ôî4µî8è îB%îB%ïSmî ôïR î1îÀî"Oî&‚î+Œî1mî7Nî=/îCîHñîHñïRî ôïP½îÕî¶î�ïP½î ôïOeî¬îdîÀ î'Yî(0 î3òî7N î@‹îCîFlîFlïOeî ôïN îßîéîE î&‚ î0–î3òî9Óî?´îCîHñîIÈîIÈïN î ôïLµî yîþîZîßîEî ¡î&‚î)î. î7Nî>îB9îJŸîJŸïLµî ôïK]î yîÕî¬îîóî%«î*µî. î7Nî?´îB9îFlîHñîHñïK]î ôïJî¬î�ïJî ôïH­î ËïH­î ôïGUî PîÕîZ înîóî%«î*µî.èî2Dî9Óî=/îCîGCîGCïGUî ôïEýî'î1î;ïEýî ôïD¥î Ëî ¢î yî¬îînîEïD¥î ôïCMî Ëî ¢î yî Pî'îþîÕî¬îƒî îïCMî ôïAõî Ëî ¢î yî Pî'înïAõî ôï@�î Ëî ¢î yî Pî'înï@�î ôï?Eî¬îÖî­ï?Eî ôï=íî Ëî ¢î yîî�îîéï=íî ôï<•î Ëî ¢î yî Pî'îþîÕî¬îƒîZî1îî"Oî#&ï<•î ôï;=î Ëî ¢î yî Pî'îþîÕî¬îƒîZî1îî"Oî#&î#ýï;=î ôï9åî Ëî ¢î yî Pî'îþî�îdï9åî ôï8�î Ëî ¢î yî Pî'îþ î;ï8�î ôï75î'î¬î;î—îóî&‚î,c î7Nî=/îAbîCçîCçï75î ôï5ÝîZî1îdî;îîéîÀï5Ýî ôï4…î Ëî ¢î yîƒîßîEîï4…î ôï3-î Ëî ¢î yî Pî'îþîÕî¬îƒî îï3-î ôï1Õî Ëî ¢î yî Pî'înï1Õî ôï0}î Ëî ¢î yî Pî'înï0}î ôï/%î¬îÖî­ï/%î ôï-Íî Ëî ¢î yîîdî;ï-Íî ôï,uî Ëî ¢î yî Pî'îþîÕî¬îƒîZî1îîÀîï,uî ôï+î Ëî ¢î yî Pî'îþîÕî¬îƒîZî1îîßî¶î�îdî;îîéîÀî)î)Þï+î ôï)Åî Ëî ¢î yî Pî'îþîÕî¬îƒîZî1îîßî¶î�îdî;îîéîÀî)ï)Åî ôï(mî Ëî ¢î yî Pî'îþîÕî¬îƒîZî1îîßî¶î� îÊï(mî ôï'î Ëî ¢î yî Pî'îþîdï'î ôï%½î Ëï%½î ôï$eîþîƒîßî—î#ýî&‚î+Œî1mî4ÉîîFlîFlï# î ôï!µîÕîßî;îî"Oî(0î-:î3òî;� îE•îHîHï!µî ôï ]îÕîZî¶î—îî#ýî$Ôî%«ï ]î ôïî Ëî ¢î yî Pî1îßî—îïî ôï­î Ëî ¢î yî Pî'îþîÕî¬îƒîZî1îßîdï­î ôïUî'îî�î;î—î ¡î#&î)Þî,cî/¿î5 î8%î9Óî=/îB9îGCîHñîHñïUî ôïýî Pî1î�îÀîEî#&ïýî ôï¥î Ëï¥î ôïMîþî�î;îEî ¡ î-:î.èî3î5  î>ÝïMî ôïõî Ëî ¢î yîZ î— î$Ôïõî ôï�î Ëî ¢î yî Pî'îþîÕî1 înï�î ôïEî yî¬î¶î—îÊî#&î(0î+Œî0–î3î6wî>ÝîB9îJŸîJŸïEî ôïíî yîZîî;îÀî"Oî'Yî*µî,cî0–î3î9Óî>îAbîIÈîIÈïíî ôï•î PîZî¶îî ¡î#ý î/¿î6wî9Óî=/îB9îD¾îHîHï•î ôï=î'î�îÀîî#&î%«î)î-:î0–î5 î8üî>ÝîCçîFlîIÈîIÈï=î ôïåîÕî¬îßîEî#&î+Œî.î0–î3òî6wî=/îE•îE•ïåî ôï � îßîdînï �î ôï 5î Ëï 5î ôï Ýî Ëï ÝÇ êq?€`½ 2LIST*issimilartoLISTexceptthatthelastargumentisthefinalCDRoftheresultantlistratherthanthelastelement:(LIST'A'B'C)->(ABC)(LIST*'A'B'C)->(AB.C)DEFUNis,atfirstglance,analternativesyntaxforDEFINEQ:(DEFUNFOO(XYZ)...)<==>(DEFINEQ(FOO(XYZ)...))(DEFUNBARN...)<==>(DEFINEQ(BAR(LAMBDAN...)))CommonLispdoesn'tquitepermitthenotionsofNLAMBDAs,butforcompatibilitywiththevariousLispdialectsfromwhichitsprang(e.g.,MacLisp),thefollowingextensionstoDEFUNhavebeenimplemented(DEFUNBAZFEXPR(L)...)<==>(DEFINEQ(BAZ(NLAMBDAL...))Alsotheforms(DEFUNBLEHMACRO(L)...)(DEFUN(BLEHMACRO)(L)...)aresomewhatequivalenttomakeingaMACROdefinitionforBLEH;thedifferencesarethat(1)itisa"computed"macro,andallthecodebodyisdefinedunderanewinternalname,and(2)theargumentpassedtothecodebodyviathelambdavariable[inthisexample,L]willhavethenameofthemacrocons'dontothefrontofwhatwouldbepassedtoInterlisp'scomputedmacro.ThereasonforthisvariationisthatMacLisp'smacrosreceiveasargumentthepointertotheconscellthatthemacroexpanderisworkingon,ratherthanjustthecdrofthatcell.Oneadditionalnon-standardformatisimplementedalso:(DEFUN(MUMBLEGRUMBLE)(...)...)willputthefunctionaldefinitionunderanewinternalname,andputapointertothatdefinitionastheGRUMBLEpropertyofthelitatomMUMBLE.[Whencompilingsuchaform,MacLisp(andothers)alsocompilethe"new,internal"name;butInterlispmaynotbeabletoexpressthisinafilepkgCOMSwithoutmoredevelopment.]CATCHprovidesareturnpointforanon-lexicallyinitiatedexitfromitsscope.Forexample(CATCH'SOMETAG)setsupadynamicscopingforthe"tag"SOMETAG,andifatanytimeduringtheexecutionofthereisacall(THROW'SOMETAG)thentheCATCHwillbeexitedwithasitsvalue;butifnosuchTHROWisexecuted,thenthenormalreturnvalueofwillbethevalueoftheCATCH.BothCATCHandTHROW"evaluatetheirarguments",butCATCHdoessoinawaythatthefirstargument,thetag,isavailableduringtheevaluationofthesecondargument.*CATCHand*THROWareprovidedasmacrosforcompatiblitywithMacLispandFranz.UNWINDPROTECTisverysimilartoRESETLST/RESETSAVE--(UNWINDPROTECT......)willevaluate,anduponexitwillexecutealltheremainingformsinthelist--theso-called"cleanupcode"."Exiting"alsomeansanabortingduetoRESET(orHARDRESET)oranyerror.Unfortunately,theInterlispRETFROMandRETTOdonotcurrentlyexecutetheresetsaveformsunderaresetlstwhenretfrom'ingaframehigherinthestackthantheonewiththeresetlstinit;thishastheeffectthataTHROWtoaframehigherthananUNWINDPROTECTwillcurrentlynotactuallydoitscleanupforms.CAVEAT:CommonLispislexicallyscoped;butInterlispdoesn'tprovideamechanismcapableoffullyimplemetingthelexicalscopinginherentinPROGV,CATCH,andUNWINDPROTECT.SoonemustbepreparedforthesortoflimitationsonsuchcodingthatisencounteredwithERSETQinInterlisp.î Ëï Ýî êïg,q`×î ôïh„î Ëïh„î ôïb5îþîƒî;îÀîóî$Ôî)î,cî0–î8%î:ªî>îCîFlîHñîHñïb5î ôï`Ýî Pî¶îéîÊî#ýî'Yî+Œî3î3òî4Éï`Ýî ôï_…î Ëî ¢î yî PîZîßîdîÀîEîÊî!xî"Oî$Ôï_…î ôï^-î Ëî ¢î yî Pî1î¶î;î—îî ¡î"Oî#ýî&‚ï^-î ôï\Õî Ëï\Õî ôï[}îþîZîßîéî ¡î#& î-:î3î6wî>ï[}î ôïZ%î Ëî ¢îƒîßîdîî—îÊî ¡î!xî%«î-:î1mî3òî5 î8%î=/ïZ%î ôïXÍî Ëî ¢îƒîßî�îÀî—înîEîîóîÊî ¡î!xî%«î-:î1mî8%î9Óî?´ïXÍî ôïWuîÕîîÀîÊî%«î)î/¿î2Dî:ªî>îAbîAbïWuî ôïV î¶îéîEî#ýî(0î/¿î3òî8üî;�îAbîGCîGCïVî ôïTÅîZî¶î î'Yî)Þî.èî3î7N îAbïTÅî ôïSmî Ëî ¢îƒîßîéîEî!xî%«î-:î1mî8üî:ªî?´ïSmî ôïRî ËïRî ôïP½î'îƒî�ïP½î ôïOeî Ëî ¢îƒî¶îÀîî"Oî#&î#ýïOeî ôïN î Ëî ¢îƒî�înîÊî#ýïN î ôïLµî Pîß îî ¡î'Yî)î. î7Nî:ªî?´îCîCïLµî ôïK] îîdî—îóî!xî#ýî%« î.èî4Éî8%î;�î>ÝîCîGCîIÈîIÈïK]î ôïJî¬î¶îdîÀî"Oî'Yî*µî.î1mî8üî>ÝîAbîD¾îHñîHñïJî ôïH­î'îƒîßîÀî"Oî%«î)Þî1mî3òî8%îÝîE•îHîHïEýî ôïD¥îƒîßî—îî!xî%«î)Þî.î1mî6wî>î@‹îGCîJŸîJŸïD¥î ôïCMîÕîî;î—îóî!xî%«î*µî+Œî.è î8% îCîHñîHñïCMî ôïAõî y î�î—ïAõî ôï@�î Ëî ¢î yîZîî ¡ î-:î1m î:ªî>Ýï@�î ôï?Eî'îƒîß î î'Yî,cî.î1mî8üî>îAbîD¾îFlîFlï?Eî ôï=íî¬î1îd î ¡î#&î&‚î-:î4Éî7Nî:ªîAbîHîHñîHñï=íî ôï<•îþîdî—îEî"Oî)î-:î3òî8%î>ÝîB9îGCîGCï<•î ôï;=îZîdîÀî#&î&‚î)Þî,cî0–î3î9Óî>î@‹îB9îHñîHñï;=î ôï9åî'îßî î$Ôï9åî ôï8�î Ëï8�î ôï75î Ëï75î ôï5Ýîþî�î;îî#&î&‚î(0 î3òîÝîCîHñîHñï1Õî ôï0}î Pî¶î; î$Ôî)Þî,cî.î2Dï0}î ôï/%î Ëî ¢îƒîîóï/%î ôï-Íî'îƒî�îÀîEî#&î'Yî,cî.èî2Dî8%î;�î>î@‹îD¾îIÈîIÈï-Íî ôï,uî yîßîînî"Oî(0î-:î/¿ îîE•îHîHï(mî ôï'îÕî1 îî"Oî)î,cî2Dï'î ôï%½î Ëï%½î ôï$e î¶î;înî#&î%«î5 î8%î8üï$eî ôï# î Ëî ¢î y î î%«î)î0–î5 î9Óï# î ôï!µî'î¶î#&î&‚î*µî.èî3î9Óî=/î@‹îHñîHñï!µî ôï ]îþîƒîßîî—îóî'Yî.èî4Éî5 î6wî>ÝîCîHîJŸîJŸï ]î ôïîƒîßîdînîÊ î)î+Œî.èî4Éî5 î6w îCîFlîFlïî ôï­îZîînî!xî#ýî'Yî/¿î6wî9ÓîB9îGCîGCï­î ôïUîþî¬î;în î&‚î(0î-:î3î5 î8üî>îB9îE•îHñîHñïUî ôïýî'îƒîî—îóî#&î&‚î)Þî/¿î3òî5 î:ªî=/î>ÝîCçîIÈîIÈïýî ôï¥î'î¬ înî ¡î)î,cî3òî6wî9Óî@‹îFlï¥î ôïMî ËïMî ôïõî Ëïõî ôï�î¬î�îÀîEî%«î,cî/¿î8%î>ÝîE•îGCîGCï�î ôïEîZîî—î ¡ î*µî.î4Éî;�îCîE•îE•ïEî ôïíîÕî¶î î%«î&‚î)î,cî0–î3î:ªî>îAbîE•îHîHïíî ôï• îî�îÀî ¡î$Ôî'Y î1mî5 î;�î> îGCï•î ôï=î Ëï=î ôïåî Ëïåî ôï �î Ëï �î ôï 5î Ëï 5î ôï Ýî Ëï Ý ² êq?€`½:3î Ëï Ýî êïg,q`×îI“ïh„îJjïh„î ôïb5î Ëïb5î ôï`Ýî Ëï`Ýî ôï_…î Ëï_…î ôï^-î Ëï^-î ôï\Õî Ëï\Õî ôï[}î Ëï[}î ôïZ%î ËïZ%î ôïXÍî ËïXÍî ôïWuî ËïWuî ôïVî ËïVî ôïTÅî ËïTÅî ôïSmî ËïSmî ôïRî ËïR êq?€`½h~SNAIL ~SNAIL r l–ßj/ÿÿ�ïüèÿÿÿÿÿÿ/{ERIS}LIBRARY>CMLSPECIALFORMS.PRESS;1JONL.PA19-Dec-84 01:52:40