CommonLisp-CompatibleArrayFunctionsFile:CMLARRAY.ttyRevised:Feb21,Jul1,andSep28,1983,byJonLWhiteThefollowingfunctionsarebasedonthedefinitionsintheCommonLispcommunity,andprovidemanyfeatureslackinginInterlisp'sARRAYsupport,inparticularmulti-dimensionalarrays,sharedarrays,andsuper-fastaccessing("open-coding"ofaccesswith"unsafe"primitives).Thesedefinitionsfollowthosefromthe"Excelsior"editionoftheCommonLispmanual(5August1983,copyrightGuyL.SteeleJr.)andsomeoftheprosebelowisreproducedfromtheaforesaid"Excelsior"editionbypermission.DocumentationTerminologyNotalloptionsandfeaturesoftheCommonLispspecifictionareimplemented;descriptionsoflimitationsareencolsedasnoteswithindoublesquarebrackets.Furthermore,forthebenefitofInterlisp-Dusers,somenon-portableextensionshavebeenmade,andthesearedescribedasnotedwithinsinglesquarebrackets.Anumberoffunctionstakeargumentsin"keyword"format;thismeansthatthearglist,aftersomepoint,alternatesbetweenanargumentwhichnamesthemeaningofthenextargumentandthenext"real"argument.E.g.,supposeCOLORMYWORLDisafunctionwithconceptuallydozensofparameters,butwhichistypicallycalledwithonlyoneortwoofthemsettoanon-defaultvalue.Thenyoumightsee(COLORMYWORLDSOMEBITMAP'HUEBLUE'DURATION5HOURS)wherethefirstargumentis"required",butalltheothersareoptionalandareobtainedfromtheappropriatepairintherealarglist;inthisexample,onesuch"keyword"argumentiscalledHUE,anditwillbesettothevalueofthevariableBLUE;also"coloring"willlastforadurationoftimefoundinthevariable5HOURS.Asageneralrule,anysymbol("litatom"intheInterlispsense)whichhasa"-"initsname,willhavethose"-"'sremovedintheInterlispincarnation(becauseofweirdpotentialinteractionwithCLISP).Thus,MAKE-ARRAYintheCommonLispmanualbecomesMAKEARRAYintheInterlispworld.Also,sinceInterlispdoesn'thave&optional,&rest,or&keyargumentspreading,thenanyfunctionwithsuchanargumentspectrumwillbeimplementedasano-spreadlambda;curlybracketswillenclosethenameforasequenceofsucharguments.CreationofArraysAnarray,forthepurposeofthisdocumentation,isaninstanceofanewdatatype(calledCMLARRAY),andisnotrelatedtothepreviously-documentedInterlisparrayfacility.Byconvention,allindexingintheCommonLispworldis0-origin.(MAKEARRAY...{keyword-arguments}...)isalistofnon-negativeintegersthataretobethedimensionsofthearray;thelengthofthelistwillbetherank,ordimensionality,ofthearray.NotethatifisNIL,thenazero-dimensionalarrayiscreated.Forconveniencewhenmakingaone-dimensionalarray,thesingledimensionmaybeprovidedasanintegerratherthanalistofoneinteger.Thekeywordargumentsare:ELEMENTTYPE-T,[orNIL,orPOINTER]meansthattheelementsareallgeneralpî êïc/î êïb6qî ðïb6î êï`Þî Áî ˜î oîFîîôîËî¢îyîPî'îþîÕî¬îƒîZî*Ôî/Þî7sï`Þî êï_†î ðï_†î êï^.îàîÖî(-ï^.î êï\ÖîÖî2îŽîêî!oî$Ëî('î+ƒî0�î3î7Eî;~ï\Öî êï[~î ðï[~î êïZ&î ðïZ&î êïXÎî ðïXÎî êïWvî Áî ˜î oîFî¢îî"nî%Êî*Ôî-Yî0µ î:Éî=Nî?ÙïWvî êïV î' îdî Àî'xî+«î3:î9òîüîDãïTÆî êïSnîF îƒîé î,‚î/î4èî9î?ÙïSnî êïR îÕî¬î¶ î%Êî+«î0µî4èî8D îBXîH?ïRî êïP¾î oîË îîéî"nî(Oî-Yî5¿î9î; îA�îDãïP¾î êïOfîFîyîþîZîdî"nî$ó î.0î2cî5¿î>% îH9îH?ïOfî êïNî¢î' îjïNî êïL¶î ðïL¶î êïK^î Áî ˜î oîFîîôîËî¢îyîPî'îþîÕî¬îƒîZî1îîßî¶ î'x î0»ïK^î êïJî ðïJî êïH®î Áî ˜î oîFî¢îþî¶îî&¡î)&î,‚î2cî6– îA�îDÝîDãïH®î êïGV îÕ î Àî#E î-Yî0µî8Dî:Éî?ÓîE´îEºïGVî êïEþîËî¬îîé î*Ôî.0î1Œî8Dî:É îDÝîJ¾îJÄïEþî êïD¦î î î#Eî'xî+«î0µî4î9îüîC/îGhï@žî êï?Fîîyîîî#Eî)& î2cî9î; îC/îGhï?Fî êï=îîôîPîî�îéî$î+«î/î2cî6–îî o îƒîßîéî"nî*Ôî0µî4èî9îüîBXîD ï;>î êï9æîîyîþî¬ î Àî&¡î'xî+«î/î4î6œï9æî êï8Žî Áî ˜î oîF î î#Eî'xî+«î4î9øï8Žî êï76îôîPîZîéî"n î,‚î/Þî3:î6–î%îA�îB^ï3.î êï1Öîyîþî1î;î Àî$î+«î1’ï1Öî êï0~î ðï0~î êï/&î Áî ˜î oîFîËîyî1î;î!—î'x î0µî3:î6–î>üîD ï/&î êï-ÎîôîPîþîZîßî;î#Eî'xî+«î0µî5¿îüîA‡ï-Îî êï,vîP îdî$óî'xî,‚î4è î>üîC/îC5ï,vî êï+î¢îyîƒ î Àî#Eî&¡ î/Þî5¿î%îB^ï'î êï%¾îyî¬îdî Àî$óî(Oî)ýî1Œî4î8D î@°ï%¾î êï$fî ðï$fî êï#î ðï#î êï!¶î ðï!¶î êï ^î Áî ˜î oîFîîôîËî¢îyîPî'îþîÕî¬îƒîZî1îîßî¶î�îdî;îî&¡î)&î.6ï ^î êïî ðïî êï®î Áî ˜î oîFîËî¬îîdî$î&¡î*Ô î7mî9òîî ˜îßîéî"nî)ýî*Ôî.0 î8Dîî êïæ îþîßî;î$î,‚î/Þî2cî9òîüîE´îEºïæî êï ŽîËîþî¬îßîdî Àî(Oî)&î),ï Žî êï 6î ðï 6î êï ÞîFîþîdî Æï Þî êï †î Áî ˜î oîF î‰ï †î êï.î Áî ˜î oîFîîôî¢îyîþîZî�îî&¡î+«î/Þî3:î:Éî>%îA�îBXîH?ï. 7 êq?€[ÇØLisp"pointers";thisisthedefault.-FIXNUM,[orFIXP,orCELL]forentrieswhichareintegersstoredas2'scomplement32-bits[[31-bitsinInterlisp/VAX,36-bitsinInterlisp-10]]-FLONUM,[orFLOATP]entriesareall32-bitIEEEformatfloating-point[[36-bitpdp10formatforInterlisp-10]]Thefollowingtypespecifiersaresub-typesofINTEGERforwhichtheaccessingismuchmoreefficientthanforotherrandomfieldsizes.-(MOD65536)[orDOUBLEBYTE;oradditionally,forInterlisp-Donly,WORDorSMALLPOSP]for16-bitnon-negativeintegers.-(MOD256)[orBYTE,orCHARACTER]for8-bitnon-negativeintegers.-(MOD16)[orNIBBLE]for4-bitnon-negativeintegers.-(MOD2),orBIT,forsingle-bitentries.[[Ingeneral,theCommonLisptypeheirarchyisn'tsupported;thusonlytheexplicitnamesabovewillwork.However,forInterlisp-D,asof28-Sep-83,thetype(MODn)foranyreasonable"n",issupported.]]INITIALELEMENT-ArgumentmustbeaquantityofthetypespecifiedbytheELEMENTTYPEargument,andisusedtoinitalizealltheentriesofthearray.DefaultisNILforpointertype,andzerofornumerictypes.INITIALCONTENTS-Ifthearrayiszero-dimensional,thethisspecifiesitscontents;otherwise,itmustasequencewhoselengthisequaltothefirstdimension,andeachelementthereofmustbeanestedstructureforanarraywhosedimensionsaretheremainingdimensions,andsoon.DISPLACEDTO-Argumentwillbeanarraywhoselinearizeddatasegmentwillbesharedwiththeonebeing"made";seealsotheDISPLACEDOFFSETargumentalso.DISPLACEDINDEXOFFSET-Whenthedatavectorisbeing"shared",thisspecifiestheoffsetfromtheoriginofthedatavectoratwhichthenewarraywillhaveitszero-origin.Theimplementationalconstraints,asspecifiedbythesymbolicconstantsARRAY-RANK-LIMIT,ARRAY-DIMENSION-LIMIT,andARRAY-TOTAL-SIZE-LIMITare:Ranksupto63aresupported;eachindividualdimensionofanarrayisconstrainedonlytobeaFIXP;inInterlisp-D,thetotalstorageforthedatablockofanarraymaynotexceed(2^16-5)*2^5bits,andsinceapointerrequires32bits,thenanarraymaycontainupto2^16-5pointerelements,or2^18-20byteelements;Interlisp/VAXandInterlisp-10mayhaveotherconstraints.[[Thefollowinglimitationsexistasof9-MAY-84:(1)the:FILL-POINTERkeywordargumentisnotimplementedatall;(2)allarraysautomaticallyhavethe:ADJUSTABLEproperty;(3)the"nestedstructures"usedtospecifythe:INITIAL-CONTENTSmaybeeitheranotherarrayofthesamedimensionality,orelsejustlistsoflists.(4)thesymbolicconstantsARRAY-RANK-LIMIT,ARRAY-DIMENSION-LIMIT,andARRAY-TOTAL-SIZE-LIMITarenotactuallyinthecode.Justbeawareoftheselimitsbyreadingthedocumentationpresentedabove.]]Examples:(MAKEARRAY5)-Createaone-dimensionalarrayoffiveelements(MAKEARRAY'(34)'ELEMENTTYPE'(MOD256))--Createatwo-dimensionalarray,3by4,with8-bitelements;(SETQA(MAKEARRAY'(423)'INITIALCONTENTS'(((abc)(123))((def)(312))î êïc8î êïb6qî Áî ˜î oîFîîôîËî¢îyîPî'îZ î"nî&¡î)&î,‚î3@ïb6î êï`Þî Áî ˜î oîFîîôî¢îyî1î�î!—î$î)&î,‚î3:î8Dî; îC/îIîIï`Þî êï_†î Áî ˜î oîFîîôîËî¢îyîPî'î¬î î#Eî)ýî2cî4è îA�îGhï_†î êï^.î Áî ˜î oîFîîôîËî¢îyîPî'î¬ î"tï^.î êï\Öî Áî ˜î oîFîîôî¢îyî1î�î#Eî)ýî-Yî0µî6–î:Éî@ªî@ªï\Öî êï[~ î²ï[~î êïZ&î Áî ˜î oîFîîôîËî¢îyîPî'î¶î Àî&¡î)ý î5ÅïZ&î êïXÎî Áî ˜î oîFîîôîPî¶îé î)&î,‚î4èî7mî>%îA�îF‹îIïXÎî êïWvî Áî ˜î oîFîîôîZîßîî#Eî+«î/Þî3:î8Dî>%îC/îIîIçîJ¾îJÄïWvî êïVî Áî ˜î oîFîîôî¢îyî¬î�îé î)ýî,‚ î8Dî;  îE´îIíïVî êïTÆî Áî ˜î oîFîîôîËî¢îyîPî'îZîß î$î'xî-Y î8Dî?ÙïTÆî êïSnî Áî ˜î oîFîîôî¢îyî¬îßî;î#Eî%Ê î/î2cî7m îBXîIíïSnî êïRî Áî ˜î oîFîîôî¢îyî¬îîdî$î'xî(Oî-Y î8Dî?ÙïRî êïP¾î Áî ˜î oîFîîôî¢îyî¬îî�î Àî$ î-Yî4ïP¾î êïOfî Áî ˜î oîFîîôî'î¶î î(Oî,‚î4èî9ò îC/îGbîGbïOfî êïNîLïNî êïL¶î Áî ˜î oîFîîôîËî¢îþî�î!—î&¡î*Ôî/Þî0µî8Dî;  îF‹îIîIïL¶î êïK^î žïK^î êïJî Áî ˜î oîFîîôîËî¢ îßî;î"nî&¡î)&î,‚î/Þ î9î=Nî?Ó îIíïJî êïH®î Áî ˜î oîF îßîåïH®î êïGVî Áî ˜î oîFîîôî¢îyîî;î Àî"nî)ýî,‚î/Þî4îüîBXîBXïGVî êïEþ îþîïEþî êïD¦î Áî ˜î oîFîîôîËî¢îyîPî¶îî!—î%Êî(Oî0µî4î7mî>%î@ªîDîIçîJ¾îJÄïD¦î êïCNî Áî ˜î oîFîîôîËî¢îyîPîî�îéî#Eî)ýî/î2cî6–î9òî@ªîEºïCNî êïAöî Áî ˜î oîFî¶î¼ïAöî êï@žî Áî ˜î oîFîîôî¢îyîþîZîdîéî/î2cî6–î>üîBXîIíï@žî êï?Fî Áî ˜î oîFîîôîËî¢îyîP î�îî#Eî$óî,‚î1Œî7mî9òî>üîA�îDÝîIï?Fî êï=îî Áî ˜î oîFîîôîËî¢îyîP î�îéî$î*Ôî1Œî5¿î8Dî9òî?ÓîH9îH9ï=îî êï<–îFîLï<–î êï;>î Áî ˜î oîFîîôîËî¢îyîPîÕîßîé î)&î,‚î/Þî8D îBXîE´îH9îH9ï;>î êï9æî uï9æî êï8Žî Áî ˜î oîF î‰ï8Žî êï76î Áî ˜î oîFîîôî¢îyîî;î Àî#Eî(Oî-Y î6–î:ÉîA�îE´îH9îH?ï76î êï5Þî Áî ˜î oîFîîôîËî¢îyîPî1îdî Àî$î)&î/Þî0µî4î8Dî; îIîIï5Þî êï4†î Áî ˜î oîFîîôîËî¢îyîPîßîéî Àî!—î!�ï4†î êï3.î Áî ˜î oîFîï3.î êï1Öî Áî ˜î oîFîîôî¢îyî¬îî;î$î&¡î+«î4î8Dî@ªîDîIçîIíï1Öî êï0~î Áî ˜î oîFîîôîËî¢îyîPîƒîßî Àî#Eî&¡î*Ôî0µî3:î8Dî; î>üîDîH9îH9ï0~î êï/&îî#ï/&î êï-Îî Áî ˜î oîFîîôîËî¢îyîPî¬ î Æï-Îî êï,vî ðï,vî êï+îFî� î'xî)ýî2cî4èî8Dî?ÓîH9îH?ï+î êï)Æîî-Yî0µîDîH9îH?ï)Æî êï(nîôîyîþîƒîß î$î(O î1Œî9òîüîDîF‹îF‘ï(nî êï' îþî1î¶î;îéî$óî'x î2cî5¿î:ÉîA�îDÝîH9îH?ï'î êï%¾îî'î¬î1î;î!—î$óî*Ô î5¿î:Éî>%îC/îDÝîDÝï%¾î êï$fî¢î¨ï$fî êï#îyîþîî;î Àî%Êî)&î/Þî2cî4èî:ÉîA�îIçîIíï#î êï!¶î oî'îZî À î,‚î/Þ î:Éî>%îBXîGbîGhï!¶î êï ^ îï ^î êïî ðïî êï®îôîZ î"nî'xî)ýî,‚î4ï®î êïVî Áîîy î;î$óî,‚î/î2c îüîC/îC5ïVî êïþî ÁîîyîZ î$î(Oî+« î5¿î=Tïþî êï¦î Áîîyî1 î#Eî'xî)ýî0µî4îC/îF‹îH?ï¦î êïNî Áî ˜î oîFîîþî¶î Àî#Eî&¡î*Ôî8Dî:Éî>üîC/îH9îIíïNî êïöî Áî ˜î oîFîî-ïöî êïžî Áîîyîî"nî1ŒîDÝîGhïžî êïFî Áî ˜î oîFîî"nî%Êî)&î0µî3:î6–î; îîï>î êïæî Áî ˜î oîF îƒîîßî�îdî#Eî$óî2cî7mî9òî>%îDãïæî êï Žî Áî ˜î oîF îƒîßîd î(Oî-Yî2cî3:î5¿î; î=Nî@°ï Žî êï 6î Áî ˜î oîFîîôîËî¢ î¶î!—î#Eî%Êî(Oî,‚î1Œî9!ï 6î êï Þî Áî ˜î oîFîPîþ î;î!—î#Eî%Êî4î4ï Þî êï †î Áî ˜î oîFîîôîËî¢îyîPî'îþîÕî¬îƒîZî1îîßî¶î�îdî;î#Eî$óî'xî)ýî+«î.6ï †î êï.î Áî ˜î oîFîîôîËî¢îyîPî'îþîÕî¬îƒîZî1îîßî¶î�îdî;îîéî#Eî$óî'xî)ýî+«î.6ï. ' êq?€[Ç]((ghi)(231))((jkl)(000)))))(MAKEARRAY'(423)'INITIALCONTENTSA)(SETQB(MAKEARRAY107'ELEMENTTYPE'BIT))(SETQC(MAKEARRAY8'ELEMENTTYPE'BYTE'DISPLACEDTOA'DISPLACEDINDEXOFFSET51)ThusBandCsharetheirdataportion;thesecondelementofC,withindex1,isthebyteobtainedbyconcateningthebitswithindices67through74ofB.NotethatelementtypespecificationofBYTEisequivalenttothatinthefirstexampleof(MOD256).Compatibililtynote:Formulti-dimensionarrays,bothLispMachineLispandFORTRANstoreincolumn-majororder;MacLispstoresarraysinrow-majororder.A"row"isthecollectionofallelementsobtainedbyholdingallbutthelastindexconstant,andcyclingthroughthatindexinorderfrom0toitslimit.[Thispackagegenerallystoresinrow-majororder,buttheremaybeocasional"gaps"intheindex-sequencingiftheALIGNMENToptionsisused.Seebelowforadescriptionofthenon-CommonLispoptionALIGNMENT.]AccessingandChangingtheElementsofanArrayThemainprimitivetoaccesstheelementsofanarrayiscalledAREF(for"ArrayREFerenceofelement").(AREF...{subscripts}...)Thisreturnstheelementofspecifiedbythesubscripts(whicharealltheremainingargumentsafter),andeachsubscriptmustbeanon-negativeintegerlessthanthecorrespondingarraydimension.[ThemainprimitivetochangethecontentsofanarrayiscalledASET(for"ArraySETvalueofelement"),modeledaftertheMITLispMachinename.Ultimately,ASETwilloperatesoastotranslateintothesamecodethatSETFwouldhaveproducedthusInterlispusersneednotfearthatsuchcodewon'trunona"by-the-book"CommonLispimplementation.(ASET...{subscripts}...)Changesthecontentsoftheelementofaccessedby(AREF...{subscripts}...)tobe.][[CommonLispdoesnotrequireseparatenamesfortheupdatefunctions;updatingmayalwaysbespecifiedbytheSETFconstruct,whichtakesanaccessexpressionanda"newvalue"muchthewayInterlisp'sCHANGEdoes.Asof28-Sep-83,thereisnochangetranentryforAREF,butitisexpectedtobeaddedsomeday.]]InformationalFunctions(ARRAYELEMENTTYPE)Returnsatypespecifierforthesetofobjectsthatcanbestoredin.Thissetmaybelargerthanthesetrequestedwhenwascreated;thatis,(ARRAYELEMENTTYPE(MAKEARRAY5'ELEMENTTYPE'(MOD8)))couldbe(MOD8),orBYTE,or(MOD256),etc.,orevenPOINTER.[[asof28-Sep-83,onlythetypesenumeratedaboveunderMAKEARRAYaresupported;thereisno"coercionupwards"inordertofindatype-specifierwhichcouldholdtheelementsofsomenon-enumeratedtype.RememberalsothattheInterlisp-Dversionsupports(MODn)forallintegraln.]](ARRAYRANK)Returnsthenumberofdimensions(axes)of;toparalleltheindexingrange,thisisazero-originnumberandthuswillbeanon-negativeî êïc8î êïb6qî Áî ˜î oîFîîôîËî¢îyîPî'îþîÕî¬îƒîZî1îîßî¶î�îdî;îîéî#Eî$óî'xî)ýî+«î.6ïb6î êï`Þî Áî ˜î oîFîîôîËî¢îyîPî'îþîÕî¬îƒîZî1îîßî¶î�îdî;îîéî#Eî$óî'xî)ýî+«î0»ï`Þî êï_†î Áî ˜î oîF îƒîßî�îî-Yî/ ï_†î êï^.î Áî ˜î oîFîPîþ î;î!— î,‚î2cî3:î3@ï^.î êï\Öî Áî ˜î oîFîPîþ î;îîéî!— î,‚î1Œî1’ï\Öî êï[~î Áî ˜î oîFîîôîËî¢îyîPî'îþîÕî¬îƒîZî1îîßî¶î�îdî;îîéî Àî!— î,‚î-Yî/î/ ï[~î êïZ&î Áî ˜î oîFîîôîËî¢îyîPî'îþîÕî¬îƒîZî1îîßî¶î�îdî;îîéî Àî!—î4î6œïZ&î êïXÎî Áî ˜î oîFîyî'îƒî1î;î#Eî'xî/î2cî8Dî>üîA�îDîH9îH?ïXÎî êïWvî Áî ˜î oîFîîôîþîƒîîdî!—î)&î+« î5¿î9î=NîA�îH9îJ¾îJÄïWvî êïVî Áî ˜î oîFîîôî¬î1î¶î;îîéî$î(Oî/î3: î>üîA�îE´îH9îH?ïVî êïTÆî Áî ˜î oîFîîô î1î¶îéî"nî%Êî*Ôî1Œî4î8Dî=Nî>%î>+ïTÆî êïSnî ðïSnî êïR îƒî�îéî-Yî4î8DîE´îIîIïRî êïP¾î¢î¬î1 î$î)ýî0µî6–îüîGbîGbïP¾î êïOfîúïOfî êïNî ˜î¢î'îƒ î Àî#Eî&¡î.0î5¿î8Dî>üîBXîE´îH?ïNî êïL¶îî'î�îéî&¡î-Yî1Œî6–î9î>%îBXîDîF‹îIïL¶î êïK^îËî¢î¬îdî%Êî+«î.0î6–î+ïAöî êï@žî ðï@žî êï?FîFîyîßîdî#Eî&¡î.0î0µî3:î8Dî:Éî@ªîD ï?Fî êï=îîîþîdîé î(Uï=îî êï<–î ðï<–î êï;>îôî¬î î$óî(Oî),ï;>î êï9æî Áî ˜î oîFîyî1î�î#Eî%Êî,‚î4èî7mî:É îDîIçîIíï9æî êï8ŽîFî¢îþîdî%Êî*Ôî3:î6–î:ÉîC/îGbîIçîIíï8Žî êï76î ˜ îƒî;î"nî&¡î)ý î5¿î:É îC5ï76î êï5Þî ðï5Þî êï4†îîPî¶î;î$î'xî/î1Œî4î9î; îA�îE´îF‹îIíï4†î êï3.î Áî¢îþîî� î%Êî,‚î1Œî4èî8Dî%îBXîF‹îJ¾îJÄï0~î êï/&î ÁîËî'î¬îZ î$ î-Yî9øï/&î êï-Îî Áî ˜î oîFîP î�î#Eî&¡ î1Œî4èî5Åï-Îî êï,vî ÁîyîÕîdîéî#Eî)ýî,‚î3:î:Éî=Nî=Tï,vî êï+î Áî ˜î oîFîPîîd î(Oî+«î,ˆï+î êï)Æî ÁîFîË îåï)Æî êï(nî ðï(nî êï' îÕîîdî$î+«î0µî4î7mî=N îF‹îF‘ï'î êï%¾îyîÕî¶î;î&¡î)&î,‚î0µ î9òî>üîDîF‹îF‘ï%¾î êï$fîË îîdîî#Eî)&î-Yî0µî4 î>%îDîH?ï$fî êï#î oîô î1î;î Àî#E î,‚î1Œî4èî9òî=Nî?ÓîBXîIï#î êï!¶î oîôîþ îjï!¶î êï ^î ðï ^î êïî ðïî êï®î Áî ˜î oîFîîôîËî¢îyîPî'îþîÕî¬îƒîZî1îîßî¶ î'xî/ ï®î êïVî ðïVî êïþîî Æïþî êï¦î Áî ˜î oîFîþî¬îßî#Eî&¡î)ýî-Yî/Þî6–î:Éî>%î@ªîF‹îIîIï¦î êïNîyîPîƒîßî;î Àî&¡î*Ôî.0î1Œî9òî>%îDÝîH9îH?ïNî êïöîyî¬îîïöî êïžî Áî ˜î oîFîd î&¡î(O î3:î8Dî;¦ïžî êïFîôîyî¬îî�î!—î$î(Oî-Yî2cî4èî9î?ÙïFî êïîîî¢ îßîî"nî'x î0µî5¿î:ÉîC/îF‹îF‘ïîî êï– î'î1î¶î;î&¡î.0î0µî5¿î8Dî% îJ¾îJÄï–î êï>îôîþî1î�î$î&¡î*Ô î7mîî êïæîîy î�î#Eî*Ôî/î1Œî4èî8Dî?ÓîC5ïæî êï Žî ðï Žî êï 6 î'îåï 6î êï Þî Áî ˜î oîFîþîZî;î À î)ýî/Þî2cî9òîüî@ªî@ªï †î êï. îÕîÛï. Í êq?€[LJinteger.(ARRAYDIMENSION)Returnsthelengthofdimensionnumberof[whichmaybeanykindofarray,i.e.,anyinstanceofthe\CMLARRAYdatatype];shouldbeanon-negativeintegerlessthantherankof.(ARRAYDIMENSIONS)Returnsalistwhoseelementsarethedimensionsof.[Thesecondargument,,isnotaCommonLispargument--itisprovidedinInterlispsothatonemayspecifytheNOCOPYoption.Defaultactionistoreturnacopyoftheinternaldimensionslist.](ARRAYTOTALSIZE)Returnsthetotalnumberofelementsin,calculatedastheproductofallthedimensions.Roughlyequivalentto(APPLY'TIMES(ARRAYDIMENSIONS))Notethatthetotalsizeofazero-dimensionalarrayis1.[Thesecondargument,,isnotaCommonLispargument--itisprovidedinInterlispinordertofindouthowmuchspaceisactuallyoccupiedbythearray,includinganygapscausedbytheALIGNMENToption.](ARRAYINBOUNDSP...{subscripts}...)Thispredicatecheckswhetherthesubscriptsarealllegalsubscriptsforandistrueiftheyare;otherwiseitisfalse.Thesubscriptsmustbeintegers.Thenumberofsubscriptssuppliedmustequaltherankofthearray.E.g.,ifHAisathree-dimensionalarray,then(ARRAYINBOUNDSPHA42562)makesthechecksuchthat(AREFHA42562)willnotcauseanillegalsubscripterror.(ARRAYROWMAJORINDEX...{subscripts}...)Thisfunctiontakesanarrayandvalidsubscriptsforthearray,andreturnsasinglenon-negativeintegerlessthanthetotalsizeofthearraythatidentifiestheaccessedelementintherow-majororderingoftheelements.Thenumberofsubscriptssuppliedmustequaltherankofthearry.Eachsubscriptmustbeanon-negativeintegerlessthanthecorrespondingarraydimension.Foraone-dimensionalarray,theresultofthisfunctionalwaysequalsthesuppliedsubscript.[However,iftheALIGNMENToptionisusedforamulti-dimensionalarrayinInterlisp-D,thenthemaximumlinearizedindexwillexceedthevaluereturnedbyARRAYTOTALSIZE.Insuchacase,thevaluereturnedby(ARRAYTOTALSIZET)willbethefieldsizeperelementtimesoneplusthemaximumlinearizedindex.Thequantity(fetch(CMLARRAYCMLIMAX)of)willalwaysbethismaximumlinearizedindex.]ChangingtheDimensionsofanArray(ADJUSTARRAY)Takesanarray,andalistofdimensionsjustaswithMAKEARRAY;thenumberofdimensionsspecifiedbymustequaltherankof.Returns,whosecomponentshavebeenupdatedtoconformtothenewspecifications(butifthenewdimensionsrequiremorespaceintheblockdataarea,thiswillcauseacopyingintoanewlyallocatedblock,andwillbeDISPLACEDTOtothisnewblock.)[[NoneofthekeywordoptionsmentionedintheCommonLispmanualaresupportedî êïc8î êïb6qî¨ïb6î êï`Þî ðï`Þî êï_†îZî î*Úï_†î êï^.î Áî ˜î oîFîþîZî;î Àî)&î/ î:Éî=NîDîIï^.î êï\ÖîFîËî'îZîßî Àî%Êî)&î0µî3:î6–î>ü îGhï\Öî êï[~ î¬î�îî À î+«î2cî6–î:Éî>%îBXîDÝîDÝï[~î êïZ&îyîïZ&î êïXÎî ðïXÎî êïWvî1îé î*ÚïWvî êïVî Áî ˜î oîFîþî¬îßîéî'xî*Ôî.0 î7mî9òîA�îBXîC/îF‘ïVî êïTÆîËî1 î$óî'xî*Ôî,‚ î5¿î=Nî?ÓîBXîDÝîDÝïTÆî êïSnîyîïSnî êïRî oîÕîZî�îéî#Eî)ýî-Yî3:î9òî:ÉîA�îGbîIçîIíïRî êïP¾î oîPîþî1î¶îî&¡ î/Þî4îïP¾î êïOfî ðïOfî êïNîZî î),ïNî êïL¶î Áî ˜î oîFîþîZîdî#Eî%Êî-Yî/Þî7m î@ªîC/îF‹îF‹ïL¶î êïK^îÑïK^î êïJî oîËî' î;îî%Ê î/î1Œî1’ïJî êïH®î Áî ˜î oîFî'îî(Oî/äïH®î êïGVîîPî¬î¶îéî"nî$î2cî7mî9òî%îE´îGhïEþî êïD¦îPîÕîßîdî!—î$óî(Oî,‚î1Œî4î; îC/îE´îH?ïD¦î êïCNîËî1î�î Àî&¡î)&î,‚î4èî;¦ïCNî êïAöî ðïAöî êï@žîZîî"n î-Yî0µî1’ï@žî êï?Fî Áî ˜î oîFîyîßî Àî'xî*Ô î4î7mî:Éî?Ó îIîIï?Fî êï=îîFîþîZîßîî!—î%Êî)ýî*Ôî3:î5¿î8Dî>%î>üîBXîBXï=îî êï<– î'î-ï<–î êï;>îî¢îîßî;î$î&¡ î/Þî7mî; î@ªîDîH9îJ¾îJÄï;>î êï9æîFî'îþîÕîßîdîéî"nî$î3:î9î=Nî=Tï9æî êï8Žî Áî ˜î oîFî¶î;îéî"nî%Êî%Ðï8Žî êï76îôîPîZî�î Àî%Êî(Oî)ýî,‚î/Þî4î7mîüîE´îEºï76î êï5ÞîPî`ï5Þî êï4†î ðï4†î êï3.î¶î"nî%Ê î0µî4î4îï3.î êï1Öî Áî ˜î oîFîyîîî!—î&¡î)ýî/ î8Dî; î>üîDÝîGhï1Öî êï0~î¢îPî1 î$î*Ôî/î3:î6–î; î?ÓîBXîE´îJ¾îJÄï0~î êï/&î îZî¶î#Eî)ýî,‚î/Þî8Dî?ÓîBXîE´îE´ï/&î êï-Îîï-Îî êï,vîFî'î¬ îéî'xî+«î0µî4î8Dî:Éî>%îC/îDîGhï,vî êï+îPîƒîî¶ î&¡î-Yî1Œî5¿î9 îDÝîIï+î êï)Æ î'îþîZîî'xî-Yî0µî6–î9î=NîDÝîIíï)Æî êï(nîËî'î¶ î$óî%Êî.0î0µî4î%îC/îF‹îF‹ï$fî êï#î#ï#î êï!¶îyîþî"nî)&î+«î/Þî2cî5¿î:Éî>üîBXîH?ï!¶î êï ^îôîPîƒîßî!— î*Ôî0µî1Œî2cî5¿î<}ï ^î êïî Áî ˜î oîFî'î�î$î&¡î-_ïî êï®îîþîƒî¶î"n î+«î2cî3:î3@ï®î êïVî ðïVî êïþî ðïþî êï¦î ðï¦î êïNî ðïNî êïöî Áî ˜î oîFîîôîËî¢îyîPîßî; î'xî)ýî,‚î0»ïöî êïžî ðïžî êïF îÕî�î*ïFî êïîî Áî ˜î oîFîPîÕî¶îî Àî$óî'x î0µî4èî7mî;  îDÝîGhïîî êï–îËîP î�î$óî'xî4èî9î>%îA�îE´îGhï–î êï>îyîPîî!—î&¡ î/Þî4î8Dî>üîA�îGhï>î êïæî oîËî' î Àî$óî'xî*Ôî.0 î7mî>%îBXîGbîIïæî êï ŽîFîPîƒî�îdî!—î%Êî*Ôî,‚î3:î7mî9î>%îF‹îF‹ï Žî êï 6îúï 6î êï ÞîFîþî1î¶ î%Êî(Oî,‚î/Þî5Åï Þî êï †îËîPî¬îdî$î,‚î/î2c î; îA�îDÝîDÝï †î êï.îï.ÿ ç êq?€[LJasof28-Sep-83.]]ExtensionstotheInterlispCommonLispArrayFunctionsAlthoughthefollowingfacilitiesaren'tspecifiedbythe"ExcelsiorEdition",theymaybequiteusefulinInterlisp-Dsystemsprogramming:*)Filepkgcom:CMLARRAYSissimilartotheBITMAPScom--namely(CMLARRAYS...)willsaveandrestorethevalueofeachglobalvariable,assumingitholdsaCMLARRAY.*)AdditionalELEMENTTYPEvaluesforMAKEARRAY:-XPOINTERislikePOINTER,exceptthattheentriesaren'treferencecountedforthegarbagecollector;beware,beware!-DISPLACEDTOBASEislikeDISPLACEDTOexceptitsvalueisjustarandompointer/address,ratherthananotherCMLARRAY.Thisway,onecanusetheCommonLisparrayfunctionstoaccesspartsofInterlisp-D'smemorysuchasthescreenbitmap.-ALIGNMENTisformulti-dimensionalarrays;eachrowmayberequiredtobeginamultipleofsomeinteger,withnullsorzerosfillinganyspacebetween"rows".Forexample,itmightbethatabitmaparraymusthavetherasterscansbeginningonawordboundary;sincethereare16bits/word,thenanalignmentof16wouldbeused.*)FunctionsInterfaceingtoLISTPs:(LISTARRAY)Thesecondandthirdargumentsareoptional,andhavemeaningsimilartothecorrespondingargumentstoSUBSTRING,butnegativeindiciesaren'tallowed.Elementsareselectedfromtheinrow-majororder,andCONS'supintoalist.(FILLARRAY)SimilartoLISTARRAY,exceptthattheelementsofthearestoredintothecorrespondingpartsofthe.Asaconvenience,ifisn'taLISTP,thenitisconvertedinto(LIST);furthermore,iftherearen'tenoughelementsintofillouttherangespecifiedbyand,thenthelastelementofisrepeateduntilfinished.Thus,forexample,onecouldfillanarraywithasinglevaluebyaconstructlike(FILLARRAYSOMEARRAY(LISTTHISVAL))*)"Fast"accessingfunctions:(PAREF...{subscripts}...)(NAREF...{subscripts}...)(LAREF...{subscripts}...)(16AREF...{subscripts}...)(8AREF...{subscripts}...)(4AREF...{subscripts}...)(1AREF...{subscripts}...)TheseareessentiallythesameasAREF,buthaveaconsequencethat,forPAREF,mustbeaPOINTERorTarray;andcorrespondingly,forNAREFaFIXNUMarray,forLAREFaFLONUMarray,for16AREFaDOUBLEBYTEor(MOD65536)array,for8AREFaBYTEor(MOD256)î êïc8î êïb6qî oîô îïb6î êï`Þî ðï`Þî êï_†î ðï_†î êï^.î ðï^.î êï\Öî Áî ˜î oîFîîô î1î¶îî'x î0µî5¿î=Tï\Öî êï[~î ðï[~î êïZ&îyîÕî; î'xî-Yî5¿î8Dî;  îDÝîDÝïZ&î êïXÎîïXÎî êïWvîîyîþîîéî"n î,‚î3: î=TïWvî êïVî ðïVî êïTÆî ÁîFîþî1îî"nî#Eî%Êî,‚î/î2cî9îüîD ïTÆî êïSnî Áî ˜î oîFîîô î1îî$óî*Ôî,‚î.0î/Þî0»ïSnî êïRî Áî ˜î oîFîyî¬îî Àî$î)&î+«î/Þî5¿î=NîDîDïRî êïP¾î¨ïP¾î êïOfî Áî ˜î oîFîËîÕîƒîïOfî êïNî ðïNî êïL¶î ÁîF îƒ î!—î'xî*Ô î3@ïL¶î êïK^î Áî ˜î oîFîîôîËî¢îPî'î¶î;î"nî)ýî/Þî4î7mî>%îDîDïK^î êïJîïJî êïH®î Áî ˜î oîFîîôîËî¢îyîPî'îþîÕî�îéî#Eî)ý î3:î4î:Éî@°ïH®î êïGVî Áî ˜î oîFîîôîËî¢îPî'î!—î$î(O î2cî8Dî; î@ªîB^ïGVî êïEþî Áî ˜î oîFîîôîËî¢îyîPî'îþîÕîî¶î!—î/Þî5¿î9òî@ªîH?ïEþî êïD¦î Áî ˜î oîFîîôîËî¢îyîPî'îþîÕîî;î!—î$óî(Oî+« î4èî9òîBXîDÝîIíïD¦î êïCNî Áî ˜î oîFîîôîËî¢îyîPî'îþîÕîßîd î)&î/î3:î5¿î9î>üîDãïCNî êïAöî Áî ˜î oîFîîôîËî¢îPî'î�îî"nî1Œî8Dî9î=Nî@ªîDîF‹îF‘ïAöî êï@žî Áî ˜î oîFîîôîËî¢îyîPî'îþîÕîdîéî$óî&¡î.0î0µî4èî%î@ªîE´îH9îH9ï=îî êï<–îî#ï<–î êï;>î Áî ˜î oîFîîôîËî¢îyîPî'îþîÕîƒîdî"nî&¡î*Ôî.0î4î9îA�îDîE´îIï;>î êï9æî Áî ˜î oîFîîôîËî¢îyîPî'îþîÕî;îî$î)&î,‚î/ î8DîüîGbîIçîIçï9æî êï8Žî žï8Žî êï76î Áî ˜î oîFîîôîËî¢îyîPî'îþîÕîßîdî!�ï76î êï5Þî ðï5Þî êï4†î ÁîFî¬ î!—î$î*ï4†î êï3.î Áî ˜î oîFîîô î1îé î*Ô î4ï3.î êï1Öî Áî ˜î oîFîîôîËî¢îþîßî;î#Eî+«î/î7mî:Éî>üîE´îE´ï1Öî êï0~î¢î¨ï0~î êï/&î Áî ˜î oîFîîôîËî¢î'îƒ î#Eî+«î.0 î7mî:ÉîBXîIï/&î êï-Îî Áî ˜î oîFîîôîËî¢îƒîîéî'xî*Ôî2cî6–î9òî@ªîC/îC/ï-Îî êï,vîï,vî êï+î Áî ˜î oîFîîôîËî¢îƒîßî Àî#Eî'xî)&î-_ï+î êï)Æî Áî ˜î oîFîîô î1îéî%Ê î0µ î9øï)Æî êï(nî Áî ˜î oîFîîôîËî¢îZîß î$î)ýî.0î1Œî9î; î>üîDÝîH9îH?ï(nî êï'î Áî ˜î oîFîîôîËî¢îƒî¶î î*Ôî/Þî2cî5¿î=Nî>%î@ªîBXîBXï'î êï%¾ îï%¾î êï$fî Áî ˜î oîFîîôîËî¢î'îîî Àî&¡î*Ôî-Yî/Þî8DîüîC/îF‹îJ¾îJÄï ^î êïî Áî ˜î oîFîîôîËî¢îZîßî Àî#Eî*Ôî/Þî8Dî9î>%îA�îIîIïî êï®îFîLï®î êïVî Áî ˜î oîFîîôîËî¢î¬îßîdî"nî&¡î(Oî.0î3:î5¿î7mî?ÓîDîD ïVî êïþî Áî ˜î oîFîîôîËî¢îyîPî'îþ î;î&¡î+«î3@ïþî êï¦î ðï¦î êïNî ÁîFî'î� î$ùïNî êïöî Áî ˜î oîFî'îþî¶î î)ýî-Yî.6ïöî êïžî Áî ˜î oîFî'îþî¶î î)ýî-Yî.6ïžî êïFî Áî ˜î oîFî'îþî¶î î)ýî-Yî.6ïFî êïîî Áî ˜î oîFîþî¶î î)ýî-Yî.6ïîî êï–î Áî ˜î oîFî'îþî¶î î)ýî-Yî.6ï–î êï>î Áî ˜î oîFî'îþî¶î î)ýî-Yî.6ï>î êïæî Áî ˜î oîFî'îþî¶î î)ýî-Yî.6ïæî êï Žî Áî ˜î oîFîPî¬ î Àî$î(Oî*Ôî/Þî3:î7mî9î9ò îDîIîIï Žî êï 6î uï 6î êï Þî Áî ˜î oîFîîôîÕî�î Àî#Eî$óî+«î.0î/Þî5¿î9îGbîIíï Þî êï †î Áî ˜î oîFîîôîþî¬î�î"nî#Eî&¡î+«î-Yî3:î9î...{subscripts}...)(NASET...{subscripts}...)(LASET...{subscripts}...)(16ASET...{subscripts}...)(8ASET...{subscripts}...)(4ASET...{subscripts}...)(1ASET...{subscripts}...)TheseareessentiallythesameasASET,buthaveaconsequencethat,forPASET,mustbeaPOINTERorTarray;andcorrespondingly,forNASETaFIXNUMarray,forLAREFaFLONUMarray,for16ASETaDOUBLEBYTEor(MOD65536)array,for8ASETaBYTEor(MOD256)array,for4ASETaNIBBLEor(MOD16)array,andfor1ASETaBITor(MOD2)array.Furthermore,whencompiled,thesefunctionswillbecompiled"open",withlittleornoerrorchecking,realizingordersofmagnitudespeed-upoverASET;althoughsomecheckingisperformedtoinsurememorysystemintegrity(i.e.thatthewordmodifiedwillactuallybewithinthedatablockofthespecifiedarray),****thereisnocertificationastowhichwordwillbeclobberedshouldthesubscriptsbe"outofrange".AswithAREF,therun-timecodetogglesontheglobalvariableAREFSissyFLG,andwillcallthefunctionASETwhentheflgisnon-NIL.However,onemayomiteventhesesimplechecksfor"allout,noholdsbarred"codebyprefixinga\tothesenames(e.g.\PASET...).Ifyouusethisoption,thereisnoguaranteeofmemoryintegrity,andlikelynoonewillwanttolistentoreportsofany"system"bugsencounteredwhilesuch"unsafe"optionswerebeingexercised.î êïc8î êïb6qî Áî ˜î oîFîîôîÕî¬îîî Àî&¡î)&î-Yî0µî6–î9òî=NîBXîDîGbîIïb6î êï`Þî Áî ˜î oîFîîPîÕî¶î�î“ï`Þî êï_†î Áî ˜î oîF î1îdî%Êî*Ôî3:î7mî9òîA�îH9îH9ï_†î êï^.îî#ï^.î êï\Öî Áî ˜î oîFîîôîÕîZîßîéî(Oî0µî6–î9îA�îIîIï\Öî êï[~îî#ï[~î êïZ&î Áî ˜î oîFîîôîþîÕîdî Àî%Êî(Oî*Ô î6–î9î; î?ÓîDîF‹îF‹ïZ&î êïXÎî#ïXÎî êïWvî Áî ˜î oîFîîôî'î¬î;î$î'x î0µî3:î7mî9òî@ªîA�îBXîDÝîH9îIíïWvî êïVî Áî ˜î oîFîîô î1î�î$î(Oî/Þî6–î9îî ˜î žï;>î êï9æî Áî ˜î oîFîîôîÕîZî�îéî%Êî)&î,‚î1Œî3:î6–î9î=Nî?ÓîE´îF‹îF‘ï9æî êï8Žî Áî ˜î oîF î1îdî%Êî*Ôî3:î7mî9òîA�îH9îH9ï8Žî êï76îî#ï76î êï5Þî Áî ˜î oîFîîôîÕîZîßîéî(Oî0µî6–î9îA�îIîIï5Þî êï4†îLï4†î êï3.î Áî ˜î oîFîîôîþîÕîdî!—î)&î+«î4î6–îüîDÝîH9îH9ï1Öî êï0~îLï0~î êï/&î Áî ˜î oîFîîôîþîƒîßî#Eî)ýî.0î3:î5¿î8D îDîF‹îIîIï/&î êï-Îî Áî ˜î oîFîîôîþî1îdîéî(Oî.0î1Œ î:Éî=NîA�îDîJ¾îK•îK•ï-Îî êï,vî žï,vî êï+î Áî ˜î oîFîîôî'î1î�î$î(Oî/î1Œî4èî:ÉîBXîBXï+î êï)Æ îÛï)Æî êï(nî Áî ˜î oîFîîôîPîƒî¶îî&¡î*Ôî/î2cî5¿î8Dî?ï(nî êï'î Áî ˜î oîFîÕî1î�î Àî$óî)ýî/Þî5¿î9î=NîA�îDîIîIï'î êï%¾î Áî ˜î oîFîîôî¬îßîdî%Êî'xî)&î+«î0µî5¿î:Éî@ªîE´îF‹îH?ï%¾î êï$fî Áî ˜î oîFîîôîPî¬îßî!—î&¡î)&î+«î4î6–îLIBRARY>CMLARRAY.TTY;1JONL.PA 9-May-84 03:14:05