Home
MIT Scheme Reference Manual - College of Engineering, Forestry
Contents
1. 96 substring match backward ci 96 substring match forward 95 substring match forward ci 95 substring move left osse isses 101 substring move right osos ies 101 substring prefix Ccif 5 c seva s 96 substring prefix 29 o hes 96 substring r plaCe 6s e arii reri 101 substring r place ssi s 101 substring search all 94 substring search backward 94 substring search forward 93 substring suffix ci f iios eaa psss 96 substring s ffix iloluasc ia se Roda bs 96 substring u pcase oie sebe ete eee et riera 91 substring upper case se eme 91 SUPStLINGS obs peer es cere AFEN reus 90 S bstring 23 i cee eee e m RI PAN ea 89 S bstring i riz oebeerem EXU pu eb PRU 94 S bVecbOE iranieni rv weper eter ePRIPCPE 121 s bvector list ie ese eR e dues 109 S bvector fill i eerskberaeveRerrbe pes 121 s bvector mov left ope p es 122 subvector move right sss sss 122 symbol gt string 00 9 51 129 symbol append 4s ere e e RE RE PR 130 symbol hash Ie KEE RESO ERRU ERES 131 symbol hash mod o c ure b en 131 MIT Scheme Reference SynbOol amp i 2s reskue eR RR ue bd 131 Symbol e ou ctos 24 ele euet ebd MI a Eds 129 Synt x rulesS a ace ume cues be ern ed 38 SYStEM CLOCK seleecbee le9ide
2. 04 89 HUM OF gm 57 number external representation 60 number pseudo random lusus 74 numeric character defn issues 83 numeric precision inexact 00 60 numerical input and output seus 68 numerical operations sseee essere ee 60 numerical types 43 eso Lore RO PRG b a 57 O object Washing 43i exper REOR R Rte 151 odd number 22e parere tura aaa m eme 62 oldest as pathname component 225 one dimensional table defn 141 operand of procedure call defn 14 Operating System Interface 221 operator of procedure call defn 14 option run time loadable 153 157 191 209 217 optional component in entries lusus 5 optional parameter defn 15 order of argument evaluation 14 ordering of characters 0 79 ordering of numbers ercer 2e rer PED os 61 Ordering Of Strings iawn eere PER REG 89 OS 2 eraphicss aod dor RR DORIA 295 pii PD 179 Output forms uiua rame PNU UE eases 41 output port operations ss eee eese 200 output port console 0 00 0 eee 181 output port current defn 179 output port fil ic osobhi ef De pente he ees 181 output pori sUritig 52 4 chore tetara akai et 183 output procedures eee eee eee 188 output XM
3. 174 environment assigned 174 environm ent bindings 2 0 2 6 ess o den 173 environment bound names 173 environment bound sees 174 environment definable 174 environment define ess eee 175 environment define macro 175 environment has parent 173 environment lookup eese 174 environment lookup macro 174 environment macro names 173 environment parent eee 173 environment reference type 174 enyironment 22 bp odes eme oh orbe e ee beg 173 of object lisse EE aude 186 198 eof on input port 2 9 p rrr 200 repr 239 ed hashes e Debbie Lei eR 149 eg hash mod iei gta eee ged 145 149 OQ cee 51 54 112 114 128 130 140 141 142 144 145 151 152 268 equal hash iii mt atin cas ted oe ded 149 equal hash mod s oo gn nns 145 149 equal 23 51 55 112 114 140 141 144 145 eqv hash socis reco ea 149 eqv hash mod i aiso eR ee ebbe ehe 149 324 eqv 9 26 51 101 106 112 114 140 141 144 er macro transformer i 3 ees AT OPL O coo irse E aues 4 257 259 261 262 error irritant noise 0 261 error bad range argument 275 error datum out of range 275 error derived file e neces 277 error derived port
4. 279 condition type datum out of range 275 condition type derived file error 2T condition type derived port error 20h condition type divide by zero 278 condition type error 261 270 272 273 condition type file error 216 condition type file operation error 182 230 232 233 276 condition type floating point overflow 278 condition type floating point underflow bikesdegccdes o Pm bedebeneHk ded 278 condition type illegal datum 273 condition type inapplicable object 276 condition type macro binding 173 condition type no such restart 266 279 condition type not loading 279 condition type port error 2V7 condition type primitive procedure error rnt 279 condition type serious condition 258 273 condition type simple condition 258 280 condition type simple error 259 273 condition type simple warning 259 280 MIT Scheme Reference condition type subprocess abnormal terminatiOn is c ecc RR Per 249 condition type subprocess signalled 249 condition type subprocess stopped 249 condition type system call error 279 condition type unassigned variable 6 173 278 condition type unbound variable 6 19 277 condition type variable error 277 condition type warning 258 280 condition type wrong number of arguments
5. 97 re substring matCh 4i en d enn 97 re substring search backward 97 re substring search forward 97 r ad i snetenesse kia 4 8 78 105 128 179 186 read buttonon os2 graphics device 299 r ad chdr des neri ERE 179 185 186 read charon input port 0 198 read char no hamg s o leve rp RR ed 186 read line i2 gebe E eue eturE S eberiies 187 read only 2 2lobIe ere R4esugep rv ne meds 30 read parser buffer char 205 read Sbtring o eese t amier s d kirn aE 186 read stringon input port 199 read string dd pd eR eh brace 187 read substringon input port 199 read s bstring oiri a e re p ey IA 187 read user eventon os2 graphics device 299 read utf8 code point e s 85 real part 22 24 Re er Urs rud Tes 67 real time clock m eer 246 real T oolssseictisruses6eaPe donasse 2h doas 60 record accessoE is os oe ae eee 132 record constru ctor iie once esa se take 132 record modifier 2 2 ecu bid b dne de 132 r cord predicate lx ub aed hoe ae 132 record type descriptor s 133 record type field names sees 133 record type name ce eee pedes 133 record type ci pre Oraino eiaa 133 Xecord icinsslixieb ei i ERR PIA ue rcp e 133 redisplay ho0Kk 2 2 loi e pie DR Eg 251 red ce io sible bx ERG pP MEN E bes 115 red ce right ll s4 e edo ered amet 116 regexp Erou
6. list foo foo foo bar gt Hf t Sometimes it is useful to be able to introduce a new identifier that is guaranteed to be different from any existing identifier similarly to the way that generate uninterned symbol is used make synthetic identifier identifier procedure Creates and returns and new synthetic identifier alias that is guaranteed to be different from all existing identifiers Identifier is any existing identifier which is used in deriving the name of the new identifier This is implemented by syntactically closing identifier in a special empty environment 2 11 4 Explicit Renaming Explicit renaming is an alternative facility for defining macro transformers In the MIT Scheme implementation explicit renaming transformers are implemented as an abstraction layer on top of syntactic closures An explicit renaming macro transformer is defined by an instance of the er macro transformer keyword er macro transformer expression special form The expression is expanded in the syntactic environment of the er macro transformer expression and the expanded expression is evaluated in the transformer environment to yield a macro transformer as described below This macro transformer is bound to a macro keyword by the special form in which the transformer expression appears for example let syntax In the explicit renaming facility a macro transformer is a procedure that takes three arguments a form a renaming p
7. 63 access time of file 00 236 access used with set lssslllelllluu 22 addition of numbers 0 00 62 address hashing ren 149 CUL rnm 40 45 alist defn cec ermee IR RUECRRSCARIRI 139 Alphabet Unicode 00200 eee 85 alphabetic case of interned symbol 128 alphabetic case of string 04 91 alphabetic case insensitivity of programs defn Dicunt ba Me doe ure d br ERE Vid qp Dc 11 alphabetic character defn uuuu 83 alphanumeric character defn 83 anonymous syntactic keyword 35 apostrophe as external representation 22 appending of bit strings 124 appending of list ecis 2er oreas 111 336 appending of strings 0 00 92 appending of symbols 130 appending to output file 0 182 application hook defn 165 170 application of procedure lesse 165 apply hook defn ecce eremo 170 argument evaluation order uue 14 ASCII character seseesses ne 80 ASSIOMIMNEME sooo oie Dope TN WE Rire DERE 22 association list defn 00 000 139 association table defn 0000 142 asterisk as external representation 123 attribute of file 1 nore rr rs 231 B backquote as external representation 24 b
8. Luusssuuue 234 file converting pathname directory to 229 file end of file marker see EOF object 186 file input and output ports 181 filename defn i e aeree x etr 221 filling of bit string 23 vr Rer mb 126 filling of strihg eh r erm Ree eo 101 filling of Vectors iceri pisri enira rrr coe 121 filtering OF l8b o rhiierorpsi anaietan 112 fiium defn cerren ee ne teer eee tpa 70 fonui defn ax 22 de sede LOS b IRIS 73 Aiid binding 2 c nese wee Nees 18 262 263 flushing of buffered output 188 forcing of promise 2 6566 eset ek ew aes 139 foreign type declarations 304 IOII s Rasiya iid hace sed wre e EXPLERE P de 40 form special defn 000 13 formal parameter list of lambda defn 15 format directive defn 00 191 format entry 4 iced oce idee UR Pe AUG 5 G generalization of condition types 258 259 271 242 generalization of condition types defn 257 generating external representation 189 gensym see uninterned symbol 130 geometry string X graphics 289 graphic character defn suus 83 SLAP ICS isi ho dog aang aug a aeaiia RR Pres 281 graphics bitmaps sessies eR ind eek Las 287 graphics buffering of output 285 graphics elIrcle 2 sage secscupro b sees cease 294 graphics Cpp eeir
9. CONS cadr exp caddr exp In this style only the introduced keywords are closed while everything else remains open Note that rsc macro transformer and sc macro transformer are easily interchangeable Here is how to emulate rsc macro transformer using sc macro transformer This technique can be used to effect the opposite emulation as well define syntax push sc macro transformer lambda exp usage env capture syntactic environment lambda env make syntactic closure usage env make syntactic closure env SET caddr exp make syntactic closure env CONS cadr exp caddr exp To assign meanings to the identifiers in a form use make syntactic closure to close the form in a syntactic environment make syntactic closure environment free names form procedure Environment must be a syntactic environment free names must be a list of identi fiers and form must be a form make syntactic closure constructs and returns a syntactic closure of form in environment which can be used anywhere that form could have been used All the identifiers used in form except those explicitly excepted by free names obtain their meanings from environment Here is an example where free names is something other than the empty list It is instructive to compare the use of free names in this example with its use in the loop example above the examples are similar except for the source of
10. 15 procedure of application hook 170 procedure primitive 02065 165 procedure type cr erias inent YES EET A RES 165 product of numbers 00e ee eee 62 promise dei i ise cepi IDE eH RIPerte 133 promise construction lesse esses 133 promise forcing crier P kok weeds wi aed EPA 133 PLOMPlING 2 2 5290 s ea eae 194 proper tail recursion defn 3 property list 224 enire RR RR em 139 141 142 property list of symbol 128 protocol restart defn 0 0 00 263 pseudo random number 05 74 Q quote as external representation 22 quotient of integers 00 eee eee 63 quotient of numbers 20 000 62 quoting seedee ri P RICE pe reed D ese 22 RARS enirar aene Meme e RR ERE e rS 3 random number 54 565 65 sess rre 74 rational simplest defn suus 65 raw mode of terminal port s 203 record type descriptor defn 132 recursion see tail recursion 3 red black binary trees 153 reduction Of ist ssc shia goa das E todd oe BERNT 115 reference variable defn 0 13 referentially transparent 000 35 region of variable binding do 28 region of variable binding internal definition 21 region of variable binding lambda
11. 15 region of variable binding let 17 region of variable binding let 17 region of variable binding letrec 18 region of variable binding defn 8 regular expression searching string for 97 regular file predicate for 234 rehash size of hash table defn 148 rehash threshold of hash table defn 148 relative pathname defn ssuuueu 230 remainder of integers 63 renaming procedure 20e eee eee 47 renammg of file sii cuts oes ee ue 232 REP 160pitiis emere Ee RES 259 261 262 266 REP loop defn 0 00 e eee eee eee 7 REP loop environment of 0000 y replacement of string component 101 representation external defn 8 required parameter defn 00 15 MIT Scheme Reference resizing of hash table 146 resources X graphics 00 eee eee 288 rest parameter defn 04 15 restart defn Jeden Pete RR Ee 263 restart effector defn 20 00 263 restart protocol creere sE ub eve vw at 263 restarts bound ces me REIR 269 271 result of evaluation in examples 4 result unspecified defn 0 00 5 reversal of lst 232 oz eam be Ree ree 117 REXP abstraction 22 2 hxc Orte 98 ringing the
12. optional rehash after gc hash table constructor key hash key weak cons weak pair car weak car weak cdr weak set cdr if default object rehash after gc f rehash after gc hash table key hash hash table procedure hash table key hash table procedure hash table make entry hash table procedure hash table entry valid hash table procedure hash table entry key hash table procedure hash table entry datum hash table procedure hash table set entry datum hash table procedure Each procedure returns the value of the corresponding argument that was used to construct hash table The following procedures return the contents of a hash table as a collection of entries While the data structure holding the entries is newly allocated the entries themselves are not copied Since hash table operations can modify these entries the entries should be copied if it is desired to keep them while continuing to modify the table hash table entries list hash table procedure Returns a newly allocated list of the entries in hash table hash table entries vector hash table procedure Returns a newly allocated vector of the entries in hash table Equivalent to list gt vector hash table entries list hash table 11 5 Object Hashing The MIT Scheme object hashing facility provides a mechanism for generating a unique hash number for an arbitrary object This hash number unlike an object s address is unchanged by garbage collection The ob
13. K In any section entitled Acknowledgements or Dedications preserve the sec tion s title and preserve in the section all the substance and tone of each of the contributor acknowledgements and or dedications given therein L Preserve all the Invariant Sections of the Document unaltered in their text and in their titles Section numbers or the equivalent are not considered part of the section titles M Delete any section entitled Endorsements Such a section may not be included in the Modified Version N Do not retitle any existing section as Endorsements or to conflict in title with any Invariant Section If the Modified Version includes new front matter sections or appendices that qualify as Secondary Sections and contain no material copied from the Document you may at your option designate some or all of these sections as invariant To do this add their titles to the list of Invariant Sections in the Modified Version s license notice These titles must be distinct from any other section titles You may add a section entitled Endorsements provided it contains nothing but endorsements of your Modified Version by various parties for example statements of peer review or that the text has been approved by an organization as the authoritative definition of a standard You may add a passage of up to five words as a Front Cover Text and a passage of up to 25 words as a Back Cover Text to the end of t
14. Procedure Template starts with the name of the variable to which the procedure is bound followed by a description of the procedure s arguments The arguments are described using lambda list notation see Section 2 1 Lambda Expressions page 15 except that brackets are used to denote optional arguments and ellipses are used to denote rest arguments The names of the procedure s arguments are italicized in the printed manual and uppercase in the Info file When an argument names a Scheme data type it indicates that the argument must be that type of data object For example 6 MIT Scheme Reference cdr pair procedure indicates that the standard Scheme procedure cdr takes one argument which must be a pair Many procedures signal an error when an argument is of the wrong type usually this error is a condition of type condition type wrong type argument In addition to the standard data type names pair list boolean string etc the following names as arguments also imply type restrictions e object any object e thunk a procedure of no arguments e x y real numbers e q n integers e k an exact non negative integer Some examples list object procedure indicates that the standard Scheme procedure list takes zero or more arguments each of which may be any Scheme object write char char output port procedure indicates that the standard Scheme procedure write char must be called with a character char
15. e i e LINEA i Sere edes 88 String downcase isoi addo RE Ihe 91 string downcase iie uiia es 91 String fillt ii is222gwoe4 Ra d ERE 101 string find next char 2 csc aires Lgs 94 string find next char ci 94 string find next char in set 95 string find previous char 95 string find previous char ci 95 string find previous char in set 95 string h sh iolefbe bere Rb a es 90 131 string hash mod lisse sse elus 90 145 string head csse a E a ERE REY 92 string length i 29e3oc e Mee pi 58 89 102 string lowe r casef ii 26a rendait aer 91 string match backward 96 string match backward ci 96 string match forward 0005 95 string match forward ci 95 string maximum length 102 String nullbf 2 2 522 6941204930 pte doque 89 string p d left 2 osuere 92 string pad right iiec seed dens 92 string prefix Cif i errr rer er des 96 string prefix ee eee one ebd 96 String ALOE os cc ce eer eek eas 9 89 103 string replac eese e ehem 101 String replac 22 0 04 PIE REB EET 101 string search all ji ceases ce e rus 94 string search backward 93 string search forward 93 String set 215 420 p 09 wf Deeds 9 89 129 String suffix Ccif i d ue pe eq eRERRARA 96 String SufflX cided seed had obs d
16. gt 3 3 4 5 gt 3 20 3 gt 1 3 1 z procedure l z procedure 1 z is equivalent to z 1 1 z is equivalent to z 1 4 MIT Scheme signals an error of type condition type bad range argument in this case Chapter 4 Numbers 63 abs x procedure abs returns the magnitude of its argument abs 7 7 quotient ni n2 procedure remainder n1 n2 procedure modulo n1 n2 procedure These procedures implement number theoretic integer division for positive integers nl and n2 if n3 and n4 are integers such that Ny nona N4 0 n4 lt n then quotient nl n2 gt n8 remainder nl n2 gt n4 modulo n1 n2 gt n4 For integers nl and n2 with n2 not equal to 0 nl n2 quotient nl n2 remainder nl n2 gt dit provided all numbers involved in that computation are exact The value returned by quotient always has the sign of the product of its arguments remainder and modulo differ on negative arguments the remainder always has the sign of the dividend the modulo always has the sign of the divisor modulo 13 4 gt 1 remainder 13 4 gt 1 modulo 13 4 gt 3 remainder 13 4 gt 1 modulo 13 4 gt 3 remainder 13 4 gt 1 modulo 13 4 gt 1 remainder 13 4 gt 1 remainder 13 4 0 gt 1 0 inexact Note that quotient is the same as integer truncate integer floor n1 n2 procedure integer ceiling n1 n2 procedure integer trunca
17. sm is priini nis 277 error divide by Zzero osse iik bukes 278 error file operation error 276 error no such restart sess 279 error wrong number of arguments 275 error wrong type argument 274 error wrong type datum 274 eval si nseweesed ruben prd DEI naaa 175 OVEN feb ieg cane de Bc eos eed ded a ries ue EEEE GEGE 62 OXACt PINEKACE eccerre dese sea RR Rd 67 exact integer cist i dee dde aa i PAESE 61 exact nonnegative integer 61 exect rationa8l 5 22 2 secant Bei eae ea do 61 RACE ou eie ded aestus Sede te cake tara outta 61 except last pair ce eee eee 112 except last pair krepa pEi ipii 112 ORD once 620 EAEE AE A E Rt NOE EL Rus 66 XD sione Pee E E EE 67 extend top level environment 176 false dae LER WE Ho tpa dea ERREUR aE 127 false pesmi ceened e ra ED EROR dane sd I2 Bete GD M PEE 110 fil aCC688 2 ahd Ga doe reki RED Bad hack ese 235 FiLE AacceSS tAMe amp ie cusses ei eae aged anew ace 236 file access time direct 236 file access time indirect 236 file attributes 2 4d ERR bu Rd 291 file attributes direct 237 file attributes indirect 29 file attributes access time 237 file attributes allocated length 238 file attributes change time 237 file attributes gid 0
18. string gt decoded time time string procedure Converts a time string argument to decoded time format pp string gt decoded time Fri 23 Apr 1999 17 31 47 0400 decoded time 30 second 47 minute 31 hour 17 4 day 23 month 4 4 year 1999 day of week 4 daylight savings time 0 zone 4 string gt file time time string procedure Converts a time string argument to file time format string gt file time Fri 23 Apr 1999 17 31 47 0400 924899507 15 5 5 External Representation of Time The normal external representation for time is the time string as described above The procedures in this section generate alternate external representations of time which are more verbose and may be more suitable for presentation to human readers decoded time date string decoded time procedure decoded time time string decoded time procedure These procedures return strings containing external representations of the date and time respectively represented by decoded time The results are implicitly in local time decoded time date string local decoded time Tuesday March 30 1999 decoded time time string local decoded time 11 22 38 AM day of week long string day of week procedure day of week short string day of week procedure Returns a string representing the given day of week l he argument must be an exact non negative integer between O and 6 inclusive day of week long
19. 87 end of subvector defn 119 entity defn o egere nies Sones on oe eh LERE PI 170 entry fonat v Re tee ee ee eek EP E 5 environment defn 5 eere pere sings 6 environment current eeseeeeeeee 176 environment current defn 00 7 environment extension defn 6 environment initial defn 000 7 environment interpreter s s sese 176 environment of procedure 15 environment procedure closing defn 15 environment procedure invocation defn 15 environment top level 000 176 EOF object construction 198 EOF object predicate for 0 186 equivalence predicate defn Ls 51 equivalence predicate for bit strings 125 equivalence predicate for boolean objects 127 equivalence predicate for characters 79 equivalence predicate for fixmums 71 equivalence predicate for flonums T3 equivalence predicate for numbers 61 equivalence predicate for pathname host 229 equivalence predicate for pathnames 226 MIT Scheme Reference equivalence predicate for strings 89 equivalence predicate of hash table 143 equivalence predicates for characters 79 error messages conventionsS 260 error in examples 00
20. A uppercase letter left parenthesis space the space character newline the newline character Case is significant in character but not in character name If character in character is aletter character must be followed by a delimiter character such as a space or parenthesis Characters written in the notation are self evaluating you don t need to quote them A character name may include one or more bucky bit prefixes to indicate that the character includes one or more of the keyboard shift keys Control Meta Super Hyper or Top note that the Control bucky bit prefix is not the same as the ASCII control key The bucky bit prefixes and their meanings are as follows case is not significant Key Bucky bit prefix Bucky bit Meta M or Meta 1 Control C or Control 2 Super S or Super 4 Hyper H or Hyper 8 Top T or Top 16 For example c a Control a meta b Meta b c s m h a Control Meta Super Hyper A The following character names are supported shown here with their ASCII equivalents Some of the details in this section depend on the fact that the underlying operating system uses the ASCII character set This may change when someone ports MIT Scheme to a non ASCII operating system 78 Character Name altmode backnext backspace call linefeed page return rubout space tab ASCII Name ESC US BS SUB LF FF CR DEL HT MIT Scheme Reference In additi
21. A rectangle of width w and height h is copied from position src x src y of dib Raster op is supposed to allow the source and destination to be combined but I don t think I got this right so stick to SRCCOPY delete dib dib handle handle procedure Return type bool Calls the DeleteDIB entry of DIBUTILS DLL Note that the parameter is a handle and not a dib This allows us to destroy a DIB and reclaim its memory by knowing only the handle value and not needing the dib record The importance of this is that if the dib record is GC ed then a GC hook can reclaim the storage knowing only the handle delete dib dib dib procedure Return type bool This procedure calls delete dib to reclaim the storage occupied by a DIB After being deleted the DIB should not be used This procedure allows the programmer to reclaim external heap storage rather than risking it running out before the next garbage collection dib height dib dib procedure Return type int Calls the DibHeight expand entry of DIBUTILS DLL which returns the height of the bitmap in pixels dib width dib dib procedure Return type int Calls the DibWidth entry of DIBUTILS DLL which returns the width of the bitmap in pixels copy bitmap bm hbitmap procedure Return type hbitmap Calls the CopyBitmap of DIBUTILS DLL which creates a new bitmap with the same size and contents as the original create dib width int height int style int de
22. e A syntactic environment maps identifiers to their meanings More precisely it deter mines whether an identifier is a syntactic keyword or a variable If it is a keyword the meaning is an interpretation for the form in which that keyword appears If it is a variable the meaning identifies which binding of that variable is referenced In short syntactic environments contain all of the contextual information necessary for interpreting the meaning of a particular form e A syntactic closure consists of a form a syntactic environment and a list of identifiers All identifiers in the form take their meaning from the syntactic environment except those in the given list The identifiers in the list are to have their meanings determined later A syntactic closure may be used in any context in which its form could have been used Since a syntactic closure is also a form it may not be used in contexts where a form would be illegal For example a form may not appear as a clause in the cond special form A syntactic closure appearing in a quoted structure is replaced by its form 2 11 3 2 Transformer Definition This section describes the special forms for defining syntactic closures macro transform ers and the associated procedures for manipulating syntactic closures and syntactic envi ronments sc macro transformer expression special form The expression is expanded in the syntactic environment of the sc macro transformer expression and
23. lleeeluuesss 6 logical operations on fixnums T2 long precision of inexact number 60 loopback interface 2 cess ee eee 256 looping see iteration expressions 27 IOWELCASE 34 34 250 ho daeees aot eta head etee 11 lowercase character conversion 79 lowercase in string eese 91 MACOS 2a pns tre pode ER aetna ae 34 macro Key word israr ree Saeed eon grag dd E Hn 34 macro transformer 34 41 47 MACTO USCS ces cae L anaa eE eei PCR RETE 34 magnitude of real number 63 manifest types defn 00 000 3 mapping of listi siert gas Ae ooh als bose e reis 114 mapping of Stream s 22e Rr RR ROSE 13r mapping of vector dise reme hs 120 Matcher language 22 e emen 209 Matcher procedure 00eeeeeeeee 209 matching of strings 95 maximum length of string defn 102 maximum of numbers 0 00 62 memoization of promise 133 merging of pathnames 227 meta bucky bit prefix defn Tf method unparser defn 205 193 minimum of numbers 000005 62 modification time of file 236 modification of bit string 126 modification of string 00 101 modification of vector 2 00 I21 modulus of hashing pr
24. lllllls lesen 22 construction of bit string 123 construction of cell sesuuuus 131 construction of character 00 80 construction of character set 83 construction of circular list LET construction of continuation 167 construction of EOF object 198 construction of file input port 182 construction of file output port 182 construction of hash table 143 construction OF list cic ciuem Reb ees 108 construction of pail 2sisa sse ene 106 construction of pathname 222 225 construction of port type 05 197 construction of procedure 00 15 construction of promise 004 133 construction of stream 00 0000 135 construction of string 2 2 eese 88 construction of string input port 183 construction of string output port 184 construction of symbols 129 construction of vector 0000 119 construction of weak pair lusus 137 Continuati 2 64 ves echoed dae ee pr va 167 continuation alternate invocation 168 continuation and dynamic binding 19 control bucky bit prefix defn 77 conventions for error messages 260 conventions lexical 222 cer sees eee oh 10 con
25. make syntactic closure env a an alias Aliases are implemented as syntactic closures because they behave just like syntactic closures most of the time The difference is that an alias may be bound to a new value for example by lambda or let syntax other syntactic closures may not be used this way If an alias is bound then within the scope of that binding it is looked up in the syntactic environment just like any other identifier Aliases are used in the implementation of the high level facility syntax rules A macro transformer created by syntax rules uses a template to generate its output form substi 46 MIT Scheme Reference tuting subforms of the input form into the template In a syntactic closures implementation all of the symbols in the template are replaced by aliases closed in the transformer envi ronment while the output form itself is closed in the usage environment This guarantees that the macro transformation is hygienic without requiring the transformer to know the syntactic roles of the substituted input subforms identifier object procedure Returns stt if object is an identifier otherwise returns f Examples identifier a dtt identifier make syntactic closure env a dit identifier a gt df identifier a gt df identifier 97 gt f identifier f gt f identifier a gt f identifier a gt f The predicate eq is used to det
26. x08 means the shift key was pressed x10 means the control key was pressed and x20 means the alt key was pressed 1 device A close event The user has selected the close button from the system menu or typed Alt f4 4 2 device gained A focus event If gained is t the keyboard focus is being gained and if gained is it is being lost 3 device code flags repeat A keyboard event This is much too complicated to describe here See the OS 2 toolkit documentation for details 4 device xl xh yl yh A paint event Part of the graphics device window that was obscured has been revealed and the Presentation Manager is informing the window that it must repaint that area Scheme will take care of the painting for you so this event isn t very useful 5 device width height A size change event The size of the graphics device window has changed and width and height specify the new size in pels pixels 6 device shown A visibility event Indicates that the graphics device window has been hidden or revealed If shown is t the window is hidden and if it is t the window is shown 7 device source mouse 8 device source mouse A menu command Source specifies which menu item was selected to cause this event and mouse is a boolean indicating whether the item was selected with the mouse or the keyboard The event type number 7 indicates a command from a WM_COMMAND message while 8 is a command f
27. xml parameter entity name value record type The xml parameter entity record represents a parameter entity declaration Name is an XML name for the entity Value is the entity s value either a string an xml uninterpreted record or an xml external id record xml unparsed entity name id notation record type The xml unparsed entity record represents an unparsed entity declaration Name is an XML name for the entity Id is an xml external id record Notation is an XML name for the notation xml notation name id record type The xm1 notation record represents a notation declaration Name is an XML name for the notation Id is an xml external id record xml external id id uri record type The xml external id record is a reference to an external DTD This reference con sists of two parts id is a public ID literal corresponding to the PUBLIC keyword while uri is a system literal corresponding to the SYSTEM keyword Either or both may be present depending on the context Each is represented as a string Chapter 15 Operating System Interface 221 15 Operating System Interface The Scheme standard provides a simple mechanism for reading and writing files file ports MIT Scheme provides additional tools for dealing with other aspects of the operating system e Pathnames are a reasonably operating system independent tool for manipulating the component parts of file names This can be useful for implementing defaulting of file
28. 1 3 3 Identifiers An identifier is a sequence of one or more non delimiter characters Identifiers are used in several ways in Scheme programs e An identifier can be used as a variable or as a syntactic keyword e When an identifier appears as a literal or within a literal it denotes a symbol Scheme accepts most of the identifiers that other programming languages allow MIT Scheme allows all of the identifiers that standard Scheme does plus many more MIT Scheme defines a potential identifier to be a sequence of non delimiter characters that does not begin with either of the characters or Any such sequence of characters that is not a syntactically valid number see Chapter 4 Numbers page 57 is considered to be a valid identifier Note that although it is legal for 4 and to appear in an identifier other than in the first character position it is poor programming practice Here are some examples of identifiers lambda q list gt vector soup Viva lt a34kTMNs the word recursion has many meanings Chapter 1 Overview 11 1 3 4 Uppercase and Lowercase Scheme doesn t distinguish uppercase and lowercase forms of a letter except within character and string constants in other words Scheme is case insensitive For example Foo is the same identifier as FOO and x1AB is the same number as X1ab But a and A are different characters 1 3 5 Naming Conventi
29. 264 MIT Scheme Reference reporter that can be invoked to display a description of the restart used for example by the interactive debugger Invoking a restart is an indication that a handler has chosen to accept control for a condition as a consequence the effector of the restart should not return since this would indicate that the handler declined to handle the condition Thus the effector should call a continuation captured before the condition signalling process began The most common pattern of usage by signalling code is encapsulated in with simple restart Within this chapter a parameter named restarts will accept any of the following values e A list of restart objects e A condition The procedure condition restarts is called on the condition and the resulting list of restarts is used in place of the condition e The symbol bound restarts The procedure bound restarts is called with no ar guments and the resulting list of restarts is used in place of the symbol e If the restarts parameter is optional and is not supplied it is equivalent to having specified the symbol bound restarts 16 4 1 Establishing Restart Code with simple restart name reporter thunk procedure Invokes thunk in a dynamic environment created by adding a restart named name to the existing named restarts Reporter may be used during the execution of thunk to produce a description of the newly created restart it must either be a procedure of one
30. 4 7 1 Fixnum Operations sseese esses eens 70 4 7 2 Flonum Operations 00 eee eee eee ito 4 8 Random Numbers 000 eeee cece eee eens 74 5 Characters iesus o os saie eee ee iow ee ees TT 5 1 External Representation of Characters T 5 2 Comparison of Characters 0 000 cece eee ene eee 79 5 3 Miscellaneous Character Operations 0 79 5 4 Internal Representation of Characters uuu 80 5 5 ISO 8859 1 Characters ssss esses eee eee ee 82 5 6 Character Sets 0 cece eee een 82 Dil UmiGode uu eas ecd er d tae a UE aus be 84 D SUNnESlosesupRQedr e we Radius s E esd OR RE 87 6 1 Construction of Strings 0 cece eee eee eee 88 6 2 Selecting String Components 0 0 eee ee eee 88 6 3 Comparison of Strings esses seoran ss na aa autaa ana 89 6 4 Alphabetic Case in Strings 0 000 eee eee eee eee 91 6 5 Cutting and Pasting Strings 000 ee eee 92 6 6 Searching Stringss cesses cede ebbe bet RE epe pete 93 6 7 Matching Strings lssseeesssseessseess eee ee 95 6 8 Regular Expressions 0 000 0 cee ee eee eee ee eee 96 6 8 1 Regular expression procedures 005 97 6 8 2 REXP abstraction sse eese eese eee 98 6 9 Modification of Strings ssseessseseeeelee ee eee 101 6 10 Variable Length Strings ssseee esses 102 0 11 Byte Vectis sao
31. 8 variable entry category 22006 5 variable identifier as 0000 10 Vector defn ret rer ReReRIE RR E ES 119 vector index defn 2 005 119 vector length defn 2 0 0000 119 Vector Byte oeni oec beide de e xo eed 103 vector converting to list 109 version pathname component 223 virtual coordinates graphics defn 282 W scu 303 weak pair defn sssesleeeeueeuue 137 weak pair and 1D table 141 weak types defn 00 0 20s e eee 3 weakly held keys of hash table 143 weight balanced binary trees 156 whitespace character defn 83 whitespace in programs defn 10 Win32 API names bet geeaed php ed es 308 Wins graphic8 xri ee ERR dies oad 292 Windows types re ERE ER ee 304 working directory see current working directory m PT 230 X display graphics 0 0002 ee eee 289 X geometry string graphics 289 X PraphiCS bebe elaoleeeseows den POE 288 X resources graphics 000 eee 288 X window system ssssse leen 288 AX ML maine 2 42 ite cease Ies oed ueque 217 XML names ccd erre oe beta Seay CHER 217 KIMI OU PUG ieser eres cee ay sighs a eee emer 217 XML Parser sc i2 cbc ethpaeg tenets odd 217 Short Contents Acknowledgements ew aco
32. DEG exporte sarosar vb ERR EE nee 312 DLL GDI32 DLE utere ERE 307 DLL KERNEL32 DLL 307 DLL loading cis sobs dh seis aa Fale RE 307 DLL USER32 DLL 5 ccc en bade 307 dot as external representation 105 dotted notation for pair defn 105 dotted pair see pair 00 000 105 double precision of inexact number 60 double quote as external representation 8T drawing arcs and circles graphics 290 drawing mode graphics defn 284 dynamic binding 18 262 263 dynamic binding and continuations 19 dynamic binding versus static scoping T dynamic types defn 00005 3 E e as exponent marker in number 60 effector restart defn 0 263 element of list defn 4 105 ellipse graphics ssec op andere ttm tbe Rene 294 ellipsis in entries occae Rr ns re Rd 5 else clause of case expression defn 25 else clause of cond expression defn 25 empty list defn 0 2 0 005 105 empty list external representation 105 empty list predicate for 04 110 empty stream predicate for 136 empty string predicate for 89 end of file object see EOF object 186 end of substring defn 00
33. Otherwise name must a symbol and that symbol is used as the prefix define structure foo conc name moby a b defines accessors moby a and moby b and modifiers set moby a and set moby b define structure foo conc name f a b defines accessors a and b and modifiers set a and set b type representation type structure option This option cannot be used with the type descriptor option By default structures are implemented as records The type option overrides this default allowing the programmer to specify that the structure be implemented using another data type The option value representation type specifies the alternate data type it is allowed to be one of the symbols vector or list and the data type used is the one corresponding to the symbol If this option is given and the named option is not specified the representation will not be tagged and neither a predicate nor a type descriptor will be defined also the print procedure option may not be given define structure foo type list a b make foo 1 2 e 1 2 Chapter 2 Special Forms 33 named expression structure option This is valid only in conjunction with the type option and specifies that the structure instances be tagged to make them identifiable as instances of this structure type This option cannot be used with the type descriptor option In the usual case where expression is not given the named option causes a type descriptor and predicate
34. This matches one or more occurrences of the mexp operand It is equivalent to seq mexp mexp 212 MIT Scheme Reference mexp matcher expression This matches zero or one occurrences of the mexp operand It is equivalent to alt mexp seq sexp expression matcher expression The sexp expression allows arbitrary Scheme code to be embedded inside a matcher The expression operand must evaluate to a matcher procedure at run time the pro cedure is called to match the parser buffer For example matcher seq a sexp parse foo p expands to lambda b1 let Gt p1 Cget parser buffer pointer b1 and match parser buffer char b1 a if parse foo b1 if match parser buffer char b1 b t begin set parser buffer pointer b1 p1 f begin set parser buffer pointer b1 p1 The case in which expression is a symbol is so common that it has an abbreviation sexp symbol may be abbreviated as just symbol with pointer identifier mexp matcher expression The with pointer expression fetches the parser buffer s internal pointer using get parser buffer pointer binds it to identifier and then matches the pattern spec ified by mexp Identifier must be a symbol This is meant to be used on conjunction with sexp as a way to capture a pointer to a part of the input stream that is outside the sexp expression An example of the use of with pointer appears above see wit
35. active restarts The other two operations invoke restart and invoke restart interactively allow restart effectors to be invoked once the restart object has been located In addition there is a data abstraction that provides access to the information encapsu lated in restart objects bound restarts procedure Returns a list of all currently active restart objects most recently installed first bound restarts should be used with caution by condition handling code since it reveals all restarts that are active at the time it is called rather than at the time the condition was signalled It is useful however for collecting the list of restarts for inclusion in newly generated condition objects or for inspecting the current state of the system find restart name restarts procedure Returns the first restart object named name in the list of restarts permissible values for restarts are described above in Section 16 4 Restarts page 263 When used in a condition handler find restart is usually passed the name of a particular restart and the condition object that has been signalled In this way the handler finds only restarts that were available when the condition was created usually the same as when it was signalled If restarts is omitted the currently active restarts would be used and these often include restarts added after the condition ocurred invoke restart restart argument procedure Calls the restart effector encapsulated i
36. and may also be called with a character and an output port 1 2 Scheme Concepts 1 2 1 Variable Bindings Any identifier that is not a syntactic keyword may be used as a variable see Section 1 3 3 Identifiers page 10 A variable may name a location where a value can be stored A variable that does so is said to be bound to the location The value stored in the location to which a variable is bound is called the variable s value The variable is sometimes said to name the value or to be bound to the value A variable may be bound but still not have a value such a variable is said to be unas signed Referencing an unassigned variable is an error When this error is signalled it is a condition of type condition type unassigned variable sometimes the compiler does not generate code to signal the error Unassigned variables are useful only in combination with side effects see Section 2 5 Assignments page 22 1 2 2 Environment Concepts An environment is a set of variable bindings If an environment has no binding for a variable that variable is said to be unbound in that environment Referencing an unbound variable signals a condition of type condition type unbound variable A new environment can be created by extending an existing environment with a set of new bindings Note that extending an environment does not modify the environment Chapter 1 Overview 7 rather it creates a new environment that contains the new bindings
37. cedi duce tete Panne eu ir Peter dur 15 166 274 condition type wrong type argument 6 180 274 condition type wrong type datum 274 condition type 4 2 cd Ce indes 212 condition continuation 270 Ccondition error 1 ci 9 P Y e esos 270 condition report string 271 condition restarts 269 270 271 condition type s rs b ROME ERREUR Y nga 270 CODdi1ti0on 7 i222 adeb ey beastie ceca 270 conjJ gate clu bd ced ede Peed e nda whats 67 CONS ee opaa ap uera Bean eee Dana MERE ata a ters 106 CONS ii ee ba bp a Sees beads Soe selene 108 Ccons Stream 43 d 26S S Seedy c ees 136 console i o port ee rts 179 181 console input port i 5 4922 3 bes 180 console outp t port e ken sari 180 COnStructOr z 4e Rep RR EB d Red 31 continuation cdd ee nnnii ass 168 COntinue cbe c wig nd ele gale E aeons 263 266 COPT eines ree dur Gab d douse RENEE ee S Eos 31 copy areaon win32 graphics device 295 copy areaon x graphics device 291 COpy DItHap o L9 rm REP eres 311 Copy files ane ic gue EEG Y HEREDI ue 232 COB ject ig ip dus epe E a EE gauge E bed ad aes eke 66 create diD coo ep RR LE REPRE 311 create imageon graphics device 287 CrOP DItMapes es 2 caused ede eae es 311 current filo time 9 e tees dem 236 c rrent input port sa prisene en eee et 180 183 current output port 180 183 184
38. current parser macroS x loda dia e 216 D day of week long string 245 day of week short string 245 deactivate windowon os2 graphics device 298 debug bi ss REED dps odii Peo babu ceeds 195 decoded time file time 243 decoded time string esses 243 decoded time gt universal time 243 decoded time date string 245 decoded time day eee eee eee eee 241 decoded time day of week 241 Binding Index decoded time daylight savings time 241 decoded time hour 0000 241 decoded time minute 00 241 decoded time month 0000 241 decoded time second 0 0 240 decoded time time string 245 decoded time year 00008 241 decoded time zone 0008 241 default bject i dede EYE ee Reg 15 define e ds deed beset 1 20 21 21 Uf5 define matcher expander 216 define matcher macro esses 215 define parser expander 216 define parser macro sees 215 define coloron os2 graphics device 296 define coloron win32 graphics device 294 define similar windows type 304 define structure ousds e hr 29 132 define SyntaX e obser ig rid queer be 37 define windows type d ge ne 304 del 88806 deis rE EOE
39. display Hooray define boo display Boo hiss string compare a b cheer lambda ignore boo Hooray gt unspecified string hash string procedure string hash mod string k procedure string hash returns an exact non negative integer that can be used for storing the specified string in a hash table Equal strings in the sense of string return equal hash codes and non equal but similar strings are usually mapped to distinct hash codes string hash mod is like string hash except that it limits the result to a particular range based on the exact non negative integer k The following are equivalent string hash mod string k modulo string hash string k Chapter 6 Strings 91 6 4 Alphabetic Case in Strings string capitalized string procedure substring capitalized string start end procedure These procedures return t if the first word in the string substring is capitalized and any subsequent words are either lower case or capitalized Otherwise they return 4f A word is defined as a non null contiguous sequence of alphabetic characters delimited by non alphabetic characters or the limits of the string substring A word is capitalized if its first letter is upper case and all its remaining letters are lower case map string capitalized A art Art ART gt Gf t f t Hf string upper case string procedure substring upper case string start end procedure string lower case s
40. exact onisiseeitrebeeA Re RIAM eru 65 fluid let 5 22 pedes 18 20 21 27 flu sh o tput i educi eee EREMO 189 flush outputon output port 200 fold lf ft 2 4 eR RRRvHeMeUeMWeRP 116 fold right 0e1e Mew v bur P Pre Rn 116 font structureon x graphics device 292 for all z 2 2 29 i thess ereis awed PES 117 for each 2 264 9 d e ei E ES 115 Torce sii ates Sirk NOI PP Dre ae bus 133 136 format iin2el1 lp bit eee ep REG 191 format error me sSSag c iel e Ed ees 261 fOUrthl i 22i0 Ree erebkRe WE ge P PRETdO 110 fr sh lin6 4 1 2 22299 S PER PR 189 fresh lineon output port sees 200 BOO Leod cus Biba ER E daten eddie ule aedes 64 Bdi32 dl lL 41 22 eme de o ERREUR bea 307 rm 7 176 general Car cdr iis ie s ds o a Hee bres 107 generate uninterned symbol 130 get defaulton x graphics device 291 get host by address s sss 255 get host by name sos edd mh 255 get host nam iien eri ete eos 255 325 get parser buffer pointer 205 get parser buffer tail ese reri 206 get universal time o o ge edi 239 global decoded time sea eas 240 EBlobal parser macros iini 216 graphics bind drawing mode 285 graphics bind line style 285 graphics clear e eres 283 290 291 graphics 6Cl088 5 x sgespeEEPART ER 282 graphics coordinate limits 2
41. gt host 1 pathname device x unspecific pathname directory x absolute usr morris pathname name x gt foo pathname type x gt scm pathname version x unspecific 226 MIT Scheme Reference pathname new device pathname device procedure pathname new directory pathname directory procedure pathname new name pathname name procedure pathname new type pathname type procedure pathname new version pathname version procedure Returns a new copy of pathname with the respective component replaced by the second argument Pathname is unchanged Portable programs should not explicitly replace a component with unspecific because this might not be permitted in some situations define p gt pathname usr blisp reli5 P pathname 71 usr blisp rel115 pathname new name p rel100 pathname 72 usr blisp reli00 pathname new directory p relative test morris pathname 73 test morris reli5 P pathname 71 usr blisp rel15 pathname default device pathname device procedure pathname default directory pathname directory procedure pathname default name pathname name procedure pathname default type pathname type procedure pathname default version pathname version procedure These operations are similar to the pathname new component operations except that they only change the specified component if it has the value f in pathname 15 1 3 Operations on Pathnames pathname object procedure
42. instead of let gt f let temp t if temp Cok temp which would result in an invalid procedure call 2 11 3 Syntactic Closures MIT Scheme s syntax transformation engine is an implementation of syntactic closures a mechanism invented by Alan Bawden and Jonathan Rees The main feature of the syntactic closures mechanism is its simplicity and its close relationship to the environment models commonly used with Scheme Using the mechanism to write macro transformers is somewhat cumbersome and can be confusing for the newly initiated but it is easily mastered 40 MIT Scheme Reference 2 11 3 1 Syntax Terminology This section defines the concepts and data types used by the syntactic closures facility e Forms are the syntactic entities out of which programs are recursively constructed A form is any expression any definition any syntactic keyword or any syntactic closure The variable name that appears in a set special form is also a form Examples of forms 17 t car x 4 lambda x x define pi 3 14159 if define e An alias is an alternate name for a given symbol It can appear anywhere in a form that the symbol could be used and when quoted it is replaced by the symbol however it does not satisfy the predicate symbol Macro transformers rarely distinguish symbols from aliases referring to both as identifiers Another name for an alias is synthetic identifier this document uses both names
43. is an alias for merge sort See also the definition of sort Chapter 9 Bit Strings 123 9 Bit Strings A bit string is a sequence of bits Bit strings can be used to represent sets or to manipulate binary data The elements of a bit string are numbered from zero up to the number of bits in the string less one in right to left order the rightmost bit is numbered zero When you convert from a bit string to an integer the zero th bit is associated with the zero th power of two the first bit is associated with the first power and so on Bit strings are encoded very densely in memory Each bit occupies exactly one bit of storage and the overhead for the entire bit string is bounded by a small constant However accessing a bit in a bit string is slow compared to accessing an element of a vector or character string If performance is of overriding concern it is better to use character strings to store sets of boolean values even though they occupy more space The length of a bit string is the number of bits that it contains This number is an exact non negative integer that is fixed when the bit string is created The valid indexes of a bit string are the exact non negative integers less than the length of the bit string Bit strings may contain zero or more bits They are not limited by the length of a machine word In the printed representation of a bit string the contents of the bit string are preceded by The contents are pr
44. izations If it is known in advance that a particular field of a condition will be accessed re peatedly it is worth constructing an accessor for the field using condition accessor rather than using the possibly more convenient but slower access condition pro cedure condition predicate condition type procedure Returns a predicate procedure for testing whether an object is a condition of type condition type or one of its specializations there is no predefined way to test for a condition of a given type but not a specialization of that type condition signaller condition type field names default handler procedure Returns a signalling procedure with parameters field names When the signalling procedure is called it creates and signals a condition of type condition type If the condition isn t handled i e if no handler is invoked that causes an escape from the current continuation the signalling procedure reduces to a call to default handler with the condition as its argument There are several standard procedures that are conventionally used for default handler If condition type is a specialization of condition type error default handler should be the procedure standard error handler If condition type is a specialization of condition type warning default handler should be the procedure standard warning handler If condition type is a specialization of condition type breakpoint default handler should be the procedure standard breakpoin
45. part of the window that you draw on it does not include the window frame title bar etc window frame size operation on os2 graphics device This operation returns the size of the graphics device window s frame This includes the client area as well as the border title bar etc The size is returned as two values see Section 12 3 Continuations page 167 which are the width and height of the frame in units of pels pixels The frame size is useful in conjunction with the window position and the desktop size to determine relative placement of the window or to guarantee that the entire window is visible on the desktop desktop size operation on os2 graphics device This operation returns the size of the OS 2 desktop The size is returned as two values see Section 12 3 Continuations page 167 which are the width and height of the frame in units of pels pixels 298 MIT Scheme Reference raise window operation on os2 graphics device This operation raises the graphics device window so that it is on top of any other windows on the desktop lower window operation on os2 graphics device This operation lowers the graphics device window so that it is below all other windows on the desktop hide window operation on os2 graphics device This operation hides the graphics device window The window disappears from the desktop but still appears in the window list minimize window operation on os2 graphics device This operation minimize
46. rational 2229 9 4o ve4 9 ek Rd acre Ere 60 r tionaliz sida seen inre irere ri UDE ni 65 rationalize gt exact cece eee eee 65 Pb tree Palist nce ceniee e genpUERSESP ERG 154 Eb tKee Copy sits hide eeel APR PEE eet 155 rb tree datum list sls 154 rb tre e delete 42i ee m ies 154 rb tree delete max sus 156 rb tree delete max datum 156 rb tree delete max pair 156 rb tree delete min sus 156 rb tree delete min datum 156 rb tree delete min pair 156 rb tree empty i xw eri iri ga nE RSi 154 329 rb tree equal i aves canes UR PR HE OPERE 154 rb tree height e BRE pert 155 rfb tree insert i kr ber ERES 153 rb tree key list lo eus Renee de taa 154 rb tree lOok p erbe a oettbetee aque 154 tb tree Hax icuriessseibwedueacu d e ede 155 rb tree max datum 000 000s 156 rb tree max palr x ura ene eee 156 rb ctree min e Yost be erar 155 rb tree min datum 000005 155 Eb tre Min pail sso ici ssseee e tee 155 rb tree Siz6 B RR erm EET PTUS 154 tD btre0 x2llecespbeetu he es di be items 153 te ma tch end index li2 tobe e er eR 98 re match extraCt iiitlk leg gg RT G ey Pe 98 re match start index cb ie mas 98 re string matCh eiiiiigouedk eg que e ei 97 re string search backward 9T re string search forward
47. s 2 8 unspecified s 07 ok substring move left string start1 end1 string2 start2 procedure substring move right string1 start1 end1 string2 start2 procedure Copies the characters from startl to end1 of stringl into string2 at the start2 th position The characters are copied as follows note that this is only important when stringl and string2 are eqv substring move left The copy starts at the left end and moves toward the right from smaller indices to larger Thus if string1 and string2 are the same this procedure moves the characters toward the left inside the string 102 substring move right MIT Scheme Reference The copy starts at the right end and moves toward the left from larger indices to smaller Thus if string and string2 are the same this proce dure moves the characters toward the right inside the string The following example shows how these procedures can be used to build up a string it would have been easier to use string append define answer make string 9 answer substring move left start 0 5 answer 0 answer substring move left end 0 4 answer 5 answer reverse string string reverse substring string start end reverse string string reverse substring string start end unspecified SNK gt unspecified gt starter gt unspecified gt start end procedure procedure procedure procedure Reverses the order of the characters in the give
48. sess lees 248 syntactic closure aei adden e Pee 40 syntactic closures iiei 39 syntactic environment 2 6 as e eee ees 40 syntactic keyword i 2 2 4 m vp xS 14 34 syntactic keyword defn 0 205 13 syntactic keyword binding 173 syntactic keyword identifier as 10 synthetic identifier 4 40 343 T table association defn 0006 142 table one dimensional defn 141 tail recursion defn 0 0 000008 3 tail recursion vs iteration expression 27 taxonomical link of condition type defn 257 terminal mode of port 000005 203 terminal screen clearing 189 aE 2p heeed Ree delta ek paid pod yen eee 246 time decoded Loose te Ere Rein piiras 238 time fleets pire erans nre EE rE Tee 239 AME SUIE cuoco taba Wi EE reto ie dee ae Re 239 time universal oculi m RR ero ura 238 token in programs defn 10 top bucky bit prefix defn 77 top level definition 00 ee eee 21 top level definition defn usus 20 top level environment 0 00 eee 176 total ordering defn 00 2000 117 transformer environment s esses Al LTCC COPYING ci us ei dade eS RR E tae er vea 108 trees balanced binary 153 156 trimming OL SHINE w
49. the language used to implement the Scheme system MIT Scheme also provides application hooks which support the construction of data structures that act like procedures In MIT Scheme the written representation of a procedure tells you the type of the procedure compiled interpreted or primitive PP compiled procedure 56 pp x2 x10 x307578 lambda x x compound procedure 57 define foo x x foo l compound procedure 58 foo car primitive procedure car call with current continuation lambda x x continuation 59 Note that interpreted procedures are called compound procedures strictly speaking com piled procedures are also compound procedures The written representation makes this distinction for historical reasons and may eventually change 12 1 Procedure Operations apply procedure object object procedure Calls procedure with the elements of the following list as arguments cons object object The initial objects may be any objects but the last object there must be at least one object must be a list apply list 3 4 5 6 gt 18 apply 3 4 5 6 gt 18 define compose lambda f g lambda args f apply g args compose sqrt 12 75 gt 30 procedure object procedure Returns stt if object is a procedure otherwise returns f If stt is returned exactly one of the following predicates is satisfied by object compiled procedure compound p
50. to the field names argument given in the call to nake record type that created the type represented by record type 10 5 Promises delay expression special form The delay construct is used together with the procedure force to implement lazy evaluation or call by need delay expression returns an object called a promise which at some point in the future may be asked by the force procedure to evaluate expression and deliver the resulting value force promise procedure Forces the value of promise If no value has been computed for the promise then a value is computed and returned The value of the promise is cached or memoized so that if it is forced a second time the previously computed value is returned without any recomputation force delay 1 2 gt 3 let p delay 1 2 list force p force p gt 3 3 3 In MIT Scheme the returned list is always newly allocated 134 MIT Scheme Reference define head car define tail lambda stream force cdr stream define a stream letrec next lambda n cons n delay next n 1 next 0 head tail tail a stream gt 2 promise object procedure Returns t if object is a promise otherwise returns f promise forced promise procedure Returns t if promise has been forced and its value cached otherwise returns f promise value promise procedure If promise has been forced and its value cached this procedure return
51. universal time gt local time string universal time procedure universal time global time string universal time procedure Converts an argument in universal time format to a time string The result is in the local time zone or UTC respectively universal time gt local time string get universal time Thu 29 Apr 1999 17 55 31 0400 universal time gt global time string get universal time Thu 29 Apr 1999 21 55 51 0000 decoded time gt universal time decoded time procedure Converts an argument in decoded time format to universal time format decoded time gt universal time local decoded time gt 3134411942 decoded time gt universal time global decoded time gt 3134411947 decoded time gt file time decoded time procedure Converts an argument in decoded time format to file time format decoded time gt file time local decoded time gt 925423191 decoded time gt file time global decoded time gt 925423195 decoded time gt string decoded time procedure Convert an argument in decoded time format to a time string decoded time gt string local decoded time Thu 29 Apr 1999 18 00 43 0400 decoded time gt string global decoded time Thu 29 Apr 1999 22 00 46 0000 244 MIT Scheme Reference file time gt universal time file time procedure Converts an argument in universal time format to file time format file time gt universal time file modification time gt 3133
52. used to compare keys and whether or not the table allows its keys to be reclaimed by the 144 MIT Scheme Reference garbage collector If a table prevents its keys from being reclaimed by the garbage collector it is said to hold its keys strongly otherwise it holds its keys weakly see Section 10 7 Weak Pairs page 137 make eq hash table initial size procedure Returns a newly allocated hash table that accepts arbitrary objects as keys and compares those keys with eq The keys are held weakly These are the fastest of the standard hash tables make eqv hash table initial size procedure Returns a newly allocated hash table that accepts arbitrary objects as keys and compares those keys with eqv The keys are held weakly except that booleans characters and numbers are held strongly These hash tables are a little slower than those made by make eq hash table make equal hash table initial size procedure Returns a newly allocated hash table that accepts arbitrary objects as keys and compares those keys with equal The keys are held strongly These hash tables are quite a bit slower than those made by make eq hash table make string hash table initial size procedure Returns a newly allocated hash table that accepts character strings as keys and compares them with string The keys are held strongly The next two procedures are used to create new hash table constructors All of the above hash table constructors with the e
53. x character bounds width 292 x close all displays 2 ete tic 289 x font structure all chars exist 292 x font structure character bounds 292 x font structure default char 292 x font structure direction 292 x font structure max ascent 292 x font structure max bounds 292 x font structure max descent 292 x font structure min bounds 292 x font structure name 292 x font structure start index 292 x geometry string l so so ga e RR 289 x graphics close display 289 x graphics open display 289 x open displa y soe b be eee tad Ria 288 x sizeon output port esses eese 201 xm l lattiiSt irssscpoeneneau bee d LR aces 219 xml attlist definitions 219 xml l attlist name 9 9 ui 219 x ml lattlu sSt Ptd iievis due er ve 219 xml l attlist 224 ara nE 4 dete pees 219 xml lelement 25 92969 beeen ae Eu 219 xml element content type 219 xml element name eee 219 xml element rtd 2c v dens 219 xml element 2 222 2 3 ett o d 219 xml ent3yby 22 wine etus tete ato oe hides 220 xml l ntity name 2 im deb e bus 220 xml lentity rtd oouocalcezeses e es 220 xml lentity value8 cc m Rer eR ES 220 xml lentity f 2 2 2 ir neke ee ERR 220 xml not tion iiaiuagepe RE Ras U
54. 102 Each character in a string has an index which is a number that indicates the character s position in the string The index of the first leftmost character in a string is 0 and the index of the last character is one less than the length of the string The valid indexes of a string are the exact non negative integers less than the length of the string A number of the string procedures operate on substrings A substring is a segment of a string which is specified by two integers start and end satisfying these relationships O lt start lt end lt string length string Start is the index of the first character in the substring and end is one greater than the index of the last character in the substring Thus if start and end are equal they refer to an empty substring and if start is zero and end is the length of string they refer to all of string Some of the procedures that operate on strings ignore the difference between uppercase and lowercase The versions that ignore case include ci for case insensitive in their names 88 MIT Scheme Reference 6 1 Construction of Strings make string k char procedure Returns a newly allocated string of length k If you specify char all elements of the string are initialized to char otherwise the contents of the string are unspecified Char must satisfy the predicate char ascii make string 10 x gt XXXXXXXXXxx string char procedure Returns a newly
55. 22 9 9 e er ERERSS 121 V CLtor EIOWc iisioew Bebes bredbaeeder Rede es 120 vector head 3 2 ache 2 224 IRA ld m b 4e bed 121 vector l ngth 2 1 524o 8 RAE Reds 58 120 vector map soeneelse qu eei ea E Ed 120 Vectok ref vi vs 6e d nhe eR ens 9 120 yector BS6c nd cunc banc ive eee 121 vector Set 4 2 224 inr rao eh dn Ra 120 yector Beventhi oc ons isse ev bese nReeid 121 yector Sixtho 1 2202 EED he he dos 121 yector tatLl bras adinka aa UEee a 121 v ctor third 2 4 0 42525 bes his 121 N Tenrion sf PIPER 120 WANED tos Diog aede i e vae acide aUe E Vedi agas 259 266 HEAK CAT iea s eus v c pc pipe bu deer ES 137 WGak 6CdE 2lollc cue rre dete eas eres LE 138 Heak CONS oolsrsse rer Wege REPE P 137 weak hash table constructor 144 weak pair car 0000 08 137 150 Weak cpadrt t chec dgee epi eiea PE E A Benet ak 137 weak set car c l l l aca edebR reed 138 weak set cdrl o2 ssie cd ER rubus 138 well formed code points list 85 riu E 195 window frame sizeon os2 graphics device 297 window positionon os2 graphics device 297 window sizeon os2 graphics device 297 windows procedure ililelimicee RR ind 307 with current parser macroS 216 with current unparser state 194 with input from binary file 183 with inpu t from file 22 2 seppia iagi 183 With inp t from porte saidi ieee en seeds 180 with input from stri
56. 9 1 X Graphics Type A graphics device for X windows is created by passing the symbol x as the graphics device type name to make graphics device make graphics device x optional display geometry suppress map where display is either a display object amp f or a string geometry is either f or a string and suppress map is a boolean or a vector see below A new window is created on the appropriate display and a graphics device representing that window is returned Display specifies which X display the window is to be opened on if it is f or a string it is passed as an argument to x open display and the value returned by that procedure is used in place of the original argument Geometry is an X geometry string or 4f which means to use the default geometry which is specified as a resource Suppress map if given may take two forms First it may be a boolean if the default the window is automatically mapped after it is created otherwise t means to suppress this automatic mapping The second form is a vector of three elements The first element is a boolean with the same meaning as the boolean form of suppress map The second element is a string which specifies an alternative resource name to be used for looking up the window s resources The third element is also a string which specifies a class name for looking up the window s resources The default value for suppress map is f The default resource and class n
57. A triple is a list of three integers between O and xff inclusive which specify the intensity of the red green and blue components of the color Thus 0 0 0 is black 0 0 128 is dark blue and 255 255 255 is white If the color is not available in the graphics device then the nearest available color is used instead define color name spec operation on os2 graphics device Define the string name to be the color specified by spec Spec may be any acceptable color specification Note that the color names defined this way are available to any OS 2 graphics device and the names do not have to be defined for each device Color names defined by this interface may also be used when setting the colors of the Scheme console window or the colors of Edwin editor windows find color name operation on os2 graphics device Looks up a color previously defined by define color This returns the color in its most efficient form for operations set foreground color or set background color Chapter 17 Graphics 297 17 11 3 Window Operations for OS 2 Graphics These operations control the window that contains the OS 2 graphics device They provide facilities to change the window s size and position to raise and lower the window relative to other windows on the desktop to hide or minimize the window and to restore it from the hidden or minimized state to activate or deactivate the window that is control the keyboard focus and to control the text tha
58. Daa EUER Nau 140 del ss cl sets Ra PII E ES 141 del dssSQq orssesbe 1 sbbepcCalbeh temt eda he 140 del assgl ui lk as PREPARARE 141 del asSSV nice nde Iw dde npud P doas 140 del sSvi isiicere 3 Remb erred 141 delay nhc cic tietindeteeetheseeddadige es 18 133 del8te2 40049o pee hy hain Bad sees 112 deletel zilieevecrhix4sv oiire REDE 112 113 delete association procedure 141 delete dib 2 i i2 v REED ELI DRESS 311 delete directory is ioc e lE REG 233 delete fiq16 22 205 Riv b viata oe bates 232 delete file no errors se esse 232 delete matching items 112 delete matching items 112 delete member procedure 113 delq ci eerie dace aa Sueded TEE EE 112 delgl 22ziberasc bt hiberna Wer ADR TR REUS 112 OLY o skpes fdereqer e hedera derie des 112 113 dell pci ited rena rE dak de tai Edere 112 denominator 5v 6g muy eade 64 desktop sizeon os2 graphics device 297 LDS T E E dd un 309 dib plt eriei erena bee eked ek ied eee oe 310 dib from bitma p 2 ie m e ORE TERR 310 di habbo e cer eei ese a r ipri terini 311 dib set pixels unaligned 311 dib width cresp ie 2 PCI En Pee bI 311 dipit 2char 22v zw pep P PRG MURAT Pp 80 directory namestring sess 228 directory pathname eeesss 228 directory pathname as file 229 directory pathname eese 227 directory read os ic s
59. Gerris eair n Ret meh 24d 341 P padding Of SUrIng io oorr RR Ved 92 pait deln oel mbtir bue EP ARP PORE EU 105 pair external representation s 105 pair weak defn 0 0 200000 137 parameter list of lambda defn 15 parameter optional defn 0 15 parameter required defn 00 15 parameter rest defn 00 0000 15 parent of directory 0 e eee ee 224 parent of environment defn 6 parenthesis as external representation 105 119 Parser buffer 22221 cm 1e x PIE IRIIERERGS 204 Parser language 2e eme 207 212 Parser procedure soci eeeo delere wee 212 parser XML od ace nde e ieee eta tee EE Saai 217 Parser buffer pointer 000 eee 204 parsing of external representation 186 pasting of bit strings 0 124 pasting Of lisbs 2 2 2 ot reme ERI erre ges 110 pasting of Strings iseer irinaren nte ai 92 pasting of symbols 054 0400 rimori senesi 130 path directory defn 0 000 224 pathnaimne eode ERE RIDE ee eee Reon 221 pathname defn 0 00 0 000 02000 221 pathname components 04 223 pathname absolute defn 230 pathname relative defn 0 230 period as external representation 105 physical size of hash table defn 147 DOL teiaiet ete sewer Ca
60. Louie ue ic dnb ge ARS Eur E pa ees 107 CaaadE c i uuo iae anb ea ee a 107 Ito MC Pp 107 Caadatuco s utpriae aded ppp E 107 Caaddr ou lu ilo erduuPe qq Ihe CERE pagus 107 COAG uod qe mestre xta pie S aes ibd 107 CAAT oulcLePageer4u wuerde ortis Phuong don eee 107 CadadartucscsrebebTaed E ru qan ded ee 107 adadi 5o ee be des abana ahh ava Gea Eaa 107 Cad r i cblerasebiri n eee ard E ge 107 CaddaE 2 ua iad ependud eels nh duce ok ah aula a doa 107 adddr isi vua at ad d dais 107 CaddE 2432 ddp Iso nena VETE GER ER BU RUE 107 CAE ui div rpg ca i b rere aod pid 107 call with binary input file 183 call with binary output file 183 call with current continuation 167 call with inp t file 2 eres 182 call with o tput file 15 sede deen en 182 call with temporary file pathname 233 call with val sS 2 222 hdc oe 169 canonical host name 00 0 255 capture imageon os2 graphics device 301 capture syntactic environment 43 CHE eerie Ao as esu Exit a obese 9 106 136 CASS iss ERREUR a e PE REIR RU EUROS 25 27 Ca PP 231 CdaaaYr 2i2 mteu harid weed acd ee eh gd Go dura d 107 CdaadE nuca dore b ERU Webs ae areata 107 CORSE seid sid tia ada ERE Fev das eder d anc d e 107 CdadaE 5 ied duc cid d OR EUR RUP UL E da eae 107 cdaddr isiii8z ies Pede eue d dave Era d 107 CdadE 243r ob don Rind dnd Masse a Re Ee RU 107 eei P MP 107 COMBA inde qute due
61. Returns t if object is a pathname otherwise returns f pathname pathnamel pathname2 procedure Returns t if pathnamel is equivalent to pathname2 otherwise returns 4f Path names are equivalent if all of their components are equivalent hence two pathnames that are equivalent must identify the same file or equivalent partial pathnames How ever the converse is not true non equivalent pathnames may specify the same file e g via absolute and relative directory components and pathnames that specify no file at all e g name and directory components unspecified may be equivalent pathname absolute pathname procedure Returns stt if pathname is an absolute rather than relative pathname object otherwise returns Specifically this procedure returns t when the directory component of pathname is a list starting with the symbol absolute and returns f in all other cases All pathnames are either absolute or relative so if this procedure returns f the argument is a relative pathname Chapter 15 Operating System Interface 227 directory pathname pathname procedure Returns t if pathname has only directory components and no file components This is roughly equivalent to define directory pathname pathname string null file namestring pathname except that it is faster pathname wild pathname procedure Returns stt if pathname contains any wildcard components otherwise returns f merge pathnames pathname defaults d
62. The macro definition facility consists of these parts e A set of expressions used to establish that certain identifiers are macro keywords associate them with macro transformers and control the scope within which a macro is defined e A standard high level pattern language for specifying macro transformers introduced by the syntax rules special form e Two non standard low level languages for specifying macro transformers syntactic clo sures and explicit renaming The syntactic keyword of a macro may shadow variable bindings and local variable bindings may shadow keyword bindings All macros defined using the pattern language are hygienic and referentially transparent and thus preserve Scheme s lexical scoping e If a macro transformer inserts a binding for an identifier variable or keyword the identifier will in effect be renamed throughout its scope to avoid conflicts with other identifiers e If a macro transformer inserts a free reference to an identifier the reference refers to the binding that was visible where the transformer was specified regardless of any local bindings that may surround the use of the macro 2 11 1 Binding Constructs for Syntactic Keywords let syntax letrec syntax let syntax and define syntax are analogous to let letrec let and define but they bind syntactic keywords to macro transformers instead of binding variables to locations that contain values let syntax bindings expre
63. Thunk by george can george lambda 3 gt 3 by george can george lambda car x george 1 2 16 4 2 Invoking Standard Restart Code Scheme supports six standard protocols for restarting from a condition each encapsu lated using a named restart for use by condition signalling code and a simple procedure for use by condition handling code Unless otherwise specified if one of these procedures is unable to find its corresponding restart it returns immediately with an unspecified value Each of these procedures accepts an optional argument restarts which is described above in Section 16 4 Restarts page 263 266 MIT Scheme Reference abort restarts procedure Abort the computation using the restart named abort The corresponding effector takes no arguments and abandons the current line of computation This is the restart provided by Scheme s REPL If there is no restart named abort this procedure signals an error of type condition type no such restart continue restarts procedure Continue the current computation using the restart named continue The cor responding effector takes no arguments and continues the computation beyond the point at which the condition was signalled muffle warning restarts procedure Continue the current computation using the restart named muffle warning The corresponding effector takes no arguments and continues the computation beyond the point at which any warn
64. a rest a These two examples are equivalent a is a rest parameter The procedure may be passed any number of arguments Note this is the only case in which cannot be used in place of rest a b optional c d rest e a and b are required c and d are optional and e is rest The procedure may be passed two or more arguments Some examples of lambda expressions lambda x x x compound procedure 53 lambda x x x 4 gt 8 define reverse subtract lambda x y y x reverse subtract 7 10 gt 3 define foo let x 4 lambda y x y foo 6 10 named lambda formals expression expression special form The named lambda special form is similar to lambda except that the first required parameter in formals is not a parameter but the name of the resulting procedure thus formals must have at least one required parameter This name has no semantic meaning but is included in the external representation of the procedure making it Chapter 2 Special Forms 17 useful for debugging In MIT Scheme lambda is implemented as named lambda with a special name that means unnamed named lambda f x x x compound procedure 53 f named lambda f x x x 4 gt 8 2 2 Lexical Binding The three binding constructs let let and letrec give Scheme block structure The syntax of the three constructs is identical but they differ in the regions they
65. a newly allocated bit string that is the bitwise logical exclusive or of the arguments The arguments must be bit strings of identical length bit string and target bit string bit string procedure bit string or target bit string bit string procedure bit string xor target bit string bit string procedure bit string andc target bit string bit string procedure These are destructive versions of the above operations The arguments target bit string and bit string must be bit strings of the same length Each of these procedures performs the corresponding bitwise logical operation on its arguments places the result into target bit string and returns an unspecified result 126 MIT Scheme Reference 9 5 Modification of Bit Strings bit string fill bit string initialization procedure Fills bit string with zeroes if initialization is otherwise fills bit string with ones Returns an unspecified value bit string move target bit string bit string procedure Moves the contents of bit string into target bit string Both arguments must be bit strings of the same length The results of the operation are undefined if the arguments are the same bit string bit substring move right bit string 1 start1 end1 bit string 2 start2 procedure Destructively copies the bits of bit string 1 starting at index start1 inclusive and ending at end1 exclusive into bit string 2 starting at index start2 inclusive Start and end1 must be valid substring ind
66. a port at end of file would be indistinguishable from an interactive port that has no ready characters Chapter 14 Input Output 187 read line input port procedure read line reads a single line of text from input port and returns that line as a newly allocated string The newline terminating the line if any is discarded and does not appear in the returned string This procedure ignores the blocking mode of the port blocking unconditionally until it has read an entire line If end of file is encountered before any characters are read an end of file object is returned read string string input port procedure read substring string start end input port procedure read string and read substring fill the specified region of string with characters read from input port until the region is full or else there are no more characters available from the port For read string the region is all of string and for read substring the region is that part of string specified by start and end The returned value is the number of characters filled into the region However there are several interesting cases to consider e If read string read substring is called when input port is at end of file then the returned value is 0 Note that end of file can mean a file port that is at the file s end a string port that is at the string s end or any other port that will never produce more characters e If input port is an interacti
67. ae EG pees eae i static scoping defn 0 000000 3 static types defn 00 000 2 eee 3 stream d6i ctcacreet dst EID uud ones 135 stream converting to list 135 string index defn 000 005 87 string length defn 2 000 87 string character defn 0 20000 87 string converting to input port 183 string converting to list 109 string input and output ports 183 string input from port 186 199 string interning as symbol 129 string of bits defn oos 123 String output to DOE ore IEEE cas 188 strong types defn 0 0 00 000 3 strongly held keys of hash table 143 SubprOCeSS ooa mea oH an ete dao dde s 248 substring defn 0 000 2 87 substring of bit string 124 substring output to port 00 200 substring searching string for 93 subtraction of numbers 04 62 subvector defn 000 00e eee eae 119 sutlix OF SUBE o eonen Loe deena ON SE need 96 sum of numbers ei e evbstewee l Fes ce 62 super bucky bit prefix defn 77 symbol defn i eerte RR Rete kem 128 symbolic link predicate for 234 symbolic linking of file 000 232 synchronous subprocess
68. alists are sorted MIT Scheme provides an implementation of red black trees The red black tree balancing algorithm provides generally good performance because it doesn t try to keep the tree very closely balanced At any given node in the tree one side of the node can be twice as high as the other in the worst case With typical data the tree will remain fairly well balanced anyway A red black tree takes space that is proportional to the number of associations in the tree For the current implementation the constant of proportionality is eight words per association Red black trees hold their keys strongly In other words if a red black tree contains an association for a given key that key cannot be reclaimed by the garbage collector The red black tree implementation is a run time loadable option To use red black trees execute load option rb tree once before calling any of the procedures defined here make rb tree key key lt procedure This procedure creates and returns a newly allocated red black tree The tree con tains no associations Key and key lt are predicates that compare two keys and determine whether they are equal to or less than one another respectively For any two keys at most one of these predicates is true rb tree object procedure Returns t if object is a red black tree otherwise returns sf rb tree insert rb tree key datum procedure Associates datum with key in rb tree and returns an unspec
69. allocated string consisting of the specified characters The arguments must all satisfy char ascii string a gt a string a b c gt abc string a space b space c gt abc string E Hn list gt string char list procedure Char list must be a list of ISO 8859 1 characters list gt string returns a newly allocated string formed from the elements of char list This is equivalent to apply string char list The inverse of this operation is string gt Llist list gt string a b gt ab string gt list Hello gt H e 1 1 o string copy string procedure Returns a newly allocated copy of string Note regarding variable length strings the maximum length of the result depends only on the length of string not its maximum length If you wish to copy a string and preserve its maximum length do the following define string copy preserving max length string let length dynamic wind lambda set length string length string set string length string string maximum length string lambda string copy string lambda set string length string length 6 2 Selecting String Components string object procedure Returns t if object is a string otherwise returns ttf string Hi gt t string Hi gt df Chapter 6 Strings 89 string length string procedure Returns the length of string as an exact non negative integer string leng
70. and enough namestring but they return pathnames instead of strings Chapter 15 Operating System Interface 229 directory pathname as file pathname procedure Returns a pathname that is equivalent to pathname but in which the directory com ponent is represented as a file The last directory is removed from the directory component and converted into name and type components This is the inverse oper ation to pathname as directory directory pathname as file gt pathname usr blisp pathname usr blisp pathname as directory pathname procedure Returns a pathname that is equivalent to pathname but in which any file components have been converted to a directory component If pathname does not have name type or version components it is returned without modification Otherwise these file components are converted into a string and the string is added to the end of the list of directory components This is the inverse operation to directory pathname as file pathname as directory gt pathname usr blisp relb5 pathname usr blisp re15 15 1 4 Miscellaneous Pathname Procedures This section gives some standard operations on host objects and some procedures that return some useful pathnames local host variable This variable has as its value the host object that describes the local host s file system host object procedure Returns stt if object is a pathname host otherwise returns f host hostl host2 p
71. and the old ones The new bindings shadow the old ones that is if an environment that contains a binding for x is extended with a new binding for x then only the new binding is seen when x is looked up in the extended environment Sometimes we say that the original environment is the parent of the new one or that the new environment is a child of the old one or that the new environment inherits the bindings in the old one Procedure calls extend an environment as do let let letrec and do expressions Internal definitions see Section 2 4 2 Internal Definitions page 21 also extend an envi ronment Actually all the constructs that extend environments can be expressed in terms of procedure calls so there is really just one fundamental mechanism for environment ex tension A top level definition see Section 2 4 1 Top Level Definitions page 21 may add a binding to an existing environment 1 2 3 Initial and Current Environments MIT Scheme provides an initial environment that contains all of the variable bindings described in this manual Most environments are ultimately extensions of this initial envi ronment In Scheme the environment in which your programs execute is actually a child extension of the environment containing the system s bindings Thus system names are visible to your programs but your names do not interfere with system programs The environment in effect at some point in a program is called the current en
72. and whose cdr is a string in this case the prompt string is formed by prepending to the string the current REP loop level number and a space Also a space is appended to the string unless it already ends in a space or is an empty string The default behavior of this procedure is to print a fresh line a newline and the prompt string flush the output buffer read a character in raw mode echo that character and return it Under Edwin and Emacs instead of reading a character the interaction buffer is put into a mode in which graphic characters submit themselves as input After this mode change the first such character submitted is returned as the value of this procedure prompt for expression prompt port procedure Prompts the user for an expression The prompt string is formed by appending a colon and a space to prompt unless prompt already ends in a space or is the null string The default behavior of this procedure is to print a fresh line a newline and the prompt string flush the output buffer then read an object and return it Under Edwin and Emacs the expression is read in the minibuffer 196 MIT Scheme Reference prompt for evaluated expression prompt environment port procedure Prompts the user for an evaluated expression Calls prompt for expression to read an expression then evaluates the expression using environment if environment is not given the REP loop environment is used prompt for confirmation prom
73. are only compat ible if their tree types are eq A consequence is that trees that are intended to be used in binary tree operations must all be created with a tree type originating from the same call to make wt tree type 158 MIT Scheme Reference number wt type variable A standard tree type for trees with numeric keys Number wt type could have been defined by define number wt type make wt tree type lt string wt type variable A standard tree type for trees with string keys String wt type could have been defined by define string wt type make wt tree type string lt make wt tree wt tree type procedure This procedure creates and returns a newly allocated weight balanced tree The tree is empty i e it contains no associations Wt tree type is a weight balanced tree type obtained by calling make wt tree type the returned tree has this type singleton wt tree wt tree type key datum procedure This procedure creates and returns a newly allocated weight balanced tree The tree contains a single association that of datum with key Wet tree type is a weight balanced tree type obtained by calling make wt tree type the returned tree has this type alist gt wt tree tree type alist procedure Returns a newly allocated weight balanced tree that contains the same associations as alist This procedure is equivalent to lambda type alist let tree make wt tree type for each lambda association wt tree add tree car asso
74. are ordered Binary trees have access times that are proportional to the logarithm of the number of associations in the tree While they aren t as fast as hash tables they offer the advantage that the contents of the tree can be converted to a sorted alist in linear time Additionally two trees can be compared for equality in worst case linear time e Red Black trees are a kind of balanced binary tree The implementation supports destructive insertion and deletion operations with a good constant factor e Weight Balanced trees are a kind of balanced binary tree The implementation provides non destructive operations There is a comprehensive set of operations including a constant time size operation many high level operations such as the set operations union intersection and difference and indexing of elements by position 11 1 Association Lists An association list or alist is a data structure used very frequently in Scheme An alist is a list of pairs each of which is called an association The car of an association is called the key An advantage of the alist representation is that an alist can be incrementally augmented simply by adding new entries to the front Moreover because the searching procedures assv et al search the alist in order new entries can shadow old entries If an alist is 140 MIT Scheme Reference viewed as a mapping from keys to data then the mapping can be not only augmented but also altered in a n
75. are trapped rather than propogated as they would be by default bind condition handler condition types handler thunk procedure Invokes thunk after adding handler as a condition handler for the conditions specified by condition types Condition types must be a list of condition types signalling a condition whose type is a specialization of any of these types will cause the handler to be invoked See signal condition for a description of the mechanism used to invoke handlers By special extension if condition types is the empty list then the handler is called for all conditions bind default condition handler condition types handler procedure Installs handler as a permanent condition handler for the conditions specified by condition types Condition types must be a list of condition types signalling a con dition whose type is a specialization of any of these types will cause the handler to be invoked See signal condition for a description of the mechanism used to invoke handlers By special extension if condition types is the empty list then the handler is called for all conditions break on signals condition types procedure Arranges for signal condition to create an interactive REPL before it signals a condition that is a specialization of any of the types in the list of condition types This can be extremely helpful when trying to debug code that uses custom condition handlers In order to create a REPL when any condition type is signa
76. arguments and returns a newly allocated entry entry valid A procedure that accepts an entry and returns f iff the entry s key has been reclaimed by the garbage collector Instead of a procedure this may be stt which is equivalent to lambda entry itt entry key A procedure that accepts an entry as an argument and returns the entry s key entry datum A procedure that accepts an entry as an argument and returns the entry s datum set entry datum A procedure that accepts an entry and an object as arguments modifies the entry s datum to be the object and returns an unspecified result rehash after gc An optional argument that if true says the values returned by key hash might change after a garbage collection If so the hash table imple mentation arranges for the table to be rehashed when necessary See Section 11 4 4 Address Hashing page 149 for information about hash procedures that have this property Otherwise it is assumed that key hash always returns the same value for the same arguments The default value of this argument is f For example here is how the constructors for ordinary hash tables could be defined define strong hash table constructor key hash key optional rehash after gc hash table constructor key hash key cons t car cdr set cdr if default object rehash after gc f rehash after gc Chapter 11 Associations 151 define weak hash table constructor key hash key
77. assv uses eqv and del assoc uses equal These procedures are like del assq del assv and del assoc respectively except that they destructively modify alist delete association procedure deletor predicate selector procedure This returns a deletion procedure similar to del assv or del assq The predicate and selector arguments are the same as those for association procedure while the deletor argument should be either the procedure list deletor for non destructive deletions or the procedure list deletor for destructive deletions For example here is a possible implementation of del assv define del assv delete association procedure list deletor eqv car alist copy alist procedure Returns a newly allocated copy of alist This is similar to list copy except that the association pairs i e the elements of the list alist are also copied alist copy could have been implemented like this define alist copy alist if null alist E cons cons car car alist cdr car alist alist copy cdr alist 11 2 1D Tables 1D tables one dimensional tables are similar to association lists In a 1D table unlike an association list the keys of the table are held weakly if a key is garbage collected its associated value in the table is removed 1D tables compare their keys for equality using eq 1D tables can often be used as a higher performance alternative to the two dimensional association table see S
78. bd To gb EEN E ENEA EE E EEE E A E ANT T3 dor eH EEEE EEA T S ETEN E 73 T1057 eap ad durar a eed Gin se e Beas we GU boo 75 Binding Index slo P 73 TloS8bS 02 9g uice S P AREE RR BRE deitas Ta PVG PACOSs fg dus ects S95 ao sha tay a nA aaa dd 74 flOoiasen liasiguone n ron Tea e OREL ad aa bd 74 TloS atan isidouoaleE diede phap p dorus us 74 FTO FAGAN 2 esakeran repe eda rev rs 74 flo ceiling oo cates oec gis tod LAGER EG EA RAGE ra 74 flo ceiling exaCt s gogo a PER nie 74 Tl6 60855 224 chad Sas fale ab p a E AERE Auk Bae 74 PLOPORP ice op dove decade ened ce dea P RE Dips 74 floiexpt iexes ded Hig ru Echos 74 fl finite 12 40 95 99g o EErEE Ene d ave 73 flo flon m 5i 53 5 pide dus 73 fl05flOOEf L 52 1522 233922003 aoe hae Bde T4 flo floor gt eza t ospel h nib shed Boe 74 flO loB 2 212 0 L w eq dacs huh tasca 74 PLOINGR ATCC cs Rodd dekenn qua atari eels 73 flo n gative 2 ues Sede 9d eR REG 73 flo positive t 2 6 A kee hee ek ae 73 flo r ndom nvt l2 01e Bada Bale eee elas 75 flo rOuUndu 3 eh ears aie Re dec sed T4 flo ro nd 58Xxact Dig eE edu 74 PLO RSD P PPP T4 E oTe f a PE E E E EE ausa doa dins 74 PLO tanes 2229 dears dud dob tee bead TA flo truncate eerueo 23e ahaa ee dees aes T4 flo truncate ex 6t orsaka bad Ao ee 74 FLOSZELO sau ile 203a Re weeds T9 flonum parser fast Gd et Rp us 68 flonum unparser cutoff 2 oce 68 Flobi 0 kb thea eed eee rud 64 floOf
79. binary 0 octal d decimal and x hexadecimal With no radix prefix a number is assumed to be expressed in decimal A numerical constant may be specified to be either exact or inexact by a prefix The prefixes are e for exact and i for inexact An exactness prefix may appear before or after any radix prefix that is used If the written representation of a number has no exactness prefix the constant may be either inexact or exact It is inexact if it contains a decimal point an exponent or a character in the place of a digit otherwise it is exact In systems with inexact numbers of varying precisions it may be useful to specify the precision of a constant For this purpose numerical constants may be written with an exponent marker that indicates the desired precision of the inexact representation The letters s d and 1 specify the use of short single double and long precision respectively When fewer than four internal inexact representations exist the four size specifications are mapped onto those available For example an implementation with two internal repre sentations may map short and single together and long and double together In addition the exponent marker e specifies the default precision for the implementation The default precision has at least as much precision as double but implementations may wish to allow this default to be set by the user 3 14159265358979F0 Round to single 3 141593 0 6L0 Ex
80. bit string to 1 and returns an unspecified value K must be a valid index of bit string bit string clear bit string k procedure Sets the kth bit in bit string to 0 and returns an unspecified value K must be a valid index of bit string bit substring find next set bit bit string start end procedure Returns the index of the first occurrence of a set bit in the substring of bit string from start inclusive to end exclusive If none of the bits in the substring are set f is returned The index returned is relative to the whole bit string not substring The following procedure uses bit substring find next set bit to find all the set bits and display their indexes define scan bitstring bs let end bit string length bs let loop start 0 let next bit substring find next set bit bs start end if next begin write line next if lt next end loop next 1 9 3 Cutting and Pasting Bit Strings bit string append bit string 1 bit string 2 procedure Appends the two bit string arguments returning a newly allocated bit string as its result In the result the bits copied from bit string 1 are less significant smaller indices than those copied from bit string 2 bit substring bit string start end procedure Returns a newly allocated bit string whose bits are copied from bit string starting at index start inclusive and ending at end exclusive Chapter 9 Bit Strings 125 9 4 Bitwise Operations on Bi
81. comparison will always finish in constant time eq may be used like eqv in applications using procedures to implement objects with state since it obeys the same constraints as eqv V V YI y t unspecified f unspecified unspecified t unspecified unspecified t unspecified t t t Chapter 3 Equivalence Predicates 55 equal objl obj2 procedure equal recursively compares the contents of pairs vectors and strings applying eqv on other objects such as numbers symbols and records A rule of thumb is that objects are generally equal if they print the same equal may fail to terminate if its arguments are circular data structures equal a a gt t equal a a gt t equal a b c a b c gt dit equal abc abc gt dit equal 2 2 gt dit equal make vector 5 a make vector 5 a gt dtt equal lambda x x lambda y y gt unspecified 56 MIT Scheme Reference Chapter 4 Numbers 57 4 Numbers This section is largely taken from the Revised 4 Report on the Algorithmic Language Scheme Numerical computation has traditionally been neglected by the Lisp community Until Common Lisp there was no carefully thought out strategy for organizing numerical com putation and with the exception of the MacLisp system little effort was made to execute numerical code efficiently This report recognizes the excellent work of the Common Lisp com
82. contains the same information as 1d table 11 3 The Association Table MIT Scheme provides a generalization of the property list mechanism found in most other implementations of Lisp a global two dimensional association table This table is indexed by two keys called x key and y key in the following procedure descriptions These keys and the datum associated with them can be arbitrary objects eq is used to discriminate keys Think of the association table as a matrix a single datum can be accessed using both keys a column using x key only and a row using y key only 2d put x key y key datum procedure Makes an entry in the association table that associates datum with x key and y key Returns an unspecified result Chapter 11 Associations 143 2d remove x key y key procedure If the association table has an entry for x key and y key it is removed Returns an unspecified result 2d get x key y key procedure Returns the datum associated with x key and y key Returns f if no such association exists 2d get alist x x key procedure Returns an association list of all entries in the association table that are associated with x key The result is a list of y key datum pairs Returns the empty list if no entries for x key exist 2d put foo bar 5 2d put foo baz 6 2d get alist x foo gt baz 6 bar 5 2d get alist y y key procedure Returns an association list of all entries in the association
83. cph tmp no such file error Unable to delete file zu cph tmp no such file because No such file or directory To continue call RESTART with an option number RESTART 3 gt Try to delete the same file again RESTART 2 gt Try to delete a different file RESTART 1 gt Return to read eval print level 1 error file operation error filename verb noun reason operator procedure operands This procedure signals a condition of type condition type file operation error The fields of the condition are filled in from the corresponding arguments to the procedure Chapter 16 Error System 277 condition type derived file error filename condition condition type This is another kind of file error which is generated by obscure file system errors that do not fit into the standard categories The filename field contains the filename or pathname that was being operated on and the condition field contains a condition describing the error in more detail Usually the condition field contains a condition of type condition type system call error error derived file filename condition procedure This procedure signals a condition of type condition type derived file error The filename and condition fields of the condition are filled in from the corresponding arguments to the procedure condition type port error port condition type This is an abstract type It indicates that an error associated with a I O port has occurred Fo
84. data in the result are those from wt tree 1 If the trees are being used as sets the result is the set intersection of the arguments As a discrete map operation wt tree intersection computes the domain restriction of wt tree 1 to the domain of wt tree 2 The worst case time required by this operation is proportional to the sum of the sizes of the trees wt tree difference wt tree 1 wt tree 2 procedure Returns a new tree containing all and only those associations from wt tree 1 that have keys that do not appear as the key of an association in wt tree 2 If the trees are viewed as sets the result is the asymmetric set difference of the arguments As a discrete map operation it computes the domain restriction of wt tree 1 to the com plement of the domain of wt tree 2 The worst case time required by this operation is proportional to the sum of the sizes of the trees wt tree subset wt tree 1 wt tree 2 procedure Returns t iff the key of each association in wt tree 1 is the key of some association in wt tree 2 otherwise returns f Viewed as a set operation wt tree subset is the improper subset predicate A proper subset predicate can be constructed define proper subset s1 s2 and wt tree subset s1 s2 wt tree size s1 wt tree size s2 As a discrete map operation wt tree subset is the subset test on the domain s of the map s In the worst case the time required by this operation is proportional to the size of wt tree
85. defined define make eq hash table weak hash table constructor eq hash mod eq t define make equal hash table strong hash table constructor equal hash mod equal t define make string hash table strong hash table constructor string hash mod string f The following procedure is sometimes useful in conjunction with weak hash tables Nor mally it is not needed because such hash tables clean themselves automatically as they are used hash table clean hash table procedure If hash table is a type of hash table that holds its keys weakly this procedure recovers any space that was being used to record associations for objects that have been reclaimed by the garbage collector Otherwise this procedure does nothing In either case it returns an unspecified result 11 4 2 Basic Hash Table Operations The procedures described in this section are the basic operations on hash tables They provide the functionality most often needed by programmers Subsequent sections describe other operations that provide additional functionality needed by some applications hash table object procedure Returns stt if object is a hash table otherwise returns f hash table put hash table key datum procedure Associates datum with key in hash table and returns an unspecified result The average time required by this operation is bounded by a constant hash table get hash table key default procedure Returns the datum associated with key in h
86. e Rr n 21 15 Operating System Interface 221 to JPathaiiesu pepe e aaa thease 221 15 1 1 Filenames and Pathnames Lsss 222 15 1 2 Components of Pathnames 223 15 1 3 Operations on Pathnames 226 15 1 4 Miscellaneous Pathname Procedures 229 15 2 Working Directory ssssseeessee nh 230 15 3 File Manipulation 0 anniari en esee 232 15 4 Directory Readers cene pe EROR ERR I b 238 15 5 Date and Time 0 ccc cc ccc n enn eee 238 15 5 1 Universal Time 0 0 c cece eee 239 15 5 2 Decoded Time 0 cece cece a aaia 239 15 5 8 File Time 0 2 eee eee 242 15 5 4 Time Format Conversion 0 00065 242 15 5 5 External Representation of Time 245 15 6 Machine Time 6 24 ate eS rex E ESEEE eres 246 15 7 Subproeesses cec bae he keegan bade 248 15 7 1 Subprocess Procedures 00 00 ee eeeee 248 15 7 2 Subprocess Conditions 2 00 005 249 15 7 3 Subprocess Options 000 ee eee eee 249 15 8 TOP Sockets orreri rrei aeneae EE 252 15 9 Miscellaneous OS Facilities lllisliilllessu 254 16 Error SysSten ireexesexc o rERERE ES 257 16 1 Condition Signalling 0 eee eee eee 258 16 2 Error Messages 2 cece meai noa 260 16 3 Condition Handling cec te eto he bee 261 10 4 RestariS coc cate dees m er ed eA ae et Ga 263 16 4 1 Establishing
87. evaluated as follows The init expressions are evaluated in some unspecified order the variables are bound to fresh locations the results of the init expressions are stored in the bindings of the variables and then the iteration phase begins Each iteration begins by evaluating test if the result is false then the command expressions are evaluated in order for effect the step expressions are evaluated in some unspecified order the variables are bound to fresh locations the results of the steps are stored in the bindings of the variables and the next iteration begins If test evaluates to a true value then the expressions are evaluated from left to right and the value of the last expression is returned as the value of the do expression If no expressions are present then the value of the do expression is unspecified in standard Scheme in MIT Scheme the value of test is returned The region of the binding of a variable consists of the entire do expression except for the inits It is an error for a variable to appear more than once in the list of do variables Chapter 2 Special Forms 29 A step may be omitted in which case the effect is the same as if variable init variable had been written instead of variable init do vec make vector 5 i10 i 1 i 5 vec vector set vec i i gt 0 1 2 8 4 let x 1 35 7 9 do x x cdr x sum O sum car x null x sum gt 25 2 10 Structure
88. expression performs a match on the parser buffer The match to be performed is specified by mexp which is an expression in the matcher language If the match is successful the result of the noise expression is a vector of zero elements In other words the text is matched and then thrown away The mexp operand is often a known character or string so in the case that mexp is a character or string literal the noise expression can be abbreviated as the literal In other words noise foo can be abbreviated just foo values expression parser expression Sometimes it is useful to be able to insert arbitrary values into the parser result The values expression supports this The expression arguments are arbitrary Scheme expressions that are evaluated at run time and returned in a vector The values expression always succeeds and never modifies the internal pointer of the parser buffer discard matched parser expression The discard matched expression always succeeds returning a vector of zero ele ments In all other respects it is identical to the discard matched expression in the matcher language Next there are several combinator expressions Parameters named pexp are arbitrary expressions in the parser language The first few combinators are direct equivalents of those in the matcher language seq pexp parser expression The seq expression parses each of the pexp operands in order If all of the pexp operands successfu
89. foo ac cessors foo a foo b and foo c and modifiers set foo a set foo b and set foo c In general if no options are specified define structure defines the following using the simple call above as an example type descriptor The name of the type descriptor is the same as the name of the structure e g foo The type descriptor satisfies the predicate record type constructor The name of the constructor is make followed by the name of the structure e g make foo The number of arguments accepted by the 30 MIT Scheme Reference constructor is the same as the number of slots the arguments are the initial values for the slots and the order of the arguments matches the order of the slot definitions predicate The name of the predicate is the name of the structure followed by e g foo The predicate is a procedure of one argument which re turns t if its argument is a record of the type defined by this structure definition and f otherwise accessors For each slot an accessor is defined The name of the accessor is formed by appending the name of the structure a hyphen and the name of the slot e g foo a The accessor is a procedure of one argument which must be a record of the type defined by this structure definition The accessor extracts the contents of the corresponding slot in that record and returns it modifiers For each slot a modifier is defined The name of the modifier is
90. formed by appending set the name of the accessor and e g set foo a The modifier is a procedure of two arguments the first of which must be a record of the type defined by this structure definition and the sec ond of which may be any object The modifier modifies the contents of the corresponding slot in that record to be that object and returns an unspecified value When options are not supplied name may be abbreviated to name This convention holds equally for structure options and slot options Hence these are equivalent define structure foo a b c define structure foo a b c as are define structure foo keyword constructor a b c define structure foo keyword constructor a b c When specified as option values false and nil are equivalent to 4f and true and t are equivalent to stt Possible slot options are read only value slot option When given a value other than f this specifies that no modifier should be created for the slot type type descriptor slot option This is accepted but not presently used Possible structure options are predicate name structure option This option controls the definition of a predicate procedure for the structure If name is not given the predicate is defined with the default name see above If name is 4f the predicate is not defined at all Otherwise name must be a symbol and the predicate is defined with that symbol as its name Chapter 2 Specia
91. gt exact x procedure These procedures are similar to the preceding procedures except that they always return an exact result For example the following are equivalent floor gt exact x inexact exact floor x except that the former is faster and has fewer range restrictions rationalize x y procedure rationalize gt exact x y procedure rationalize returns the simplest rational number differing from x by no more than y A rational number r1 is simpler than another rational number r2 if rl p1 q1 and r2 p2 q2 both in lowest terms and p1 lt p2 and q1 lt q2 Thus 3 5 is simpler than 4 7 Although not all rationals are comparable in this ordering consider 2 7 and 3 5 any interval contains a rational number that is simpler than every other rational number in that interval the simpler 2 5 lies between 2 7 and 3 5 Note that 0 0 1 is the simplest rational of all 66 MIT Scheme Reference rationalize inexact gt exact 3 1 10 1 3 exact rationalize 3 1 10 gt 11 3 inexact rationalize gt exact is similar to rationalize except that it always returns an exact result simplest rational x y procedure simplest exact rational x y procedure simplest rational returns the simplest rational number between x and y inclusive simplest exact rational is similar except that it always returns an exact result These procedures implement the same functionality as rationalize and rationalize gt exact except that they specif
92. initially zero and is incremented after each call to this procedure The optional argument object is used to control how the symbol is generated It may take one of the following values e If object is omitted or f the prefix is G e If object is an exact non negative integer the internal counter is set to that integer prior to generating the result e If object is a string it is used as the prefix e If object is a symbol its name is used as the prefix generate uninterned symbol t t uninterned symbol 31 GO generate uninterned symbol uninterned symbol 32 G1 generate uninterned symbol this uninterned symbol 33 this2 generate uninterned symbol uninterned symbol 34 G3 generate uninterned symbol 100 uninterned symbol 35 G100 generate uninterned symbol uninterned symbol 36 G101 symbol append symbol procedure Returns the interned symbol whose name is formed by concatenating the names of the given symbols This procedure preserves the case of the names of its arguments so if one or more of the arguments names has non standard case the result will also have non standard case Chapter 10 Miscellaneous Datatypes 131 symbol append foo bar foo bar the arguments may be uninterned symbol append foo string gt uninterned symbol baz foo baz the result has the same case as the arguments symbol append foo string gt symbol BAZ foo BAZ symbol h
93. input blocking mode port mode thunk procedure Thunk must be a procedure of no arguments port with input blocking mode binds the input blocking mode of port to be mode executes thunk restores the input blocking mode of port to what it was when port with input blocking mode was called and returns the value that was yielded by thunk This binding is performed by dynamic wind which guarantees that the input blocking mode is restored if thunk escapes from its continuation port output blocking mode port procedure Returns the output blocking mode of port port set output blocking mode port mode procedure Changes the output blocking mode of port to be mode Returns an unspecified value Chapter 14 Input Output 203 port with output blocking mode port mode thunk procedure Thunk must be a procedure of no arguments port with output blocking mode binds the output blocking mode of port to be mode executes thunk restores the output blocking mode of port to what it was when port with output blocking mode was called and returns the value that was yielded by thunk This binding is performed by dynamic wind which guarantees that the output blocking mode is restored if thunk escapes from its continuation 14 9 6 Terminal Mode A port that reads from or writes to a terminal has a terminal mode this is either cooked or raw This mode is independent of the blocking mode each can be changed independent of the other Furthermore a terminal 1 0 port
94. instance the condition types set by break on signals and the handlers established by bind condition handler and bind default condition handler If the condition is an instance of a type that is a specialization of any of the types specified by break on signals then a breakpoint REPL is initiated Otherwise or when that REPL returns the handlers established by bind condition handler are checked most recent first Each applicable handler is invoked and the search for a 260 MIT Scheme Reference handler continues if the handler returns normally If all applicable handlers return then the applicable handlers established by bind default condition handler are checked again most recent first Finally if no handlers apply or all return in a normal manner signal condition returns an unspecified value Note unlike many other systems the MIT Scheme runtime library does not estab lish handlers of any kind However the Edwin text editor uses condition handlers extensively Thus calls to signal condition will return to the caller unless there are user supplied condition handlers as the following example shows signal condition make condition condition type error call with current continuation lambda x x gt no restarts no fields gt unspecified 16 2 Error Messages By convention error messages and in general the reports generated by write condition report should consist of one or more complete sentence
95. is of the correct type but is otherwise out of range Most often this type indicates that an index to some data structure is outside of the range of indices for that structure The operator field contains the procedure or a symbol naming the procedure the operand field indicates the argument position that was involved this field contains either a symbol a non negative integer or f and the datum field is the offending argument string ref abc 3 error The object 3 passed as the second argument to string ref is not in the correct range To continue call RESTART with an option number RESTART 2 gt Specify an argument to use in its place RESTART 1 gt Return to read eval print level 1 error bad range argument datum operator procedure This procedure signals a condition of type condition type bad range argument The datum and operator fields of the condition are filled in from the corresponding arguments to the procedure the operand field of the condition is set to tf 276 MIT Scheme Reference condition type inapplicable object datum operands condition type This type indicates an error in which a program attempted to apply an object that is not a procedure The object being applied is saved in the datum field and the arguments being passed to the object are saved as a list in the operands field 3 4 error The object 3 is not applicable To continue call RESTART with an option number
96. is signalled if it appears elsewhere top level environment object procedure interpreter environment object procedure Returns stt if object is an top level environment otherwise returns f interpreter environment is an alias for top level environment extend top level environment environment names values procedure make root top level environment names values procedure Returns a newly allocated top level environment extend top level environment creates an environment that has parent environment while make root top level environment creates an environment that has no parent The optional arguments names and values are used to specify initial bindings in the new environment If specified names must be a list of symbols and values must be a list of objects If only names is specified each name in names will be bound in the environment but unassigned If names and values are both specified they must be the same length and each name in names will be bound to the corresponding value in values If neither names nor values is specified the environment will have no initial bindings link variables environment1 symboll environment2 symbol2 procedure Defines symboll in environment1 to have the same binding as symbol2 in environ ment2 and returns an unspecified value Prior to the call symbol2 must be bound in environment2 but the type of binding is irrelevant it may be a normal binding an unassigned binding or a keyword bindi
97. like unhash except that when k is not associated with any object or was previously associated with an object that has been reclaimed object unhash returns f This means that there is an ambiguity in the value returned by object unhash if 4f is returned there is no way to tell if k is associated with f or is not associated with any object at all Finally this procedure makes new object hash tables Chapter 11 Associations 153 hash table make procedure This procedure creates and returns a new empty object hash table that is suitable for use as the optional table argument to the above procedures The returned table contains no associations 11 6 Red Black Trees Balanced binary trees are a useful data structure for maintaining large sets of associations whose keys are ordered While most applications involving large association sets should use hash tables some applications can benefit from the use of binary trees Binary trees have two advantages over hash tables e The contents of a binary tree can be converted to an alist sorted by key in time proportional to the number of associations in the tree A hash table can be converted into an unsorted alist in linear time sorting it requires additional time e Two binary trees can be compared for equality in linear time Hash tables on the other hand cannot be compared at all they must be converted to alists before comparison can be done and alist comparison is quadratic unless the
98. line on graphics device that connects the points x start y start and x end y end The line is drawn using the current drawing mode and line style graphics draw text graphics device x y string procedure Draws the characters of string at the point x y on graphics device using the current drawing mode The characteristics of the characters drawn are device dependent but all devices are initialized so that the characters are drawn upright from left to right with the leftmost edge of the leftmost character at x and the baseline of the characters at y The following two procedures provide an alternate mechanism for drawing lines which is more akin to using a plotter They maintain a cursor which can be positioned to a particular point and then dragged to another point producing a line Sequences of connected line segments can be drawn by dragging the cursor from point to point Many graphics operations have an unspecified effect on the cursor The following excep tions are guaranteed to leave the cursor unaffected graphics device coordinate limits graphics coordinate limits graphics enable buffering graphics disable buffering graphics flush graphics bind drawing mode graphics set drawing mode graphics bind line style graphics set line style 284 MIT Scheme Reference The initial state of the cursor is unspecified graphics move cursor graphics device x y procedure Moves the cursor for graphics device to the point x y Th
99. microcode primitives e A foreign function interface FFI for calling procedures in dynamically linked libraries DLLs e An interface for Edwin e The Win32 package provides support for using the features of the Windows 3 1 and Windows NT 3 1 environments e Device Independent Bitmap utilities These are used by the win32 Scheme Graphics implementation The Scheme Graphics implementation is described in the Reference Manual Note that all the names in the Win32 support are part of the win32 package The names are bound in the win32 environment and do not appear as bindings in the user or root environments An effect of this is that it is far easier to develop Win32 software in the win32 package environment or a child environment 18 2 Foreign Function Interface The Win32 foreign function interface FFI is a primitive and fairly simple system for calling procedures written in C in a dynamically linked library DLL Both user s proce dures from a custom DLL and system procedures e g MessageBox are called using the same mechanism Warning The FFI as it stands has several flaws which make it difficult to use reliably It is expected that both the interface to and the mechanisms used by the FFI will be changed in the future We provide it and this documentation only to give people an early start in accessing some of the features of Win32 from Scheme Should you use it in an experiment we welcome any feedback The FFI is de
100. mode system 00 00 235 OUUDUt sedis ite cse Lote ai tdg 250 output buffer si2Z6 1 e lies 251 output buffer sizeon output port 201 output line translation 251 output port type i2 i 26 m b week eae 197 output port discretionary flush output 201 output port flush output 201 MIT Scheme Reference output port fresh line 201 output port write char 201 output port write string 201 output port write substring 201 output port x size s eee 201 output port y size ll esses 202 output port 2 s ces e ceu pex Une 179 P Paire ceanii ETE Reeds 106 109 137 parse namestring lsuse e e retis 222 parse xml document 22 0 2 9 eee 217 parser buffer pointer index 207 parser buffer pointer line 207 parser buffer pointer 2 icc 2 snis 205 parser buffer position string 207 parser butfer ref lt jo vied peace TEPP 205 parser buffert ic iocos eee piu ug ER 205 parser macros oosa gi ieiin tr mi eb ip era 216 pathname absol te 2 Rv E 226 pathname as directory 229 231 pathname default i 2 29 0 p RR ds 228 pathname default device 226 pathname default directory 226 pathname default name 226 pathname default type 226 pathname d
101. name components e Control over the current working directory the place in the file system from which relative file names are interpreted e Procedures that rename copy delete and test for the existence of files Also proce dures that return detailed information about a particular file such as its type directory link etc or length e Procedures for reading the contents of a directory e Procedures for obtaining times in various formats converting between the formats and generating human readable time strings e Procedures to run other programs as subprocesses of Scheme to read their output and write input to them e A means to determine the operating system Scheme is running under 15 1 Pathnames MIT Scheme programs need to use names to designate files The main difficulty in dealing with names of files is that different file systems have different naming formats for files For example here is a table of several file systems actually operating systems that provide file systems and what equivalent file names might look like for each one System File Name TOPS 20 lt LISPIO gt FORMAT FASL 13 TOPS 10 FORMAT FAS 1 4 ITS LISPIO FORMAT FASL MULTICS gt udd gt Lisp10 gt format fasl TENEX lt LISPIO gt FORMAT FASL 13 VAX VMS LISPIO FORMAT FAS 13 UNIX usr lispio format fasl DOS C USR LISPIO FORMAT FAS It would be impossible for each program that deals with file names to know about each different file name format
102. no errors filename procedure Like delete file but returns a boolean value indicating whether an error occurred during the deletion If no errors occurred t is returned If an error of type condition type file error or condition type port error is signalled f is re turned hard link file source filename target filename procedure Makes a hard link from source filename to target filename This operation gives the file specified by source filename a new name in addition to the old name This currently works only on unix systems It is further restricted to work only when source filename and target filename refer to names in the same file system soft link file source filename target filename procedure Creates a new soft link called target filename that points at the file source filename Soft links are also sometimes called symbolic links Note that source filename will be interpreted as a string although you may specify it as a pathname object if you wish The contents of this string will be stored in the file system as the soft link When a file operation attempts to open the link the contents of the link are interpreted relative to the link s location at that time This currently works only on unix systems Chapter 15 Operating System Interface 233 make directory filename procedure Creates a new directory named filename Signals an error if filename already exists or if the directory cannot be created delete directory filename
103. not generally available and the machine generated HTML produced by some word processors for output purposes only The Title Page means for a printed book the title page itself plus such following pages as are needed to hold legibly the material this License requires to appear in the title page For works in formats which do not have any title page as such Title Page means the text near the most prominent appearance of the work s title preceding the beginning of the body of the text VERBATIM COPYING You may copy and distribute the Document in any medium either commercially or noncommercially provided that this License the copyright notices and the license notice saying this License applies to the Document are reproduced in all copies and that you add no other conditions whatsoever to those of this License You may not use technical measures to obstruct or control the reading or further copying of the copies you make or distribute However you may accept compensation in exchange for copies If you distribute a large enough number of copies you must also follow the conditions in section 3 You may also lend copies under the same conditions stated above and you may publicly display copies COPYING IN QUANTITY If you publish printed copies of the Document numbering more than 100 and the Document s license notice requires Cover Texts you must enclose the copies in covers that carry clearly and legibly all these
104. occuring in both trees but associations with keys occuring in only the second tree would be copied not negated as is presumably be intent The programmer might ensure that this never happens This procedure has the same time behavior as wt tree union but with a slightly worse constant factor Indeed wt tree union might have been defined like this define wt tree union tree1 tree2 wt tree union merge tree1 tree2 lambda key vali val2 val2 The merge procedure takes the key as a parameter in case the data are not independent of the key 11 7 4 Indexing Operations on Weight Balanced Trees Weight balanced trees support operations that view the tree as sorted sequence of as sociations Elements of the sequence can be accessed by position and the position of an element in the sequence can be determined both in logarthmic time wt tree index wt tree index procedure wt tree index datum wt tree index procedure wt tree index pair wt tree index procedure Returns the 0 based indexth association of wt tree in the sorted sequence under the tree s ordering relation on the keys wt tree index returns the indexth key wt tree index datum returns the datum associated with the indexth key and wt tree index pair returns a new pair key datum which is the cons of the indexth key and its datum The average and worst case times required by this operation are proportional to the logarithm of the number of associations in the tree These oper
105. of address hashing is that converting an arbitrary object to a hash number is extremely fast and takes the same amount of time for any object The disadvantage of address hashing is that the garbage collector changes the addresses of most objects The hash table implementation compensates for this disadvantage by automatically rehashing tables that use address hashing when garbage collections occur Thus in order to use these procedures for key hashing it is necessary to tell the hash table implementation by means of the rehash after gc argument to the constructor constructor procedure that the hash numbers computed by your key hashing procedure must be recomputed after a garbage collection eq hash object procedure eqv hash object procedure equal hash object procedure These procedures return a hash number for object The result is always a non negative integer and in the case of eq hash a non negative fixnum Two objects that are equivalent according to eq eqv or equal respectively will produce the same hash number when passed as arguments to these procedures provided that the garbage collector does not run during or between the two calls The following procedures are the key hashing procedures used by the standard address hash based hash tables eq hash mod object modulus procedure This procedure is the key hashing procedure used by make eq hash table eqv hash mod object modulus procedure This procedure is the k
106. of define syntax both defines the syntactic keyword and generates code that will redefine the keyword when the program is loaded This means that the same syntax can be used for defining macros that will be used during compilation and for defining macros to be used at run time Although macros may expand into definitions and syntax definitions in any context that permits them it is an error for a definition or syntax definition to shadow a syntactic keyword whose meaning is needed to determine whether some form in the group of forms that contains the shadowing definition is in fact a definition or for internal definitions is needed to determine the boundary between the group and the expressions that follow the group For example the following are errors define define 3 begin define begin list let syntax foo syntax rules foo proc args body define proc lambda args body 2 222902 let x 3 foo plus x y x y define foo x plus foo x 2 11 2 Pattern Language MIT Scheme supports a high level pattern language for specifying macro transformers This pattern language is defined by the Revised 4 Report and is portable to other conform 38 MIT Scheme Reference ing Scheme implementations To use the pattern language specify a transformer spec as a syntax rules form syntax rules literals syntax rule special form Literals is a list of identifiers and each syntax rule should be of the
107. of the equal procedure It is an error to use a macro keyword within the scope of its binding in an expression that does not match any of the patterns When a macro use is transcribed according to the template of the matching syntax rule pattern variables that occur in the template are replaced by the subforms they match in the input Pattern variables that occur in subpatterns followed by one or more instances of the identifier are allowed only in subtemplates that are followed by as many instances of They are replaced in the output by all of the subforms they match in the input distributed as indicated It is an error if the output cannot be built up as specified Identifiers that appear in the template but are not pattern variables or the identifier are inserted into the output as literal identifiers If a literal identifier is inserted as a free identifier then it refers to the binding of that identifier within whose scope the instance of syntax rules appears If a literal identifier is inserted as a bound identifier then it is in effect renamed to prevent inadvertent captures of free identifiers let gt f cond itt gt ok gt ok The macro transformer for cond recognizes gt as a local variable and hence an expression and not as the top level identifier gt which the macro transformer treats as a syntactic keyword Thus the example expands into let gt if t begin gt ok
108. operation on input port discard chars input port char set operation on input port These operations are like read char and discard char except that they read or discard multiple characters at once This can have a marked performance improve ment on buffered input ports All characters up to but excluding the first character in char set or end of file are read from input port read string returns these char acters as a newly allocated string while discard chars discards them and returns an unspecified value These operations hang until sufficient input is available even if input port is in non blocking mode If end of file is encountered before any input characters read string returns an end of file object read substring input port string start end operation on input port Reads characters from input port into the substring defined by string start and end until either the substring has been filled or there are no more characters available Returns the number of characters written to the substring If input port is an interactive port and at least one character is immediately avail able the available characters are written to the substring and this operation returns immediately If no characters are available and input port is in blocking mode the operation blocks until at least one character is available Otherwise the operation returns f immediately This is an extremely fast way to read characters from a port input port read
109. permits a variant on the syntax of let called named let which pro vides a more general looping construct than do and may also be used to express recursions Named 1et has the same syntax and semantics as ordinary let except that name is bound within the expressions to a procedure whose formal arguments are the variables and whose body is the expressions Thus the execution of the expressions may be repeated by invoking the procedure named by name MIT Scheme allows any of the inits to be omitted in which case the corresponding variables are unassigned Note the following expressions are equivalent 28 MIT Scheme Reference let name variable init expression expression letrec name named lambda name variable expression expression name init Here is an example let loop Qumbers 3 2 1 6 5 nonneg neg cond null numbers list nonneg neg gt car numbers 0 loop cdr numbers cons car numbers nonneg neg else loop cdr numbers nonneg cons car numbers neg gt 6 1 3 5 2 do variable init step test expression command special form do is an iteration construct It specifies a set of variables to be bound how they are to be initialized at the start and how they are to be updated on each iteration When a termination condition is met the loop exits with a specified result value do expressions are
110. port 188 200 character searching string for 93 character standard sleslseesesss 79 character standard defn 0 83 character whitespace defn 83 characters special in programs 11 child of environment defn 6 circle graphies idoli Hse ence we ey aw neis 294 circles drawing 4c gerer eee neg ced 290 CIPGUIAE ISt o secus aucune EUR ad eA 109 117 circular structure 0 eee eee ee eee 55 clause of case expression sss esses 25 clause of cond expression lusus 24 clearing the console screen 189 client Socket ied ikkee Pep peels cee fe ala des 252 clip rectangle graphics defn 286 clipping of graphics 0 0 286 closing environment of procedure defn 15 closing of file port 2 ee eee 182 closing of Dort cero teak ed REG Rn RR 181 Code point Unicode 000 eee 84 code of character defn 00 80 GOlOE Cic Maced dade eae thas PES uns 293 296 combination den seize need ieee 14 comma as external representation 24 comment extended in programs defn 11 comment in programs defn 11 comparison predicate ssseese esses 48 comparison for equivalence 4 51 comparison of bit strings
111. procedure Deletes the directory named filename Signals an error if the directory does not exist is not a directory or contains any files or subdirectories gt truename filename procedure This procedure attempts to discover and return the true name of the file associ ated with filename within the file system An error of type condition type file operation error is signalled if the appropriate file cannot be located within the file system call with temporary file pathname procedure procedure Calls temporary file pathname to create a temporary file then calls procedure with one argument the pathname referring to that file When procedure returns if the temporary file still exists it is deleted then the value yielded by procedure is returned If procedure escapes from its continuation and the file still exists it is deleted temporary file pathname directory procedure Creates a new empty temporary file and returns a pathname referring to it The temporary file is created with Scheme s default permissions so barring unusual cir cumstances it can be opened for input and or output without error The temporary file will remain in existence until explicitly deleted If the file still exists when the Scheme process terminates it will be deleted If directory is specified the temporary file will be stored there If it is not specified or if it is the temporary file will be stored in the directory returned by temporary
112. rb tree height rb tree procedure Returns the height of rb tree an exact non negative integer This is the length of the longest path from a leaf of the tree to the root The average and worst case times required by this operation are proportional to the number of associations in the tree The returned value satisfies the following lambda rb tree let size rb tree size rb tree lg lambda x log x log 2 lt lg size rb tree height rb tree 2 1g size 1 rb tree copy rb tree procedure Returns a newly allocated copy of rb tree The copy is identical to rb tree in all respects except that changes to rb tree do not affect the copy and vice versa The time required by this operation is proportional to the number of associations in the tree alist gt rb tree alist key key lt procedure Returns a newly allocated red black tree that contains the same associations as alist This procedure is equivalent to lambda alist key key let tree make rb tree key key for each lambda association rb tree insert tree car association cdr association alist tree The following operations provide access to the smallest and largest members in a red black tree They are useful for implementing priority queues rb tree min rb tree default procedure Returns the smallest key in rb tree or default if the tree is empty rb tree min datum rb tree default procedure Returns the datum assoc
113. rectangle for graphics device Subsequent graphics output is clipped to the virtual coordinate limits of the device 17 7 Custom Graphics Operations In addition to the standard operations a graphics device may support custom operations For example most devices have custom operations to control color graphics operation is used to invoke custom operations graphics operation graphics device name object procedure Invokes the graphics operation on graphics device whose name is the symbol name passing it the remaining arguments This procedure can be used to invoke the stan dard operations as well as custom operations that are specific to a particular graphics device type The names of the standard graphics operations are formed by removing the graphics prefix from the corresponding procedure For example the following are equivalent graphics draw point device x y graphics operation device draw point x y For information on the custom operations for a particular device see the documen tation for its type Chapter 17 Graphics 287 17 8 Images Some graphics device types support images which are rectangular pieces of picture that may be drawn into a graphics device Images are often called something else in the host graphics system such as bitmaps or pixmaps The operations supported vary between devices so look under the different device types to see what operations are available All devices that support images suppor
114. regexp Returns a set of match registers see below if the search is successful or f if it is unsuccessful re substring search backward limits its search to the specified substring of string re string search backward searches all of string When a successful match or search occurs the above procedures return a set of match registers The match registers are a set of index registers that record indexes into the matched string Each index register corresponds to an instance of the regular expression grouping operator C and records the start index inclusive and end index exclusive of the matched group These registers are numbered from 1 to 9 corresponding left to right to the grouping operators in the expression Additionally register O corresponds to the entire substring matching the regular expression 98 MIT Scheme Reference re match start index n registers procedure re match end index n registers procedure N must be an exact integer between 0 and 9 inclusive Registers must be a match registers object as returned by one of the regular expression match or search proce dures above re match start index returns the start index of the corresponding regular expression register and re match end index returns the corresponding end index re match extract string registers n procedure Registers must be a match registers object as returned by one of the regular expression match or search procedures above String must be the string
115. sent to the current output port Otherwise destination must be an output port and the output is sent there This procedure performs discretionary output flushing see Section 14 5 Output Pro cedures page 188 A format directive consists of a tilde optional prefix parameters separated by commas optional colon and at sign modifiers and a single character indicating what kind of directive this is The alphabetic case of the directive character is ignored The prefix parameters are generally integers notated as optionally signed decimal 5 This description of format is adapted from Common Lisp The Language second edition section 22 3 3 192 MIT Scheme Reference numbers If both the colon and at sign modifiers are given they may appear in either order In place of a prefix parameter to a directive you can put the letter V or v which takes an argument for use as a parameter to the directive Normally this should be an exact integer This feature allows variable width fields and the like You can also use the character in place of a parameter it represents the number of arguments remaining to be processed It is an error to give a format directive more parameters than it is described here as accepting It is also an error to give colon or at sign modifiers to a directive in a combination not specifically described here as being meaningful A 7S Uh newline The next argumen
116. set count count 1 count a b c unspecified map initial value procedure list1 list2 procedure Similar to map except that the resulting list is terminated by initial value rather than the empty list T he following are equivalent 3 Although they are often used as predicates memq memv and member do not have question marks in their names because they return useful values rather than just t or f Chapter 7 Lists 115 map procedure list list map procedure list list append map procedure list list procedure append map initial value procedure list list procedure Similar to map and map respectively except that the results of applying procedure to the elements of lists are concatenated together by append rather than by cons The following are equivalent except that the former is more efficient append map procedure list list apply append map procedure list list append map procedure list list procedure append map initial value procedure list list procedure Similar to map and map respectively except that the results of applying procedure to the elements of lists are concatenated together by append rather than by cons The following are equivalent except that the former is more efficient append map procedure list list apply append map procedure list list for each procedure list list procedure The arguments to for each are like t
117. set xml parameter lentity name 220 set xml parameter entity value 220 set xml processing instructions name 219 set xml processing instructions text 219 set xml uninterpreted text 219 set xml unparsed entity id 220 set xml unparsed entity name 220 set xml unparsed entity notation 220 seventh eg jede ers re E Ye ees das 110 SORD Lee og Leute cdi eh Bue 212 215 shell file name6 nec imde eret ee 252 SHOPC i hin aoe she exero diste dena 306 sign l condition c ce emernr s 258 259 262 signed integer gt bit string 126 simplest exact rational 66 simplest rational 4 i irei eek Bee 66 BSIn clbeceeteee X ese ent E EE ue eU WE 66 singleton wt tree l ooo be atin ate 158 ebd esrb nih E E oh see ye ge eee 110 soft Iink fil8 6 2c n kek ae et 232 SOPLb ves E pi WOp tue ard Adres hag I SOrtl o e E D robe eiue pieds 122 source gt parser buffer s 205 SdEt soir e pier PHRIRRD Red ERES 59 67 standard error handler 262 standard error hook e n 262 standard unparser method 194 standard warning handler 262 263 standard warning hook 262 263 Store Valueis ci cack o epe ase deans 263 266 inq ric M P ae er ee ae 135 Str am S1lists occsucasdnaacetaersoemaaereege 135 SULCAM Car ik ake dot RR DRESS 136 Stream EdE cat big edad
118. si ccdeien ci tadedide nbibtateinte 78 83 87 HD ono seg E tid windings MeL eNH oe een as 60 UD 60 HO Lae ed Deloss Eq E aeree hei gees 60 e a lb lw x EpbTerfieepe ep PSU es 8 24 127 dll eerie puede ieRPUU LAE QU 60 HO ieee tates te 00 tetapi nra ace RE DUE PE 60 o eed 8 24 127 HE pierced r9 ewe on M pee ev e a FERE 60 76 V4delete dib i24 er Pv RR rh E ERE 31 9 PE 22 105 319 TOIT 14 62 211 214 default pathname defaults 227 matcher ics Greet od a o e aE eee EE 210 DarSer leo seek tse Badia what e ene eai 213 parser canonicalize symbols 188 parser radiX iiec ee hb ret 187 random State ices cerle lise deat REP 75 unparse with maximum readability 191 unparser list breadth limit 190 unparser list depth limit 190 u nparser radix 2 c RR Ea 190 unparser string length limit 190 4 Poari is restive vied Sachs p ew pere 14 58 62 211 214 FE evra ee E 73 PEEP ET rE a ES A A EET 24 105 24 105 ph tius desc dap NS EI ELLE ds 62 n m estring zo esca ood clon anas 222 pat hna aroser dae bd RE cue ERR 222 231 SPELUSHAMG suc ieersetery iain renoir Her 233 zc IPLE 62 SUT ac alee cd Sosa usine tte E Macks a 73 E E E EEE E EE EE 105 LCD 38 J jedes ba bon bu SGD RES PIS Id ob pM ars 59 62 C n patents aburedustd uade gb ree Rt bol ue pe Re ARA 61 EE DesprPRREPR OUR t
119. string corresponding to the association of resource and property if no such association exists f is returned copy area source x left source y top width height operation on x graphics device destination x left destination y top This operation copies the contents of the rectangle specified by source x left source y top width and height to the rectangle of the same dimensions at destination x left and destination y top 292 MIT Scheme Reference font structure font name operation on x graphics device Returns a Scheme equivalent of the X font structure for the font named font name If the string font name does not name a font known to the X server or names a 16 bit font is returned x font structure name font structure procedure x font structure direction font structure procedure x font structure all chars exist font structure procedure x font structure default char font structure procedure x font structure min bounds font structure procedure x font structure max bounds font structure procedure x font structure start index font structure procedure x font structure character bounds font structure procedure x font structure max ascent font structure procedure x font structure max descent font structure procedure These procedures extract the components of the font description structure returned by the X graphics operation font structure A more complete description of these com ponents appears in documentation of the XLoadQueryFont
120. string returns a long string that fully spells out the name of the day day of week short string returns a shortened string that abbreviates the day to three letters 246 MIT Scheme Reference day of week long string 0 Monday day of week short string 0 Mon day of week short string 3 Thu month long string month procedure month short string month procedure Returns a string representing the given month The argument must be an exact non negative integer between 1 and 12 inclusive month long string returns a long string that fully spells out the name of the month month short string returns a shortened string that abbreviates the month to three letters month long string 1 gt January month short string 1 Jan month short string 10 Oct time zone gt string procedure Returns a string corresponding to the given time zone This string is the same string that is used to generate RFC 822 time strings time zone gt string 5 0500 time zone gt string 4 0400 time zone gt string 11 2 0530 15 6 Machine Time The previous section dealt with procedures that manipulate clock time This section describes procedures that deal with computer time elapsed CPU time elapsed real time and so forth These procedures are useful for measuring the amount of time it takes to execute code Some of the procedures in this section manipulate a time representation called ticks A tick is a unit of time tha
121. style respectively of graphics device invoke the procedure thunk with no arguments then undo the binding when thunk returns The value of each procedure is the value returned by thunk Graphics operations performed during thunk s dynamic extent will see the newly bound mode or style as current graphics set drawing mode graphics device drawing mode procedure graphics set line style graphics device line style procedure These procedures change the drawing mode or line style respectively of graphics device The mode or style will remain in effect until subsequent changes or bindings 17 5 Buffering of Graphics Output To improve performance of graphics output most graphics devices provide some form of buffering By default Scheme s graphics procedures flush this buffer after every drawing operation The procedures in this section allow the user to control the flushing of the output buffer graphics enable buffering graphics device procedure Enables buffering for graphics device In other words after this procedure is called graphics operations are permitted to buffer their drawing requests This usually means that the drawing is delayed until the buffer is flushed explicitly by the user or until it fills up and is flushed by the system graphics disable buffering graphics device procedure Disables buffering for graphics device By default all graphics devices are initialized with buffering disabled After this procedure is called al
122. symbolic links if filename names a symbolic link file attributes returns the attributes of the link itself An alternate proce dure file attributes indirect returns the attributes of the file linked to in all other respects it is identical to file attributes For symmetry file attributes direct is a synonym of file attributes The information returned by file attributes is decoded by accessor procedures The following accessors are defined in all operating systems file attributes type attributes procedure The file type stt if the file is a directory a character string the name linked to if a symbolic link or f for all other types of file file attributes access time attributes procedure The last access time of the file an exact non negative integer file attributes modification time attributes procedure The last modification time of the file an exact non negative integer file attributes change time attributes procedure The last change time of the file an exact non negative integer file attributes length attributes procedure The length of the file in bytes file attributes mode string attributes procedure The mode string of the file a newly allocated string showing the file s mode bits Under unix this string is in unix format Under OS 2 and Windows this string shows the standard DOS attributes in their usual format file attributes n links attributes procedure The number of links to the file an exact po
123. table that are associated with y key The result is a list of x key datum pairs Returns the empty list if no entries for y key exist 2d put bar foo 5 2d put baz foo 6 2d get alist y foo gt baz 6 bar 5 11 4 Hash Tables Hash tables are a fast powerful mechanism for storing large numbers of associations MIT Scheme s hash tables feature automatic resizing customizable growth parameters and customizable hash procedures The average times for the insertion deletion and lookup operations on a hash table are bounded by a constant The space required by the table is proportional to the number of as sociations in the table the constant of proportionality is described below see Section 11 4 3 Resizing of Hash Tables page 146 Previously the hash table implementation was a run time loadable option but as of release 7 7 0 it is loaded by default It s no longer necessary to call load option prior to using hash tables 11 4 1 Construction of Hash Tables The next few procedures are hash table constructors All hash table constructors are procedures that accept one optional argument initial size and return a newly allocated hash table If initial size is given it must be an exact non negative integer or f The meaning of initial size is discussed below see Section 11 4 3 Resizing of Hash Tables page 146 Hash tables are normally characterized by two things the equivalence predicate that is
124. that demonstrate how delete member procedure could have been used to implement delv and delete define delv delete member procedure list deletor eqv define delete delete member procedure list deletor equal list deletor predicate procedure list deletor predicate procedure These procedures each return a procedure that deletes elements from lists Predicate must be a procedure of one argument The returned procedure accepts exactly one argument which must be a proper list and applies predicate to each of the elements of the argument deleting those for which it is true The procedure returned by list deletor deletes elements non destructively by re turning a newly allocated copy of the argument with the appropriate elements re moved The procedure returned by list deletor performs a destructive deletion 7 6 Searching Lists find matching item list predicate procedure Returns the first element in list for which predicate is true returns f if it doesn t find such an element This means that if predicate is true for f it may be impossible 114 MIT Scheme Reference to distinguish a successful result from an unsuccessful one Predicate must be a procedure of one argument For compatibility list search positive is an alias for find matching item list search negative is similar but the sense of the predicate is reversed memq object list procedure memv object list procedure member object list procedure Thes
125. that was passed as an argument to the procedure that returned registers N must be an exact integer between 0 and 9 inclusive If the matched regular expression contained m grouping operators then the value of this procedure is undefined for n strictly greater than m This procedure extracts the substring corresponding to the match register specified by registers and n This is equivalent to the following expression substring string re match start index n registers re match end index n registers regexp group alternative procedure Each alternative must be a regular expression The returned value is a new regular expression that consists of the alternatives combined by a grouping operator For example regexp group foo bar baz foo bar baz 6 8 2 REXP abstraction In addition to providing standard regular expression support MIT Scheme also provides the REXP abstraction This is an alternative way to write regular expressions that is easier to read and understand than the standard notation Regular expressions written in this notation can be translated into the standard notation The REXP abstraction is a set of combinators that are composed into a complete regular expression Each combinator directly corresponds to a particular piece of regular expression notation For example the expression rexp any char corresponds to the character in standard regular expression notation while rexp rexp corresponds to
126. the character The primary advantages of REXP are that it makes the nesting structure of regular expressions explicit and that it simplifies the description of complex regular expressions by allowing them to be built up using straightforward combinators rexp object procedure Returns t if object is a REXP expression or f otherwise A REXP is one of a string which represents the pattern matching that string a character set which represents the pattern matching a character in that set or an object returned by calling one of the procedures defined here Chapter 6 Strings 99 rexp gt regexp rexp procedure Converts rexp to standard regular expression notation returning a newly allocated string rexp compile rexp procedure Converts rexp to standard regular expression notation then compiles it and returns the compiled result Equivalent to re compile pattern rexp gt regexp rexp f rexp any char procedure Returns a REXP that matches any single character except a newline This is equivalent to the construct rexp line start procedure Returns a REXP that matches the start of a line This is equivalent to the construct rexp line end procedure Returns a REXP that matches the end of a line This is equivalent to the construct rexp string start procedure Returns a REXP that matches the start of the text being matched This is equivalent to the construct rexp string end procedure Returns a REXP that matche
127. the command line arguments passed to the program but does not provide file globbing I O redirection or other shell features run shell command command option procedure Runs command which must be a string Command is passed to a command shell for interpretation how the shell is chosen is detailed below The options are a sequence of keyword value pairs that specify optional behavior See below for more information about options run shell command waits until the subprocess completes its execution and returns the exit code from the subprocess If the subprocess is killed or stopped an error is signalled and the procedure does not return run synchronous subprocess program arguments option procedure Runs program passing it the given command line arguments Program must be either the name of a program on the path or else a pathname to a specific program Arguments must be a list of strings each string is a single command line argument to the program Chapter 15 Operating System Interface 249 The options are a sequence of keyword value pairs that specify optional behavior See below for more information about options run synchronous subprocess waits until the subprocess completes its execution and returns the exit code from the subprocess If the subprocess is killed or stopped an error is signalled and the procedure does not return 15 7 2 Subprocess Conditions If a subprocess spawned by one of the above procedures
128. the entire vector The valid indexes of a subvector are the exact integers between start inclusive and end exclusive 8 1 Construction of Vectors make vector k object procedure Returns a newly allocated vector of k elements If object is specified make vector initializes each element of the vector to object Otherwise the initial elements of the result are unspecified vector object procedure Returns a newly allocated vector whose elements are the given arguments vector is analogous to list vector a b c gt a b c vector copy vector procedure Returns a newly allocated vector that is a copy of vector list gt vector list procedure Returns a newly allocated vector initialized to the elements of list The inverse of list gt vector is vector gt list list gt vector dididit dah gt dididit dah 120 MIT Scheme Reference make initialized vector k initialization procedure Similar to make vector except that the elements of the result are determined by calling the procedure initialization on the indices For example make initialized vector 5 lambda x x x gt 0 149 16 vector grow vector k procedure K must be greater than or equal to the length of vector Returns a newly allocated vector of length k The first vector length vector elements of the result are initialized from the corresponding elements of vector The remaining elements of the result are unspecified vector map procedu
129. the expanded expression is evaluated in the transformer environment to yield a macro transformer as described below This Chapter 2 Special Forms Al macro transformer is bound to a macro keyword by the special form in which the transformer expression appears for example let syntax In the syntactic closures facility a macro transformer is a procedure that takes two arguments a form and a syntactic environment and returns a new form The first argument the input form is the form in which the macro keyword occurred The second argument the usage environment is the syntactic environment in which the input form occurred The result of the transformer the output form is automatically closed in the transformer environment which is the syntactic environment in which the transformer expression occurred For example here is a definition of a push macro using syntax rules define syntax push syntax rules push item list set list cons item list Here is an equivalent definition using sc macro transformer define syntax push sc macro transformer lambda exp env let item make syntactic closure env cadr exp list make syntactic closure env caddr exp set list cons item list In this example the identifiers set and cons are closed in the transformer environ ment and thus will not be affected by the meanings of those identifiers in the usage environment env Some macros may be no
130. the null pointer which doesnt point anywhere handle windows type hbitmap windows type hbrush windows type hcursor windows type hdc windows type hicon windows type hinstance windows type hmenu windows type hpalette windows type hpen windows type hrgn windows type hwnd windows type resource id Various kinds of Win32 handle These names correspond to the same but all up percase names in the Windows C language header files Win32 API calls are the source of values of this type and the values are meaningless except as arguments to other Win32 API calls Currently these values are represented as integers but we expect that Win32 handles will in future be represented by allocated Scheme objects e g records that will allow predicates e g hmenu and sensible interlocking with the garbage collector to free the programmer of the current tedious allocation and deallocation of handles A Windows resource identifier is either a small integer or a string In C this distinc tion is possible because pointers look like larger integers so a machine word repre senting a small integer can be distinguished from a machine word that is a pointer to the text of the name of the resource windows type Chapter 18 Win32 Package Reference 307 18 2 2 Windows Foreign Procedures Foreign procedures are declared as callable entry points in a module usually a dynami cally linked library DLL find module name procedure Returns a module suitabl
131. the relationship of the table s physical size to its usable size If the programmer knows that the table will initially contain a specific number of items initial size can be given when the table is created If initial size is an exact non negative integer it specifies the initial usable size of the hash table the table will not change size until the number of items in the table exceeds initial size after which automatic resizing is enabled and initial size no longer has any effect Otherwise if initial size is not given or 148 MIT Scheme Reference is 4f the table is initialized to an unspecified size and automatic resizing is immediately enabled The rehash size specifies how much to increase the usable size of the hash table when it becomes full It is either an exact positive integer or a real number greater than one If it is an integer the new size is the sum of the old size and the rehash size Otherwise it is a real number and the new size is the product of the old size and the rehash size Increasing the rehash size decreases the average cost of an insertion but increases the average amount of space used by the table The rehash size of a table may be altered dynamically by the application in order to optimize the resizing of the table for example if the table will grow quickly for a known period and afterwards will not change size performance might be improved by using a large rehash size during the growth phase and a small
132. the result of convert on that object Revert may then inspect the converted object and copy back the changes to the original define windows type name check convert return revert special form define similar windows type name model check convert return special form revert Both forms define a windows type The first form defines a type in terms of its aspects as described above The second defines the type as being like another type except for certain aspects which are redefined Name is the name of the type Model is the Chapter 18 Win32 Package Reference 305 name of a type Check convert return and revert are procedures or the value f A f means use the default value which in the second form means use the definition provided for model The defaults are check lambda x t i e unchecked convert lambda x x ie no translation performed return lambda x x i e no translation performed revert lambda x y unspecific i e no update performed The unchecked windows type see below is defined as define windows type unchecked f f f Hf Windows types are not first class values so they cannot be stored in variables or defined using define define my type unchecked Unbound variable define similar windows type my type unchecked the correct way Scheme characters must be converted to integers This is accomplished as follows define windows type char char check char gt integer convert in
133. the substring one character at a time using write char except that it is usually much faster Chapter 14 Input Output 189 write object output port procedure Writes a written representation of object to output port and returns an unspecified value If object has a standard external representation then the written representa tion generated by write shall be parsable by read into an equivalent object Thus strings that appear in the written representation are enclosed in doublequotes and within those strings backslash and doublequote are escaped by backslashes write performs discretionary output flushing and returns an unspecified value display object output port procedure Writes a representation of object to output port Strings appear in the written repre sentation as if written by write string instead of by write Character objects ap pear in the representation as if written by write char instead of by write display performs discretionary output flushing and returns an unspecified value newline output port procedure Writes an end of line to output port performs discretionary output flushing and returns an unspecified value Equivalent to write char newline output port fresh line output port procedure Most output ports are able to tell whether or not they are at the beginning of a line of output If output port is such a port this procedure writes an end of line to the port only if the port is not already at the beg
134. their keys Action is a procedure of two arguments that takes the key and datum respectively of the association Provided action takes time bounded by a constant wt tree for each takes time proportional to the size of wt tree The example prints the tree wt tree for each lambda key value display list key value wt tree wt tree union merge wt tree 1 wt tree 2 merge procedure Returns a new tree containing all the associations from both trees If both trees have an association for the same key the datum associated with that key in the result tree is computed by applying the procedure merge to the key the value from wt tree 1 and the value from wt tree 2 Merge is of the form lambda key datum 1 datum 2 162 MIT Scheme Reference If some key occurs only in one tree that association will appear in the result tree without being processed by merge so for this operation to make sense either merge must have both a right and left identity that correspond to the association being absent in one of the trees or some guarantee must be made for example all the keys in one tree are known to occur in the other These are all reasonable procedures for merge lambda key vali val2 vali val2 lambda key vali val2 append vali val2 lambda key vali val2 wt tree union vali val2 However a procedure like lambda key vali val2 vali val2 would result in a subtraction of the data for all associations with keys
135. then f is returned or 2 2 2 1 dit tor 2 2 2 1 gt dit or 4f Hf Hf gt df or memq b ab c 3 0 gt bc 2 8 Sequencing The begin special form is used to evaluate expressions in a particular order Chapter 2 Special Forms 27 begin expression expression special form The expressions are evaluated sequentially from left to right and the value of the last expression is returned This expression type is used to sequence side effects such as input and output define x 0 begin set x 5 x 1 gt 6 begin display 4 plus 1 equals display 4 1 4 plus 1 equals 5 gt unspecified Often the use of begin is unnecessary because many special forms already support sequences of expressions that is they have an implicit begin Some of these special forms are case cond define procedure define only do fluid let lambda let let letrec named lambda The obsolete special form sequence is identical to begin It should not be used in new code 2 9 Iteration The iteration expressions are named let and do They are also binding expressions but are more commonly referred to as iteration expressions Because Scheme is properly tail recursive you don t need to use these special forms to express iteration you can simply use appropriately written recursive procedure calls let name variable init expression expression special form MIT Scheme
136. title my win Hi gt dit 5 Changes window s title text set window title compiled procedure set window text Unbound variable When there are no options the created procedure will a check its arguments against the types b convert the arguments c call the C procedure and d convert the returned value No reversion is performed even if one of the types has a reversion defined Reverted types are rare I have never used one so paying a cost for this unless it is used seems silly The following options are allowed with reversions The reversions are included in the type conversions expand A synonym for with reversions Scheme code The Scheme code is placed between steps a and b in the default pro cess The Scheme code can enforce constraints on the arguments includ ing constraints between arguments such as checking that an index refers to a valid position in a string If both options i e with reversions and Scheme code are used with reversions must appear first There can be arbitrarily many Scheme expression 18 2 3 Win32 API names and procedures This section is a moving target The define values from wingdi h and winuser h are available as bindings in the win32 package environment The define symbols are all uppercase these have been translated to all lowercase Scheme identifiers thus WM LBUTTONUP is the scheme variable wm_ lbuttonup As Scheme is case insensitive the upper
137. to be defined for the structure recall that the type option without named suppresses their definition and also defines a default unparser method for the structure instances which can be overridden by the print procedure option If the default unparser method is not wanted then the print procedure option should be specified as F This causes the structure to be printed in its native representation as a list or vector which includes the type descriptor The type descriptor is a unique object not a record type that describes the structure instances and is additionally stored in the structure instances to identify them if the representation type is vector the type descriptor is stored in the zero th slot of the vector and if the representation type is list it is stored as the first element of the list define structure foo type vector named a b c vector ref make foo 1 2 3 0 structure type 52 If expression is specified it is an expression that is evaluated to yield a tag object The expression is evaluated once when the structure definition is evaluated to specify the unparser method and again whenever a predicate or constructor is called Because of this expression is normally a variable reference or a constant The value yielded by expression may be any object at all That object is stored in the structure instances in the same place that the type descriptor is normally stored as described above If expression is specifie
138. translation r n input buffer size n subprocess option Specifies the size of the input buffer for the standard input of the subprocess This is the buffer on the Scheme side and has nothing to do with any buffering done on the subprocess side Ignored if the input option is N must be an exact positive integer specifying the number of characters the buffer can hold The default value of this option is 512 call with input file foo in lambda port run shell command cat gt dev null input port input buffer size 4096 output port subprocess option Specifies the standard output and standard error of the subprocess Port may be an output port in which case characters are read from the subprocess and fed to port until the subprocess finishes Alternatively port may be f indicating that the subprocess has no standard output or standard error The default value of this option is the value of current output port call with output file foo out lambda port run shell command ls la etc output port Chapter 15 Operating System Interface 251 output line translation line ending subprocess option Specifies how line endings should be translated when reading characters from the standard output of the subprocess Ignored if the output option is 4f Line ending must be either a string specifying the line ending or the symbol default meaning to use the operating system s standard line ending In either
139. tree is the number of associations that it contains Weight balanced binary trees are balanced to keep the sizes of the subtrees of each node within a constant factor of each other This ensures logarithmic times for single path operations like lookup Chapter 11 Associations 157 and insertion A weight balanced tree takes space that is proportional to the number of associations in the tree For the current implementation the constant of proportionality is six words per association Weight balanced trees can be used as an implementation for either discrete sets or dis crete maps associations Sets are implemented by ignoring the datum that is associated with the key Under this scheme if an association exists in the tree this indicates that the key of the association is a member of the set Typically a value such as stt or f is associated with the key Many operations can be viewed as computing a result that depending on whether the tree arguments are thought of as sets or maps is known by two different names An example is wt tree member which when regarding the tree argument as a set computes the set membership operation but when regarding the tree as a discrete map wt tree member is the predicate testing if the map is defined at an element in its domain Most names in this package have been chosen based on interpreting the trees as sets hence the name wt tree member rather than wt tree defined at The weight balanced t
140. type for which attributes are being declared a symbol Definitions is a list of attribute definitions each of which is a list of three elements name type default Name is an XML name for the name of the attribute a symbol Type describes the attribute type and can have one of the following values e The XML names CDATA IDREFS IDREF ID ENTITY ENTITIES NMTOKENS and NMTOKEN correspond to the XML keywords of the same names e A list NOTATION namel name2 corresponds to the NOTATION namel name2 syntax e A list ENUMERATED namel name2 corresponds to the namel name2 syntax Default describes the default value for the attribute and can have one of the following values 220 MIT Scheme Reference e The XML names REQUIRED and IMPLIED correspond to the XML keywords of the same names e A list FIXED value corresponds to the FIXED value syntax Value is represented as a string but might also be an xml uninterpreted record e A list DEFAULT value corresponds to the value syntax Value is repre sented as a string but might also be an xml uninterpreted record xml entity name value record type The xml entity record represents a general entity declaration Name is an XML name for the entity Value is the entity s value either a string an xml uninterpreted record or an xml external id record
141. unlikely to have anything to do with the new one Finally if this process leaves the version missing then default version is used The net effect is that if the user supplies just a name then the host device directory and type will come from defaults but the version will come from default version If the user supplies nothing or just a directory the name type and version will come over from defaults together default pathname defaults variable This is the default pathname defaults pathname if any pathname primitive that needs a set of defaults is not given one it uses this one set working directory 228 MIT Scheme Reference pathname sets this variable to a new value computed by merging the new working directory with the variable s old value pathname default pathname device directory name type version procedure This procedure defaults all of the components of pathname simultaneously It could have been defined by define pathname default pathname device directory name type version make pathname pathname host pathname or pathname device pathname device or pathname directory pathname directory or pathname name pathname name or pathname type pathname type or pathname version pathname version file namestring pathname procedure directory namestring pathname procedure host namestring pathname procedure enough namestring pathname defaults procedure These procedures return a string correspondi
142. wrong type The operator field contains the procedure or a symbol naming the procedure the operand field indicates the argument position that was involved this field contains either a symbol a non negative integer or f the type field contains a string describ ing the type that was expected and the datum field contains the offending argument a 3 error The object a passed as the first argument to integer add is not the correct type To continue call RESTART with an option number RESTART 2 gt Specify an argument to use in its place RESTART 1 gt Return to read eval print level 1 list copy 3 The object 3 passed as an argument to list copy is not a list To continue call RESTART with an option number RESTART 1 gt Return to read eval print level 1 error wrong type argument datum type operator procedure This procedure signals a condition of type condition type wrong type argument The datum type and operator fields of the condition are filled in from the corre sponding arguments to the procedure the operand field of the condition is set to Hf condition type wrong number of arguments datum type condition type operands This type indicates that a procedure was called with the wrong number of arguments The datum field contains the procedure being called the type field contains the number of arguments that the procedure accepts and the operands field contains a list of the a
143. xml element object Misc 1 misc 2 and misc 3 are lists of miscellaneous items a miscellaneous item is either an xml processing instructions object or a string of whitespace xml declaration version encoding standalone record type The xml declaration record represents the lt xml gt declaration that option ally appears at the beginning of an XML document Version is a version string typically 1 0 Encoding is either an encoding string or amp f Standalone is either yes no or dtf xml element name attributes contents record type The xml element record represents general XML elements the bulk of a typical XML document consists of these elements Name is the element name a symbol At tributes is a list of attributes each attribute is a pair whose CAR is the attribute name a symbol and whose CDR is the attribute value a string Contents is a list of the contents of the element Each element of this list is either a string an xml element record an xml processing instructions record or an xml uninterpreted record Chapter 14 Input Output 219 xml processing instructions name text record type The xml processing instructions record represents processing instructions which have the form lt name gt These instructions are intended to contain non XML data that will be processed by another interpreter for example they might contain PHP programs The name field is the processor name a symbol and the
144. 0000 238 file attributes inode number 238 file attributes length 237 file attributes mode string 237 file attributes modes 238 file attributes modification time 237 file attributes n links 291 file attributes type ss sss esses 237 file attributes uid 00000 238 File directory is ices uo eh eases 233 file eg cds die rh ER Reg DiE aaie i E 235 fil e xecutable 2 recreia tiie 235 file exists dir ct i loud v 232 file exists indirect 232 fil exiSt 2 22 244 uy hue REPRE REN 232 file length 44522 254 pr a aed 237 MIT Scheme Reference fil mod es 222 5G c epe ccn or Goh Dy 235 file modification time 236 file modification time direct 236 file modification time indirect 236 file names tring iresi dace d he 228 file pathname ln iced dob a 228 file readable ill ille ee 234 file regular o ee peta oS ee ERES LER 234 file symbOlic lihk 009 4 verres 234 file time gt global decoded time 244 file time gt global time string 244 file time gt local decoded time 244 file time gt local time string 244 file time gt universal time 244 Pile Couch 4 2 04 wh tae aede ened ees 237 file type direct ilio debe 234 file type indi
145. 1 Chapter 11 Associations 161 wt tree set equal wt tree 1 wt tree 2 procedure Returns t iff for every association in wt tree 1 there is an association in wt tree 2 that has the same key and vice versa Viewing the arguments as sets wt tree set equal is the set equality predicate As a map operation it determines if two maps are defined on the same domain This procedure is equivalent to lambda wt tree 1 wt tree 2 and wt tree subset wt tree 1 wt tree 2 wt tree subset wt tree 2 wt tree 1 In the worst case the time required by this operation is proportional to the size of the smaller tree wt tree fold combiner initial wt tree procedure This procedure reduces wt tree by combining all the associations using an reverse in order traversal so the associations are visited in reverse order Combiner is a proce dure of three arguments a key a datum and the accumulated result so far Provided combiner takes time bounded by a constant wt tree fold takes time proportional to the size of wt tree A sorted association list can be derived simply wt tree fold lambda key datum list cons cons key datum list O wt tree The data in the associations can be summed like this wt tree fold lambda key datum sum sum datum 0 wt tree wt tree for each action wt tree procedure This procedure traverses wt tree in order applying action to each association The associations are processed in increasing order of
146. 101 rexp optional rexp procedure Returns a REXP that matches zero or one instances of the pattern matched by the rexp arguments This is equivalent to the construct rexp case fold rexp procedure Returns a REXP that matches the same pattern as rexp but is insensitive to character case This has no equivalent in standard regular expression notation 6 9 Modification of Strings string replace string charl char2 procedure substring replace string start end charl char2 procedure string replace string char1 char2 procedure substring replace string start end charl char2 procedure These procedures replace all occurrences of charl with char2 in the original string substring string replace and substring replace return a newly allocated string containing the result string replace and substring replace destruc tively modify string and return an unspecified value define str a few words unspecified string replace str space a few words substring replace str 2 9 space gt a few words str a few words string replace str space unspecified str a few words string fill string char procedure Stores char in every element of string and returns an unspecified value substring fill string start end char procedure Stores char in elements start inclusive to end exclusive of string and returns an unspecified value define s make string 10 space unspecified substring fill
147. 125 comparison of boolean objects 127 comparison of characters 000 79 comparison of numbers 00 00 61 comparison of stringS 0 ee eee eee 89 compiled procedure type 00065 165 Concept Index component selection of bit string 124 component selection of cell uuuu 131 component selection of character 80 component selection of list 109 component selection of pair 106 component selection of stream 136 component selection of string 88 component selection of vector 120 component selection of weak pair 137 components of pathname 223 compound procedure 00 eee eeee 165 cond clause correre o eDre rr ade baeeees 24 condition def 2 uoed Ce eet Euh ees 268 condition handler defn ssu 261 condition instance defn 0 268 condition signalling defn iussu 258 condition type i222 ce LEDISevbRRXPmE dS 258 271 conditional expression defn 24 console clearing d ree thon es 189 console POLE 1 23222 err I err hes 181 console ringing the bell LLuue 189 CODS ADL 4 mi eR ed bei donde dede 9 constant expression defn suse 13 constant and quasiquote esses 23 constant and quote
148. 4 2 Internal Definitions An internal definition is a definition that occurs at the beginning of a body that is the body of a lambda let let letrec fluid let or procedure define expression rather than at the top level of a program The variable defined by an internal definition is local to the body That is variable is bound rather than assigned and the region of the binding is the entire body For example let x 5 define foo lambda y bar x y define bar lambda a b a b a foo x 3 gt 45 A body containing internal definitions can always be converted into a completely equiva lent letrec expression For example the let expression in the above example is equivalent to 22 2 5 set variable expression MIT Scheme Reference let x 5 letrec foo lambda y bar x y bar lambda a b a b a foo x 3 Assignments special form If expression is specified evaluates expression and stores the resulting value in the location to which variable is bound If expression is omitted variable is altered to be unassigned a subsequent reference to such a variable is an error In either case the value of the set expression is unspecified Variable must be bound either in some region enclosing the set expression or at the top level However variable is permitted to be unassigned when the set form is entered define x 2 x 1 set x 4 x 1 gt uns
149. 50 MIT Scheme Reference Chapter 3 Equivalence Predicates 51 3 Equivalence Predicates A predicate is a procedure that always returns a boolean value t or 4f An equiva lence predicate is the computational analogue of a mathematical equivalence relation it is symmetric reflexive and transitive Of the equivalence predicates described in this sec tion eq is the finest or most discriminating and equal is the coarsest eqv is slightly less discriminating than eq eqv objl obj2 procedure The eqv procedure defines a useful equivalence relation on objects Briefly it returns t if objl and obj2 should normally be regarded as the same object The e eqv procedure returns stt if objl and obj2 are both t or both f objl and obj2 are both interned symbols and string symbol gt string objl symbol gt string obj2 gt dit objl and obj2 are both numbers are numerically equal according to the pro cedure and are either both exact or both inexact see Chapter 4 Numbers page 57 objl and obj2 are both characters and are the same character according to the char procedure see Chapter 5 Characters page 77 both objl and obj2 are the empty list objl and obj2 are procedures whose location tags are equal objl and obj2 are pairs vectors strings bit strings records cells or weak pairs that denote the same locations in the store eqv procedure returns sf if objl and obj2 are of different type
150. 7 wt tree dd iilii es reoni ede nels 159 wt tree add sesso sce ges 159 wt tree delete cisos leac ete 159 wt tree delete s esses sees 159 wt tree delete min eee eee 163 wt tree delete min 000000 163 wt tree difference s esses ss 160 wt tree empty s sese ere an 158 Wt tree fold ii i 4 ees Shoe Rede eb eden 161 wt tree for each sssssee esee 161 Wwt tree indeEx is ee d PEED PEDE ead 162 wt tree index datum esses ess 162 wt tree index pair 000000 162 wt tree intersection ss sess 160 Wb tree look picerabbR trini e PERF 159 wt tree member ssesee seen 159 WE tKES MIN soos ripi irea ee ie bee mede 163 wt tree min datum sees eee eee 163 Wb tree min palrv c ec ss eItee aw DER ees 163 wt tree rank ivocesEIRBPGW ET PESE 163 wt tree set equal 00 eee 161 wt tree size l o ecol go bRERORNMERG RS 158 Wt tree Split 412 025 0 9 6 Ed eis 159 wt tr e split 2 v epexcextene pere 160 wt tree subset asso sete na 160 wt tree uni n 2 212124 bees bebe rper 160 wt tree union merge sess 161 Wb tr e ois as sabe hex ub E bg ed 158 334 X x character bounds ascent 292 x character bounds descent 292 x character bounds lbearing 292 x character bounds rbearing 292
151. 7 3 Subprocess Options The following subprocess options may be passed to run shell command or run synchronous subprocess These options are passed as alternating keyword value pairs for example run shell command 1s output my output port output buffer size 8192 The example shows a shell command being run with two options specified output and output buffer size 250 MIT Scheme Reference input port subprocess option Specifies the standard input of the subprocess Port may be an input port in which case characters are read from port and fed to the subprocess until port reaches end of file Alternatively port may be f indicating that the subprocess has no standard input The default value of this option is f call with input file foo in lambda port run shell command cat gt dev null input port input line translation line ending subprocess option Specifies how line endings should be translated when writing characters to the subpro cess Ignored if the input option is f Line ending must be either a string specifying the line ending or the symbol default meaning to use the operating system s stan dard line ending In either case newline characters to be written to the input port are translated to the specified line ending before being written The default value of this option is default call with input file foo in lambda port run shell command cat gt dev null input port input line
152. 82 graphics device coordinate limits 282 graphics disable buffering 285 graphics drag cursof eg gc sa anes 284 graphics draw line 2 o s aed 283 graphics draw point 4 etn 283 graphics draw text i s e ases ene ee 283 graphics enable buffering 285 graphics erase point dc en 283 graphics fluSh i 4 scedmee RES ntm 286 graphics move cursor e esses 284 graphics operation 2 202 2299 v Rede 286 graphics reset clip rectangle 286 graphics set clip rectangle 286 graphics set coordinate limits 282 graphics set drawing mode 285 graphics set line style ees 285 graphics type available 281 guarantee i o port sese 180 guarantee input pOorft cod c 9 eed 180 guarantee output pOFt os cocci d ee eme 180 guarantee port 4 2 5 vend dee estem end 180 H handl s dawde pirak i uae a EA aye 306 hard link flle 239 f ek cee paws 232 hash iier peskve oe RERUM RERATUEENEE 151 194 Lhash table alist m ar etia wae y 146 hash table clean 00005 145 hash table clear 00005 145 hash table constructor 150 hash table count 0000 146 hash table datum list 146 hash table entries list 151 hash table entries vector 151 hash table entry
153. 83 195 char in alphabet 2 0 2 m I paseia 86 char intege r limit 4 ek R44 RI pee 81 Char lower Case lose e e PR re e ERE 83 char num ric 2 d terete Ease weeny 83 char ready ccc2s cc ued beta ec DER ERR 185 char ready on input port lesse 199 char Set 42 pass pr edd oe pede rare yn 83 210 char set alphabet sss eeessss 86 char set difference 0 00000 84 char set intersection esses 84 6har set invert cp da RR Ea es 84 char set member l eese lesen 83 char set members esses eese 83 char set unioh ise e be Paes RERO 84 char set alphabetic ienis RID 83 char set alphanumeriC esse 83 char set graphDa C is esses hea are ees dies 83 char set lower case sisse ess 83 char set n t grapliC ii ede Rer ee 83 char set not whitespace s s 83 char set mnumieric 29 ober e meus 83 chaf set standard s o oblee R Face dee tsers 83 char set pper case s os v aes weeds PERS 82 char set whitespace s eese 83 93 Char Set ii ede eeded DR ev Ra SSG ate 82 char standatrd ver HE ERR aes 79 83 char u pcase cvviDp ees Rab EE EE cn 79 char upper caset i25 DR aiaeei 83 char whitespace z isni eda eso be RR 83 nur lc A RR T9 81 GAT ye lor ssl bed edid tle S Sadat edt d e esta 79 322 Carrs neek niaaa E REPERI EE HER dd RES 79 Gharo oci na Soe dub area eR R
154. 891907 file time gt local decoded time file time procedure file time gt global decoded time file time procedure Converts an argument in file time format to decoded time format The result is in the local time zone or UTC respectively pp file time gt local decoded time file modification time decoded time 26 second 47 minute 31 hour 17 4 day 23 month 4 4 year 1999 day of week 4 daylight savings time 1 zone 5 pp file time gt global decoded time file modification time decoded time 27 second 47 minute 31 hour 21 4 day 23 month 4 4 year 1999 day of week 4 daylight savings time 0 zone 0 file time gt local time string file time procedure file time gt global time string file time procedure Converts an argument in file time format to a time string The result is in the local time zone or UTC respectively file time gt local time string file modification time Fri 23 Apr 1999 17 31 47 0400 file time gt global time string file modification time Fri 23 Apr 1999 21 31 47 0000 string gt universal time time string procedure Converts a time string argument to universal time format Chapter 15 Operating System Interface 245 string gt universal time Fri 23 Apr 1999 21 31 47 0000 3133888307 string gt universal time Fri 23 Apr 1999 17 31 47 0400 3133888307
155. Cover Texts Front Cover Texts on the front cover and Back Cover Texts on the back cover Both covers must also clearly and legibly identify you as the publisher of these copies The front cover must present the full title with all words of the title equally prominent and visible You may add other material on the covers in addition Copying with changes limited to the covers as long GNU Free Documentation License 315 as they preserve the title of the Document and satisfy these conditions can be treated as verbatim copying in other respects If the required texts for either cover are too voluminous to fit legibly you should put the first ones listed as many as fit reasonably on the actual cover and continue the rest onto adjacent pages If you publish or distribute Opaque copies of the Document numbering more than 100 you must either include a machine readable Transparent copy along with each Opaque copy or state in or with each Opaque copy a publicly accessible computer network location containing a complete Transparent copy of the Document free of added ma terial which the general network using public has access to download anonymously at no charge using public standard network protocols If you use the latter option you must take reasonably prudent steps when you begin distribution of Opaque copies in quantity to ensure that this Transparent copy will remain thus accessible at the stated location until at least one year after the l
156. Definitions This section provides examples and describes the options and syntax of define structure an MIT Scheme macro that is very similar to defstruct in Common Lisp The differences between them are summarized at the end of this section For more information see Steele s Common Lisp book define structure name structure option slot description special form Each slot description takes one of the following forms slot name slot name default init slot option value The fields name and slot name must both be symbols The field default init is an expression for the initial value of the slot It is evaluated each time a new instance is constructed If it is not specified the initial content of the slot is undefined Default values are only useful with a BOA constructor with argument list or a keyword constructor see below Evaluation of a define structure expression defines a structure descriptor and a set of procedures to manipulate instances of the structure These instances are repre sented as records by default see Section 10 4 Records page 132 but may alternately be lists or vectors The accessors and modifiers are marked with compiler declara tions so that calls to them are automatically transformed into appropriate references Often no options are required so a simple call to define structure looks like define structure foo a b c This defines a type descriptor foo a constructor make foo a predicate
157. E Ege 305 MIT Scheme Reference integer ChaT sci is i dcc ON ROG DRIN Ron t d 81 integer ceiling 2622 9 saddens ad ds 63 integer divide ii oo Res 64 71 integer divide quotient 64 71 integer divide remainder 64 71 integer floOf aids sade eR UE Eu ees 63 int ger round s iis dg ERRARE Here uS 63 integer truncate sic cya ee ge tiritiri aa 63 iIDt gerfolnosnacckntD ue bed ne da np Eanes e 60 interaction i o port 180 194 Intefnzconc euS ren dene e augue vd ines 129 inter n sOft 5 pes pL RM ENSE ess 129 internal time seconds gt ticks 247 internal time ticks gt seconds 246 interpreter environment 176 invoke restart 263 265 267 268 invoke restart interactively 263 267 268 K keep matching items 0 00 112 keep matching items eese sess 112 kernel32 dlE i i REESE PR 307 keyword constru Ctor c b be RERO 31 lambda 5 8 12 14 15 18 20 21 27 165 laSt palrz 2529283 RIPE eI 111 lCcm i leiweccacdeewiep pridie er pedes 64 length 4eeRie ua ye RE bU DE bo ds 58 110 let y p4fimkageu eU RE 7 l7 18 20 21 27 l tkuiasee 4k PRSE Taasi 7 17 20 21 27 Rett syntax sc e febeiie c pears sates 36 let syHtax eere pP RR Re Ree eae se 35 VStree doa 46 BRE ETE oad aug 1 18 20 21 27 letrec syntaxo co RAD HOrTeP I IRE E EPIIT 36 lank variabbes sccser fepe
158. EOREPE 131 10 4 Records unida Ld ege Pa redd pe ead eae 132 10 5 Promises i26 ginbeerscheee dot ane det eee EO Me eed 133 10 6 Streams en RE Pe etaed eee HET RR Rd 135 10 0 Weak Pa rehab nen de d 137 vi MIT Scheme Reference 11 iASSOCIdLlOLS csc iis bei sere deeeeckees xx 139 11 1 Association Lists 0 00 139 12 ID Wales oho dodo mede Sched Get I TS 141 11 3 The Association Table s esses 142 WA Hash Tables ouk eR pe ram RR Ta e tonc n ea 143 11 4 1 Construction of Hash Tables 143 11 4 2 Basic Hash Table Operations 145 11 4 3 Resizing of Hash Tables 146 11 4 4 Address Hashing 00 00 0c eee eee 149 11 4 5 Low Level Hash Table Operations 149 11 Object Hashine oes cree Rt n RR ton 151 11 6 Red Black Trees 0 0 153 11 7 Weight Balanced Trees siseeliese else 156 11 7 1 Construction of Weight Balanced Trees 157 11 7 2 Basic Operations on Weight Balanced Trees 158 11 7 8 Advanced Operations on Weight Balanced Trees Veiis e tegis dpa bua Odean ea a Reena a Adee eae 159 11 7 4 Indexing Operations on Weight Balanced Trees m 162 12 JPEOODQUFPOS sic de rue o ee CRT US racio 165 12 1 Procedure Operations 00 cece esee eee 165 12 2 Primitive Procedures 00000 c cece eee sees 166 123 COMUIMUATIONS s cod Dette ases a dana wa edhe ees 167 12 4 Application HOOKS x eee rto s de
159. MIT Scheme Reference Manual Edition 1 96 for Scheme Release 7 7 0 13 March 2002 by Chris Hanson the MIT Scheme Team and a cast of thousands Copyright 1988 2002 Massachusetts Institute of Technology Permission is granted to copy distribute and or modify this document under the terms of the GNU Free Documentation License Version 1 1 or any later version published by the Free Software Foundation with no Invariant Sections with no Front Cover Texts and with no Back Cover Texts A copy of the license is included in the section entitled GNU Free Documentation License Acknowledgements 1 Acknowledgements While a cast of thousands may be an overstatement it is certainly the case that this document represents the work of many people First and foremost thanks go to the authors of the Revised 4 Report on the Algorithmic Language Scheme from which much of this document is derived Thanks also to BBN Advanced Computers Inc for the use of parts of their Butterfly Scheme Reference and to Margaret O Connell for translating it from BBN s text formatting language to ours Special thanks to Richard Stallman Bob Chassell and Brian Fox all of the Free Software Foundation for creating and maintaining the Texinfo formatting language in which this document is written This report describes research done at the Artificial Intelligence Laboratory and the Laboratory for Computer Science both of the Massachusetts Institute of Technolog
160. R Pd 79 ChaT eisenai mea besdei exp er up uoce sontes 79 chars 2charsS8bo 22 s dias sean suena dis 83 chars remainingon input port 200 CIrOular l38t 222 0 999 when sak ee ave Liy Clear stereo ee EM I E EE 189 close all open files c cesigi gees 182 CLOSE INPUt POTb ye once snes bas dees deeds 181 elose output portt ocbese RR aretan 181 CIOSG DOELU eiie ees BOE es 181 CIoSe SyntaX cv entr E a Boal La 43 close tcp server socket s 254 code point utf8 string 85 code point in alphabet 86 code points gt alphabet lusus 85 COlOET 4 brew eic oper AEE beu 296 color on os2 graphics device 296 compiled procedure 9 n on 84 166 COMPLI oss bee wht eee toe Se Set ped Ead 60 compound procedure sees 166 felona eimo t i e cuoc px RUE teense ewe pem 32 COlld eb heo MS eREPRBPeP ER Te pe 5 24 27 127 condition accessOr sss 269 271 condition constru ctor l RE 269 condition predicate 269 270 condition signaller 269 270 condition type error s 272 condition type field names 212 condition type generalizations 272 condition type arithmetic error 278 condition type bad range argument 62 67 82 126 152 275 condition type breakpoint 258 280 condition type control error
161. R dos 220 xml notatuion idzi i bei nek ik ese gd Y 220 xml notation name 2 9 da ber 220 xml notation rtd 4 220 xml not tion 2221 22 2 024 9 rt rina 220 xml decl ration e 9 Rex tte hniena 218 xml declaration encoding 218 xml declaration rtd lusu 218 xml declaration standalone 218 xml declaration version 218 xml d claration 5 2 2 2 ded ee 25 anes 218 xml documernt iiis eesicagrusb be eR ER ayes 218 xml document declaration 218 xml document dtd 2 2 n pb sa 218 xml document misc 1 se eee 218 MIT Scheme Reference xml document misC 2 5 RR Rn 218 xml document misC 3 2 n RR e ep 218 xmi document roOt c I eee eber RI 218 xmli document rtd cicilelee3 decus 218 xml docum nt 22 0 uere REPE Yves 218 MIM dtd se wie esI REPRE NS Ee Res 219 xml dtd external i 26024 2 E REEG ner es 219 xmi dtd internal 22 md senes 219 xml dtd ro t cessi keeer rena Dees doko acd 219 xmli dtd rtd 2 1 e ll RE 219 zxml dtd e eemper 219 xm l element e ecce ebbe dons 218 xml element attributes 218 xml element contents esses 218 xml element name eicliesbessae 9 ve 218 xm l element rtd i0 I ges 218 xml element i ies hese niente r nE ad 218 xml externalb id le ez cues RERERIS 220 xml external id 1d 2 2 emer cR ER 220 xml extern
162. RESTART 2 gt Specify a procedure to use in its place RESTART 1 gt Return to read eval print level 1 condition type file error filename condition type This is an abstract type It indicates that an error associated with a file has occurred For example attempting to delete a nonexistent file will signal an error The filename field contains a filename or pathname associated with the operation that failed condition type file operation error filename verb noun condition type reason operator operands This is the most common condition type for file system errors The filename field contains the filename or pathname that was being operated on The verb field contains a string which is the verb or verb phrase describing the operation being performed and the noun field contains a string which is a noun or noun phrase describing the object being operated on The reason field contains a string describing the error that occurred The operator field contains the procedure performing the operation or a symbol naming that procedure and the operands field contains a list of the arguments that were passed to that procedure For example an attempt to delete a nonexistent file would have the following field values filename zu cph tmp no such file verb delete noun file reason no such file or directory operator file remove operands zu cph tmp no such file and would generate a message like this delete file zu
163. RSTUVWXYZ X d m uos abcdefghijklmnopqrstuvwxyz td char upper case char procedure char lower case char procedure char alphabetic char procedure char numeric char procedure char alphanumeric char procedure char whitespace char procedure char graphic char procedure char standard object procedure These predicates are defined in terms of the respective character sets defined above char set members char set procedure Returns a newly allocated list of the characters in char set char set member char set char procedure Returns stt if char is in char set otherwise returns f char set char procedure Returns a character set consisting of the specified 150 8859 1 characters With no arguments char set returns an empty character set chars gt char set chars procedure Returns a character set consisting of chars which must be a list of I50 8859 1 char acters This is equivalent to apply char set chars 84 MIT Scheme Reference string gt char set string procedure Returns a character set consisting of all the characters that occur in string ascii range gt char set lower upper procedure Lower and upper must be exact non negative integers representing ISO 8859 1 char acter codes and lower must be less than or equal to upper This procedure creates and returns a new character set consisting of the characters whose ISO 8859 1 codes are between lower inclusive and upper exclusive For historical reasons the name of
164. Restart Code 264 16 4 2 Invoking Standard Restart Code 265 16 4 3 Finding and Invoking General Restart Code 267 16 4 4 The Named Restart Abstraction 268 16 5 Condition Instances 0 0 00 es 268 16 5 1 Generating Operations on Conditions 269 16 5 2 Condition Abstraction 0 00005 270 16 5 3 Simple Operations on Condition Instances 211 16 6 Condition Types 0 cece eee ees 271 16 7 Condition Type Taxonomy sssse esses 272 vil vili MIT Scheme Reference lf OYraphite sc xcncat bere cdsduwendatss eee es 281 17 4 Opening and Closing of Graphics Devices 281 17 2 Coordinates for Graphics lsiuees cece eee mea 282 17 3 Drawing Graphies cud eee ed Re Rn nes 283 17 4 Characteristics of Graphics Output 284 17 5 Buffering of Graphics Output 000 285 17 6 Clipping of Graphics Output 0 0000s 286 17 7 Custom Graphics Operations 00000 0 0s 286 178 Images e pU dux d needs ea 287 179 X Graplhies4 iiie ind dave Madina dia ade 288 17 9 1 X Graphics Typ ses wrasuies aua aisa uaaa s 288 17 9 2 Utilities for X Graphics 289 17 9 3 Custom Operations on X Graphics Devices 290 17 10 WuiBd2 Graphics es ssanie na ieas bebe eee toads 292 17 10 1 Win32 Graphics Type 2004 292 17 10 2 Custom Operations for Win32 Grap
165. Returns t if object is a continuation otherwise returns f within continuation continuation thunk procedure Thunk must be a procedure of no arguments Conceptually within continuation invokes continuation on the result of invoking thunk but thunk is executed in the dynamic context of continuation In other words the cur rent continuation is abandoned before thunk is invoked dynamic wind before thunk after procedure Calls thunk without arguments returning the result s of this call Before and after are called also without arguments as required by the following rules note that in the absence of calls to continuations captured using call with current continuation the three arguments are called once each in order Before is called whenever execu tion enters the dynamic extent of the call to thunk and after is called whenever it exits that dynamic extent The dynamic extent of a procedure call is the period between when the call is initiated and when it returns In Scheme because of call with current continuation the dynamic extent of a call may not be a single connected time period It is defined as follows Chapter 12 Procedures 169 e The dynamic extent is entered when execution of the body of the called procedure begins e The dynamic extent is also entered when execution is not within the dynamic ex tent and a continuation is invoked that was captured using call with current continuation during the dynamic extent
166. The integer zero represents a set of modes in which none of these bits are set file modification time filename procedure Returns the modification time of filename as an exact non negative integer The result may be compared to other file times using ordinary integer arithmetic If filename names a file that does not exist file modification time returns f In operating systems that support symbolic links if filename names a symbolic link file modification time returns the modification time of the file linked to An alternate procedure file modification time direct returns the modification time of the link itself in all other respects it is identical to file modification time For symmetry file modification time indirect is a synonym of file modification time file access time filename procedure Returns the access time of filename as an exact non negative integer The result may be compared to other file times using ordinary integer arithmetic If filename names a file that does not exist file access time returns f In operating systems that support symbolic links if filename names a symbolic link file access time returns the access time of the file linked to An alternate pro cedure file access time direct returns the access time of the link itself in all other respects it is identical to file access time For symmetry file access time indirect is a synonym of file access time set file times filename access time modificatio
167. Xlib call start index is the index of the first character available in the font The min bounds and max bounds components are structures of type x character bounds and the character bounds component is a vector of the same type x character bounds lbearing character bounds procedure x character bounds rbearing character bounds procedure x character bounds width character bounds procedure x character bounds ascent character bounds procedure x character bounds descent character bounds procedure These procedures extract components of objects of type x character bounds A more complete description of them appears in documentation of the XLoadQueryFont Xlib call 17 10 Win32 Graphics MIT Scheme supports graphics on Microsoft Windows 95 Windows 98 and Windows NT In addition to the usual operations there are operations to control the size position and colors of a graphics window Win32 devices support images which are implemented as device independent bitmaps DIBs The Win32 graphics device type is implemented as a top level window graphics enable buffering is implemented and gives a 2x to 4x speedup on many graphics op erations As a convenience when buffering is enabled clicking on the graphics window s title bar effects a graphics flush operation The user has the benefit of the increased performance and the ability to view the progress in drawing at the click of a mouse button 17 10 1 Win32 Graphics Type Win32 graphics devices
168. a The form creates a Scheme procedure that calls the C procedure identified by the exported entry point entry name in the module identified by the value of module Both entry name and module are evaluated at procedure creation time so either may be expression Entry name must evaluate to a string and module must evaluate to a module as returned by find module These are the only parts of the form that are evaluated at procedure creation time Name is the name of the procedure and is for documentation purposes only This form does not define a procedure called name It is more like lambda The name might be used for debugging and pretty printing A windows procedure has a fixed number of parameters i e no rest parameters or varargs each of which is named and associated with a windows type type Both the name parameter and the windows type type must be symbols and are not evaluated The procedure returns a value of the windows type return type 308 MIT Scheme Reference The following example creates a procedure that takes a window handle hwnd and a string and returns a boolean bool result The procedure does this by calling the SetWindowText entry in the module that is the value of the variable user32 d11 The variable set window title is defined to have this procedure as it s value define set window title windows procedure set window text window hwnd text string bool user32 dll SetWindowText set window
169. a vector of strings or f indicating the default environment If it is a vector of strings each string must be a name value pair where the name and value are separated by an equal sign for example foo bar To define a variable with no value just omit the value as in foo Note that the variable scheme subprocess environment is bound to the default subprocess environment The default value of this option is f 252 MIT Scheme Reference run shell command ls la etc gt environment let v scheme subprocess environment n vector length v v vector grow v n 1 vector set v n TERM none v working directory pathname subprocess option Specifies the working directory in which the subprocess will run The default value of this option is working directory pathname run shell command 1s la working directory etc use pty boolean subprocess option This option is meaningful only on unix systems on other systems it is ignored Spec ifies whether to communicate with the subprocess using PTY devices if true PTYs will be used otherwise pipes will be used The default value of this option is f run shell command ls la etc use pty t shell file name pathname subprocess option Specifies the shell program to use for run shell command The default value of this option is os shell file name This is the value of the environment variable SHELL or if SHELL is not set the value is operating syst
170. ackslash as escape character in string 87 Backtracking in parser language 207 balanced binary trees 153 156 bell ringing on console 04 189 binary file DOFisa 4 ph dsuses vance heeea bes 181 binary ifees d er ener riia eager 153 156 binary trees as discrete maps 157 binary trees as sets sees 157 binding expression defn 0 004 7 binding expression dynamic or fluid 18 binding expression lexical suee lii binding of variable 00 00040 6 binding syntactic keyword 173 binding unassigned 05 173 binding variable 22 lee RR PER bids 173 bit stng dein ss oo cance acneen OI A Eben 123 bit string index defn uuuuuuue 123 bit string length defn Lsuueue 123 joint HET 294 bitmaps graphics 0 00 e eee 287 bitwise logical operations on fixnums 72 block structured e eg oor re Perte bop dae 17 blocking mode of port 0 0005 202 BOA constr ctor cce hehe ph nse Ea 29 BOA constructor defn 000000 31 body of special form defn iuuuue 5 boolean object sad terere ERR 8 boolean object defn 0 0 127 boolean object equivalence predicate 127 bound variable defn 000 00005 6 bound restarts sees cess ee eee 269 271
171. actic environment of the expression being transformed as else denotes in the syntactic environment in which the cond macro was defined If else were not renamed before being passed to the comparison predicate then it would match a local variable that happened to be named else and the macro would not be hygienic Some macros are non hygienic by design For example the following defines a loop macro that implicitly binds exit to an escape procedure The binding of exit is intended to capture free references to exit in the body of the loop so exit is not renamed define syntax loop er macro transformer lambda x r c let body cdr x r call with current continuation r lambda exit GG let r O body G r Suppose a while macro is implemented using loop with the intent that exit may be used to escape from the while loop The while macro cannot be written as define syntax while syntax rules hile test body loop if not test exit f body because the reference to exit that is inserted by the while macro is intended to be captured by the binding of exit that will be inserted by the 1oop macro In other words this while macro is not hygienic Like loop it must be written using the er macro transformer syntax define syntax while er macro transformer lambda x r c let test cadr x body cddr x C x 1oop Cr if C r not test exit f body
172. aerer ta ED Epa 286 graphics coordinate systems 282 graphics cursor defn 0 00 283 graphics custom operations 286 graphics device coordinates defn 282 graphics drawing sseeleeeeeeeees 283 graphics drawing arcs and circles 290 graphics drawing mode defn 284 graphics elhpse i e solere etes 294 graphics amages se seeesi A eee te ERDUCS 287 graphics line style defn 284 graphics opening and closing devices 281 graphics output characteristics 284 graphics virtual coordinates defn 282 greatest common divisor of numbers 64 339 TOWING Of VectoP i 2 ese ep Rp ee 120 H handler condition defn 261 hard linking of file 34 sic sra eme 232 hash table necem er hr Rm Retos 143 hashing of key in hash table 144 hashing of object esee ees 151 hashing of String ipee ERRARE esses wee 90 hashing of symbol 0 131 home directory as pathname 229 hook application defn 0000 165 host in filename 3260620 02ne0 RR rs 221 host pathname component 223 hostname DGDP usos eur add toten reda 252 BY PIONIC si eG ee deena va dled he na DS 35 hyper bucky bit prefix defn 77 I LO to file8 ree RREDERP ERU ron ris 181 T O
173. ah string gt list string procedure substring gt list string start end procedure string gt list returns a newly allocated list of the character elements of string substring gt list returns a newly allocated list of the character elements of the given substring The inverse of string gt list is list gt string string gt list abcd gt a b c d substring gt list abcdef 1 3 gt b c 7 3 Selecting List Components list object procedure Returns stt if object is a list otherwise returns f By definition all lists have finite length and are terminated by the empty list This procedure returns an answer even for circular structures Any object satisfying this predicate will also satisfy exactly one of pair or null list a b c gt dtt list O gt t list a b gt df let x list a set cdr x x list x f 110 MIT Scheme Reference length list procedure Returns the length of list Signals an error if list isn t a proper list length a b c gt 3 length a b c d e T od length gt 0 null object procedure Returns t if object is the empty list otherwise returns f but see Section 1 2 5 True and False page 8 null a b gt f null a b c gt df null 0 gt dt list ref list k procedure Returns the kth element of list using zero origin indexing The valid indexes of a list are the exact non negative inte
174. ails si dur ORE EURO UE wd heme 107 cddadr 125545 ede ur bars eae d dd bs E 107 COGS iss 202 dnd sud ardor deli dope RUP aed 107 CdddaE 1225 ood se secs ha wild uae e nb DR ro Qu dir nated 107 cddddE i dues b ale duce o ER ul otn Gea eave 107 CdddEs iiu daba ak FAL eid RH HERO hd d CE TR d 107 COAT 42 dco aub Eau i ERR Ghd dna rd a ACE 107 321 COE ace uode bee tubes ie RUE Od uice ad 6 106 136 ceiling i eed bp4rEW RR Yd OP GRE IIR 65 celling 6XaCt enter skii ieena eiaa AS 65 cell contents orree c9 3 yk nse Eas 131 Cell cosa osx E Exp RP EN eA aa tends 191 CHAR Ss enda E Kex ES E LER 210 305 Chal c E 306 Ch E 88611 4 4 ee eR ee adogoe 81 82 char 2dilgit L c4 uPWe tX eps REPTS Oe 79 Char sinteger ts i tbeederoicetiGduniaabies ds 81 Char name 2 sees di aedeeier ete E Role eats 78 char alphab6tie v2 4 jc 0 9 RE bL Eg 83 char alphanumeric ii 12229 ave kee eee 83 char ascii eie py Abe epe den 81 82 87 Char bits icbesseeskeReg d re t ee PR don oe 80 char bits limit 2 B d aco mg eg 81 Char 6iicessswekbre rane Re a pua dba e 210 ghar Giss T nod zeziteR aqucmpe e PERPE RE 79 ehar cis ique ERR ESSE sedans T9 Ghar 6i T7 22 ascen aid UR aL OR Po e es 79 hat Cis Se i sie sisi e haus ydteig cine edad erue 79 Char od 02 425 90459 Dauid Ace dd tee 79 char 60d6 v a tess Ae dock um RESET 81 char code limidt 2 4 a n b era eda 81 Char downcase v lp usua ERA E ena 79 char graphiC 2 94 ssa P a he
175. al id rtd ce eee x iR ales 220 xml external id uri 2 n es 220 xml external 1d 2 9 eee ed 220 xm l intern i2 anuria ber hid 217 xml parameter entity ei i bans RI das 220 xml parameter lentity name 220 xml parameter lentity rtd 220 xml parameter lentity value 220 xml parameter lentity s 220 xml processing instructions 219 xml processing instructions name 219 xml processing instructions rtd 219 xml processing instructions text 219 xml processing instructions 219 xmi uninterpreted e mi ebep E D 219 xml uninterpreted rtd 2 pace 0 das 219 xml uninterpreted text s 219 xml unduinterpreted 4 9 exse 219 xml unparsed lentity o 4 t rg 220 xml unparsed l entity id espies scirpus 220 xml unparsed entity name 220 xml unparsed entity notation 220 xml unparsed lentity rtd 220 xml unparsed lentity so asamt 220 Concept Index Concept Index in mutation procedure names 11 as external representation 0 8T as format parameter eese 192 in external representation of number 60 as external representation 119 as external representation 123 as external representation 194 as external repres
176. al pointer is unchanged For example here is a matcher procedure that matches the character a lambda b match parser buffer char b a Here is another example that matches two given characters cl and c2 in sequence lambda b let p get parser buffer pointer b if match parser buffer char b c1 if match parser buffer char b c2 itt begin set parser buffer pointer b p f 8 This is code is clear but has lots of details that get in the way of understanding what it is doing Here is the same example in the matcher language matcher seq char cl char c2 This is much simpler and more intuitive And it generates virtually the same code pp matcher seq char c1 char c2 lambda b1 4 let p1 get parser buffer pointer b1 4 and match parser buffer char b1 c1 4 if match parser buffer char b1 c2 4 t begin 4 set parser buffer pointer amp b1 p1 4 8 210 MIT Scheme Reference Now that we have seen an example of the language it s time to look at the detail The matcher special form is the interface between the matcher language and Scheme matcher mexp special form The operand mexp is an expression in the matcher language The matcher expres sion expands into Scheme code that implements a matcher procedure Here are the predefined matcher expressions New matcher expressions can be defined using the macro facility see Sect
177. al time zone pp local decoded time decoded time 76 second 2 minute 12 hour 11 4 day 27 month 4 4 year 1999 day of week 1 daylight savings time 1 zone 5 240 MIT Scheme Reference global decoded time procedure Return the current time in decoded format The decoded time is represented in UTC pp global decoded time decoded time 77 second 8 minute 12 hour 15 4 day 27 month 4 4 year 1999 day of week 1 daylight savings time 0 zone 0 make decoded time second minute hour day month year zone procedure Return a new decoded time object representing the given time The arguments must be valid components according to the above rules and must form a valid date If zone is not supplied or is f the resulting decoded time will be represented in the local time zone Otherwise zone must be a valid time zone and the result will be represented in that zone Warning because this procedure depends on the operating system s runtime library it is not capable of representing all dates In particular on most unix systems it is not possible to encode dates that occur prior to midnight January 1 1970 UTC Attempting to do this will signal an error pp make decoded time 0 9 11 26 3 1999 decoded time 19 second 0 minute 9 hour 11 4 day 26 month 3 4 year 1999 day of week 4 daylight s
178. all the copyright notices of the Document E Add an appropriate copyright notice for your modifications adjacent to the other copyright notices F Include immediately after the copyright notices a license notice giving the public permission to use the Modified Version under the terms of this License in the form shown in the Addendum below G Preserve in that license notice the full lists of Invariant Sections and required Cover Texts given in the Document s license notice H Include an unaltered copy of this License 316 5 MIT Scheme Reference I Preserve the section entitled History and its title and add to it an item stating at least the title year new authors and publisher of the Modified Version as given on the Title Page If there is no section entitled History in the Document create one stating the title year authors and publisher of the Document as given on its Title Page then add an item describing the Modified Version as stated in the previous sentence J Preserve the network location if any given in the Document for public access to a Transparent copy of the Document and likewise the network locations given in the Document for previous versions it was based on These may be placed in the History section You may omit a network location for a work that was published at least four years before the Document itself or if the original publisher of the version it refers to gives permission
179. alphabet abstraction provides an efficient implementation of sets of Unicode code points alphabet object procedure Returns stt if object is a Unicode alphabet otherwise returns amp f code points gt alphabet items procedure Returns a Unicode alphabet containing the code points described by items Items must satisfy well formed code points list alphabet gt code points alphabet procedure Returns a well formed code points list that describes the code points represented by alphabet well formed code points list object procedure Returns t if object is a well formed code points list otherwise returns f A well formed code points list is a proper list each element of which is either a code point or a pair of code points A pair of code points represents a contiguous range of code points The CAR of the pair is the lower limit and the CDR is the upper limit Both limits are inclusive and the lower limit must be strictly less than the upper limit 86 MIT Scheme Reference code point in alphabet code point alphabet procedure Returns t if code point is a member of alphabet otherwise returns sf char in alphabet char alphabet procedure Returns t if char is a member of alphabet otherwise returns 4f Equivalent to code point in alphabet char code char alphabet Character sets and alphabets can be converted to one another provided that the alphabet contains only 8 bit code points This is true because 8 bit code points in U
180. als implementations are free either to detect or to fail to detect that two procedures or two literals are equivalent to each other and can decide whether or not to merge representations of equivalent objects by using the same pointer or bit pattern to represent both 54 eq objl obj2 MIT Scheme Reference procedure eq is similar to eqv except that in some cases it is capable of discerning distinctions finer than those detectable by eqv eq and eqv are guaranteed to have the same behavior on symbols booleans the empty list pairs records and non empty strings and vectors eq s behavior on numbers and characters is implementation dependent but it will always return either true or false and will return true only when eqv would also return true eq may also behave differently from eqv on empty vectors and empty strings eq eq eq eq eq eq eq eq eq let u a a a list a list a Wan may m my O00 2 2 A A car car Ga 2 3 eq n n let Cx 222 eq x x let C O02 eq x x let Cp lambda x x eq p p Rationale It will usually be possible to implement eq much more efficiently than eqv for example as a simple pointer comparison instead of as some more compli cated operation One reason is that it may not be possible to compute eqv of two numbers in constant time whereas eq implemented as pointer
181. alue That is expressions like the following may evaluate to either t or f depending on the implementation eqv delay 1 1 unspecified pair delay cons 1 2 unspecified e Some implementations will implement implicit forcing where the value of a promise is forced by primitive procedures like car and delay 3 7 13 gt 34 10 6 Streams In addition to promises MIT Scheme supports a higher level abstraction called streams Streams are similar to lists except that the tail of a stream is not computed until it is referred to This allows streams to be used to represent infinitely long lists stream object procedure Returns a newly allocated stream whose elements are the arguments Note that the expression stream returns the empty stream or end of stream marker list gt stream list procedure Returns a newly allocated stream whose elements are the elements of list Equivalent to apply stream list stream gt list stream procedure Returns a newly allocated list whose elements are the elements of stream If stream has infinite length this procedure will not terminate This could have been defined by 136 MIT Scheme Reference define stream gt list stream if stream null stream O0 cons stream car stream stream gt list stream cdr stream cons stream object expression special form Returns a newly allocated stream pair Equivalent to cons object delay expres sion stream
182. alue returned is the exact number that is numerically closest to the argument If an inexact argument has no reasonably close exact equivalent then a violation of an implementation restriction may be reported in MIT Scheme this case does not occur because all inexact numbers are representable as exact numbers These procedures implement the natural one to one correspondence between exact and inexact integers throughout an implementation dependent range See Section 4 3 Implementation restrictions page 58 68 MIT Scheme Reference 4 6 Numerical input and output number gt string number radix procedure Radix must be an exact integer either 2 8 10 or 16 If omitted radix defaults to 10 The procedure number gt string takes a number and a radix and returns as a string an external representation of the given number in the given radix such that let Qumber number radix radix eqv number string gt number number gt string number radix radix is true It is an error if no possible result makes this expression true If number is inexact the radix is 10 and the above expression can be satisfied by a result that contains a decimal point then the result contains a decimal point and is expressed using the minimum number of digits exclusive of exponent and trailing zeroes needed to make the above expression true otherwise the format of the result is unspecified The result returned by number gt string never contains a
183. ames are schemeGraphics and SchemeGraphics respectively The window is initialized using the resource and class names specified by suppress map and is sensitive to the following resource properties Chapter 17 Graphics 289 Property Class Default geometry Geometry 512x384 0 0 font Font fixed borderWidth BorderWidth 2 internalBorder BorderWidth border width background Background white foreground Foreground black borderColor BorderColor foreground color cursorColor Foreground foreground color pointerColor Foreground foreground color The window is created with a backing_store attribute of Always The window s name and icon name are initialized to scheme graphics 17 9 2 Utilities for X Graphics x graphics open display display name procedure Opens a connection to the display whose name is display name returning a display object If unable to open a connection f is returned Display name is normally a string which is an X display name in the usual form however f is also allowed meaning to use the value of the unix environment variable DISPLAY x graphics close display display procedure Closes display after calling this procedure it is an error to use display for any purpose Any windows that were previously opened on display are destroyed and their resources returned to the operating system x close all displays procedure Closes all open connections to X displays Equivalent to calling x close display on a
184. ar is used to determine if weak car would return a valid value An obvious way of doing this would be if weak pair car x weak car x However since a garbage collection could occur between the call to weak pair car and weak car this would not always work correctly Instead the following should be used which always works or weak car x and not weak pair car x 2333 The reason that the latter expression works is that weak car returns f in just two instances when the car component is f and when the car component has been garbage collected In the former case if a garbage collection happens between the two calls it won t matter because f will never be garbage collected And in the latter case it also won t matter because the car component no longer exists and cannot be affected by the garbage collector 138 MIT Scheme Reference weak set car weak pair object procedure Sets the car component of weak pair to object and returns an unspecified result weak cdr weak pair procedure Returns the cdr component of weak cdr weak set cdr weak pair object procedure Sets the cdr component of weak pair to object and returns an unspecified result Chapter 11 Associations 139 11 Associations MIT Scheme provides several mechanisms for associating objects with one another Each of these mechanisms creates a link between one or more objects called keys and some other object called a datum Beyond this common idea how
185. ar procedure match parser buffer char ci no advance buffer char procedure match parser buffer not char no advance buffer char procedure match parser buffer not char ci no advance buffer char procedure Each of these procedures compares a single character in buffer to char The ba sic comparison match parser buffer char compares the character to char using char The procedures whose names contain the ci modifier do case insensitive comparison i e they use char ci The procedures whose names contain the not modifier are successful if the character doesn t match char match parser buffer char in set buffer char set procedure match parser buffer char in set no advance buffer char set procedure These procedures compare the next character in buffer against char set using char set member match parser buffer string buffer string procedure match parser buffer string ci buffer string procedure match parser buffer string no advance buffer string procedure match parser buffer string ci no advance buffer string procedure 6 These procedures match string against buffer s contents The ci procedures do case insensitive matching Chapter 14 Input Output 207 match parser buffer substring buffer string start end procedure match parser buffer substring ci buffer string start end procedure match parser buffer substring no advance buffer string start procedure end match parser buffer substring ci no advance buffer string
186. are created by specifying the symbol win32 as the graphics device type argument to make graphics device The Win32 graphics device type is im Chapter 17 Graphics 293 plemented as a top level window and supports color drawing in addition to the standard Scheme graphics operations Graphics devices are opened as follows make graphics device win32 optional width height palette where width and height specify the size in pixels of the drawing area in the graphics window i e excluding the frame Palette determines the colors available for drawing in the window When a color is specified for drawing the nearest color available in the palette is used Permitted values for palette are gt grayscale The window allocates colors from a grayscale palette of approximately 236 shades of gray gt grayscale 128 The window allocates colors from a grayscale palette of 128 shades of gray gt standard The standard palette has good selection of colors and grays 4f or system The colors available are those in the system palette There are usually 16 to 20 colors in the system palette and these are usually sufficent for simple applications like line drawings and x vs y graphs of mathematical functions Drawing with the system palette can be more efficient If palette is not specified then the standard palette is used 17 10 2 Custom Operations for Win32 Graphics Custom operations are invoked using the procedure graphics operatio
187. are taken directly from the arguments to error message contains an object usually a string and irritants contains a list of objects The reporter for this type uses format error message to generate its output from message and irritants condition type illegal datum datum condition type This is an abstract type This type indicates the class of errors in which a program discovers an object that lacks specific required properties Most commonly the object 274 MIT Scheme Reference is of the wrong type or is outside a specific range The datum field contains the offending object condition type wrong type datum datum type condition type This type indicates the class of errors in which a program discovers an object that is of the wrong type The type field contains a string describing the type that was expected and the datum field contains the object that is of the wrong type error wrong type datum 3 4 integer error The object 3 4 is not an integer To continue call RESTART with an option number RESTART 1 gt Return to read eval print level 1 error wrong type datum datum type procedure This procedure signals a condition of type condition type wrong type datum The datum and type fields of the condition are filled in from the corresponding arguments to the procedure condition type wrong type argument datum type operator condition type operand This type indicates that a procedure was passed an argument of the
188. argument a port or a string By convention the description generated by reporter should be a short complete sentence with first word capitalized and terminated by a period The sentence should fit on one line with a little room to spare see the examples below usually this means that the sentence should be 70 characters or less in length If the restart created by with simple restart is invoked it simply aborts the com putation in progress by returning an unspecified value from the call to with simple restart Otherwise with simple restart returns the value computed by thunk with simple restart george This restart is named george lambda 3 3 with simple restart george This restart is named george lambda invoke restart find restart george unspecific with simple restart george This restart is named george lambda car 3 The object 3 passed as the first argument to car is not the correct type To continue call RESTART with an option number RESTART 3 gt Specify an argument to use in its place RESTART 2 gt This restart is named george RESTART 1 gt Return to read eval print level 1 Chapter 16 Error System 265 with restart name reporter effector interactor thunk procedure Invokes thunk in a dynamic environment created by adding a restart named name to the existing named restarts Reporter may be used during the execution of thunk to produce a descrip
189. arit ke ede ds a 105 107 set cell contents i csemed22ie5R n9 REA 131 set current input port 2 sse 181 set current output port ss 181 set current parser macrosS 216 set entity extral 26 0 wr BER 171 set entity procedure ess 171 Set file nodes e le minik nEn Geri 235 Set file times 2 PIRE ERRARE 236 set fonton os2 graphics device 301 set fonton win32 graphics device 295 set fonton x graphics device 291 set foreground color 2 es 293 296 set foreground coloron os2 graphics device Semen raagis p s oe TR a dchus ah os Pa ER 296 set foreground coloron win32 graphics device Ru Ra daturos Pete E a poe colit 293 set foreground coloron x graphics device 290 set hash table rehash size 148 set hash table rehash threshold 149 set input buffer sizeon input port 200 set interaction i o port 181 set internal border widthon x graphics device E E a a AEA 291 set line widthon win32 graphics device 295 set mouse coloron x graphics device 290 set mouse shapeon x graphics device 291 set notification output port 181 set output buffer sizeon output port 201 set parser buffer pointer 205 Set port state clc okess rr be ERE T ERIS 198 set record type unparser method 31 193 Sset String Lengtn one 2 ugs reds 103
190. ary to open a port to the file This section describes procedures used to open ports to files Such ports are closed like any other port by close port File ports are automatically closed if and when they are reclaimed by the garbage collector Before opening a file for input or output by whatever method the filename argument is converted to canonical form by calling the procedure merge pathnames with filename as its sole argument Thus filename can be either a string or a pathname and it is merged with the current pathname defaults to produce the pathname that is then opened 182 MIT Scheme Reference Any file can be opened in one of two modes normal or binary Normal mode is for accessing text files and binary mode is for accessing other files Unix does not distinguish these modes but Windows and OS 2 do in normal mode their file ports perform newline translation mapping between the carriage return linefeed sequence that terminates text lines in files and the newline that terminates lines in Scheme In binary mode such ports do not perform newline translation Unless otherwise mentioned the procedures in this section open files in normal mode open input file filename procedure Takes a filename referring to an existing file and returns an input port capable of delivering characters from the file If the file cannot be opened an error of type condition type file operation error is signalled open output file filename append
191. ash symbol procedure Returns a hash number for symbol which is computed by calling string hash on symbol s name The hash number is an exact non negative integer symbol hash mod symbol modulus procedure Modulus must be an exact positive integer Equivalent to modulo symbol hash symbol modulus This procedure is provided for convenience in constructing hash tables However it is normally preferable to use make eq hash table to build hash tables keyed by symbols because eq hash tables are much faster symbol symboll symbol2 procedure This procedure computes a total order on symbols It is equivalent to string symbol gt string symboll symbol gt string symbol2 10 3 Cells Cells are data structures similar to pairs except that they have only one element l hey are useful for managing state cell object procedure Returns stt if object is a cell otherwise returns f make cell object procedure Returns a newly allocated cell whose contents is object cell contents cell procedure Returns the current contents of cell set cell contents cell object procedure Alters the contents of cell to be object Returns an unspecified value bind cell contents cell object thunk procedure Alters the contents of cell to be object calls thunk with no arguments then re stores the original contents of cell and returns the value returned by thunk This is completely equivalent to dynamic binding of a variable including the be
192. ash table If there is no association for key default is returned The average time required by this operation is bounded by a constant hash table remove hash table key procedure If hash table has an association for key removes it Returns an unspecified result The average time required by this operation is bounded by a constant hash table clear hash table procedure Removes all associations in hash table and returns an unspecified result The average and worst case times required by this operation are bounded by a constant 146 MIT Scheme Reference hash table count hash table procedure Returns the number of associations in hash table as an exact non negative integer If hash table holds its keys weakly this is a conservative upper bound that may count some associations whose keys have recently been reclaimed by the garbage collector The average and worst case times required by this operation are bounded by a constant hash table gt alist hash table procedure Returns the contents of hash table as a newly allocated alist Each element of the alist is a pair key datum where key is one of the keys of hash table and datum is its associated datum The average and worst case times required by this operation are linear in the number of associations in the table hash table key list hash table procedure Returns a newly allocated list of the keys in hash table The average and worst case times required by this operation are linear in t
193. ast time you distribute an Opaque copy directly or through your agents or retailers of that edition to the public It is requested but not required that you contact the authors of the Document well before redistributing any large number of copies to give them a chance to provide you with an updated version of the Document 4 MODIFICATIONS You may copy and distribute a Modified Version of the Document under the conditions of sections 2 and 3 above provided that you release the Modified Version under precisely this License with the Modified Version filling the role of the Document thus licensing distribution and modification of the Modified Version to whoever possesses a copy of it In addition you must do these things in the Modified Version A Use in the Title Page and on the covers if any a title distinct from that of the Document and from those of previous versions which should if there were any be listed in the History section of the Document You may use the same title as a previous version if the original publisher of that version gives permission B List on the Title Page as authors one or more persons or entities responsible for authorship of the modifications in the Modified Version together with at least five of the principal authors of the Document all of its principal authors if it has less than five C State on the Title page the name of the publisher of the Modified Version as the publisher D Preserve
194. ate and this License does not apply to the other self contained works thus compiled with the Document on account of their being thus compiled if they are not themselves derivative works of the Document If the Cover Text requirement of section 3 is applicable to these copies of the Document then if the Document is less than one quarter of the entire aggregate the Document s Cover Texts may be placed on covers that surround only the Document within the aggregate Otherwise they must appear on covers around the whole aggregate 8 TRANSLATION Iranslation is considered a kind of modification so you may distribute translations of the Document under the terms of section 4 Replacing Invariant Sections with translations requires special permission from their copyright holders but you may 318 MIT Scheme Reference include translations of some or all Invariant Sections in addition to the original versions of these Invariant Sections You may include a translation of this License provided that you also include the original English version of this License In case of a disagreement between the translation and the original English version of this License the original English version will prevail 9 TERMINATION You may not copy modify sublicense or distribute the Document except as expressly provided for under this License Any other attempt to copy modify sublicense or distribute the Document is void and will automatically terminate y
195. ated and its value is returned If predicate yields a false value and no alternative is specified then the result of the expression is unspecified An if expression evaluates either consequent or alternative never both Programs should not depend on the value of an if expression that has no alternative if gt 3 2 yes no gt yes if gt 2 3 yes no gt no Cif gt 3 2 3 2 3 2 gt 1 cond clause clause special form Each clause has this form Chapter 2 Special Forms 25 predicate expression where predicate is any expression The last clause may be an else clause which has the form else expression expression A cond expression does the following 1 Evaluates the predicate expressions of successive clauses in order until one of the predicates evaluates to a true value 2 When a predicate evaluates to a true value cond evaluates the expressions in the associated clause in left to right order and returns the result of evaluating the last expression in the clause as the result of the entire cond expression If the selected clause contains only the predicate and no expressions cond returns the value of the predicate as the result 3 If all predicates evaluate to false values and there is no else clause the result of the conditional expression is unspecified if there is an else clause cond evaluates its expressions left to right and returns the value of the last one con
196. athname that locates the same file or directory as pathname but is in some sense simpler Note that pathname simplify might not always be able to simplify the This introduction is adapted from Common Lisp The Language second edition section 23 1 Chapter 15 Operating System Interface 223 pathname e g on unix with symbolic links the directory usr morris need not be the same as usr In cases of uncertainty the behavior is conservative returning the original or a partly simplified pathname pathname simplify usr morris morris dance pathname usr morris dance 15 1 2 Components of Pathnames A pathname object always has six components described below These components are the common interface that allows programs to work the same way with different file systems the mapping of the pathname components into the concepts peculiar to each file system is taken care of by the Scheme implementation host The name of the file system on which the file resides In the current implemen tation this component is always a host object that is filled in automatically by the runtime system When specifying the host component use either f or the value of the variable local host device Corresponds to the device or file structure concept in many host file sys tems the name of a logical or physical device containing files This component is the drive letter for PC file systems and is unused for unix
197. ations signal a condition of type condition type bad range argument if index 0 or if index is greater than or equal to the number of associations in the tree If the tree is empty they signal an anonymous error Indexing can be used to find the median and maximum keys in the tree as follows Chapter 11 Associations 163 median wt tree index wt tree quotient wt tree size wt tree 2 maximum wt tree index wt tree wt tree size wt tree 1 wt tree rank wt tree key procedure Determines the 0 based position of key in the sorted sequence of the keys under the tree s ordering relation or f if the tree has no association with for key This procedure returns either an exact non negative integer or f The average and worst case times required by this operation are proportional to the logarithm of the number of associations in the tree wt tree min wt tree procedure wt tree min datum wt tree procedure wt tree min pair wt tree procedure Returns the association of wt tree that has the least key under the tree s ordering relation wt tree min returns the least key wt tree min datum returns the da tum associated with the least key and wt tree min pair returns a new pair key datum which is the cons of the minimum key and its datum The average and worst case times required by this operation are proportional to the logarithm of the number of associations in the tree These operations signal an error if the tree is empty They co
198. avings time 0 zone 5 pp make decoded time 0 9 11 26 3 1999 3 decoded time 80 second 0 minute 9 hour 11 4 day 26 month 3 4 year 1999 day of week 4 daylight savings time 0 4 zone 3 ain Chapter 15 Operating System Interface 241 decoded time second decoded time procedure decoded time minute decoded time procedure decoded time hour decoded time procedure decoded time day decoded time procedure decoded time month decoded time procedure decoded time year decoded time procedure Return the corresponding component of decoded time decoded time second local decoded time 17 decoded time year local decoded time 1999 decoded time day local decoded time 26 decoded time day of week decoded time procedure Return the day of the week on which decoded time falls encoded as an exact integer between 0 Monday and 6 Sunday inclusive decoded time day of week local decoded time 4 decoded time daylight savings time decoded time procedure Return t if decoded time is represented using daylight savings time Otherwise return f decoded time daylight savings time local decoded time df decoded time zone decoded time procedure Return the time zone in which decoded time is represented This is an exact rational number between 24 and 24 inclusive that when multiplied by 3600 is an integer The value is the number of hours west of UTC decoded time z
199. axo sueco seg 3E Ren 99 rexp syntax cha b olilzex c Pieter 100 rexp word cha r liclezsgwe ges EE 99 r xp word edge cil2 RELY b e ee 99 rexp word Gernd 2li eee eae PSU 99 rexp word start ee ROPA a iene 99 TERP ena beridpPIeba du pertes ae epee oven 98 XOU t cae EEE med DU pees 65 TOUNd exactness vise ap aende pew RET 65 rsc macro transformer sess 41 run shell command 2 2e2e Lbrem3e Ito dee dui 248 run synchronous subprocesS 248 r ntime cwccsccco ie i ew URERP CEPR ds 247 S Safe accessOES ile a diede d enge 33 save bitmapon win32 graphics device 294 sc macro transfOrmer c be ae ERG 40 Scheme subprocess environment 251 Seconded Su sieht ee hee Pease ee Sheena buses ide 110 select user eventson os2 graphics device 299 Sed ere edP E pi eue ese ae 211 213 Sequence i 2nion ec aa eek e DP Re Eh 27 Seb ou cse dole muy ee o CIERRE es Art uod ed EHE 21 22 set apply hook extra esses 170 set apply hook procedure 170 set background color 293 296 set background coloron os2 graphics device MIT Scheme Reference set background coloron win32 graphics device baia Rd atn eas NE a ioe cis 293 set background coloron x graphics device 290 set border coloron x graphics device 290 set border widthon x graphics device 291 Set Ccarl D ngis6RIenispR eRPR IIO 106 Se t cdr poten saci o
200. b bo 96 String tall 4 20099 Oen dae Re Ruhe s 92 String trim ok 4mddoeeDR Hea CERA RR EROR d 93 String trim l ft os opere sb ee 93 332 string trim right 22 9o 4 eda 93 String upcasS ienins 3e wea a edd bd d 91 String upcaset ose Die i Snn TESSE 91 String upper C6ase ed cues 91 String wt type s uec REAP DE IER 158 Stringp4 7 12 Ss soe E beoepPERIHES Sed 90 SUring Tto n e i sinet kee EIU PAL rs 89 SCLIN GH he sisse 51 89 90 128 129 144 145 STEINE ET 1212 0b e p 49 ue ence ettet sedis 90 SLIIngoTL o areata led dgpebn EDEN Re EHBERN 90 StEIDET cx ek ERE E ue bebe i EP E adde 88 strong hash table constructor 144 S bIliStiscereed eue ue qud ee aneeda iR arduis 110 S bSUtriBE i leisec RPG eh RPG Rey Ed ER 92 s bstring list rnesbRePeeke b tes 109 substring gt parser buffer 204 substring capitalize 4 2 asad ees 91 substring capitalized soos 91 Substring tis jns ea sdde desea RE EIER 90 substring ci i e n ego o bet ead 89 substring downcase eise es 91 substring fill i 24 9 pees Maes des 101 substring find next char 94 substring find next char ci 94 substring find next char in set 95 substring find previous char 95 substring find previous char ci 95 substring find previous char in set 95 substring lower case 91 substring match backward
201. back in If implementations were permitted to close the port on any escape from the current continuation then it would be impossible to write portable code using both call with current continuation and call with input file or call with output file 184 MIT Scheme Reference with input from string a b c d e f read abc Note this procedure is equivalent to with input from port string gt input port string thunk with string output port procedure procedure Procedure is called with one argument an output port The value yielded by pro cedure is ignored When procedure returns with string output port returns the port s accumulated output as a newly allocated string with output to string thunk procedure Thunk must be a procedure of no arguments with output to string creates a new output port that accumulates output makes that port the default value returned by current output port and calls thunk with no arguments When thunk returns with output to string restores the previous default and returns the accumulated output as a newly allocated string with output to string lambda write abc gt abc Note this procedure is equivalent to with string output port lambda port with output to port port thunk with output to truncated string k thunk procedure Similar to with output to string except that the output is limited to k characters If thunk attempts to write more than k characters it will be abo
202. before it is stretched into an ellipse so the actual angles that you will see on the computer screen depends on all of radius x and radius y the window size and the virtual coordinates If fill is then just the segment of the circle is drawn otherwise the arc is filled in a pie slice fashion This draws a quarter circle pie slice standing on its point with point at virtual coordinates 3 5 graphics opereration g draw arc 3 5 5 5 45 90 t draw circle x y radius operation on x graphics device fill circle x y radius operation on x graphics device These operations draw a circle outline or a filled circle solid at on the graph ics device at the virtual coordinates given by x and y These operations could be implemented trivially interms of the draw arc operation Chapter 17 Graphics 291 set border width width operation on x graphics device set internal border width width operation on x graphics device These operations change the external and internal border widths of a window Width must be an exact non negative integer specified in pixels The change takes place im mediately Note that changing the internal border width can cause displayed graphics to be garbled we recommend calling graphics clear on the window s device after doing so set font font name operation on x graphics device Changes the font used when drawing text in a window Font name must be a string that is a font name known to the X server This op
203. between zero inclusive and modulus exclusive The exactness of the returned number is the same as the exactness of modulus Additionally if modulus is an exact integer the returned number will be also Usually modulus is either an exact integer or an inexact real the current implementation has been tuned to make these two cases fast If state is given and not f it must be a random state object otherwise it defaults to the value of the variable random state This object is used to maintain the Chapter 4 Numbers 75 state of the pseudo random number generator and is altered as a side effect of the random procedure random 1 0 gt 32744744667719056 random 1 0 gt 01668326768172354 random 10 gt 3 random 10 gt 8 random 100 gt 38 random 100 gt 63 random 100 3 130501475769920525 6755399441055744 random 100 3 170571694016427575 13510798882111488 flo random unit state procedure State must be a random state object flo random unit returns a pseudo random number between zero inclusive and one exclusive the returned number is always a flonum and therefore an inexact real number flo random unit is equivalent to random with a modulus of 1 0 except that it is faster The next three definitions concern random state objects In addition to these definitions it is important to know that random state objects are specifically designed so that they can be saved to disk using the fasdump procedure a
204. bie nes eS HESS 136 ttan first ak teens terp iners Rosine abate 136 stream heado corii le e Rene PPXES 136 streap length roere eee 4 30 Died ds 136 SLream mapoleserseqees abiens a ete pg 137 Stream null 7 vedeiaecee eerta beds 136 Stream pasr 22 92 tiu iniri pee eni 136 Stream ref uo xv ete eter teats 136 Sstream reSt sc c Ru RR p RED 136 stream taijl 2 tar n Reg d pr Ru 136 SEPIDE oig epp SR REIP eee eas 88 210 306 string alphabet ssss sss 86 String gt charset i e ebbe RUE RR 84 331 string gt decoded time 000 245 string gt file time e eee 245 string input port e egoc eter Rhen 183 String 2li8t 05ieperee aed Dae ees 88 109 Strinp nulber ie le dues ve eda 70 string gt parser buffer sss 204 String SymbOl 4 regc diver eae nba d 129 string uninterned symbol 130 string universal time s 244 Sstring append 22 o 0 e ene fS 92 String capitalaze yo does eee eae ski gi String capitalazel iit aces sese erbe 91 string capitalized isses kA 91 StLING Cl i12 EEE E oe nda he depending 210 SUrinp cl4 t sisse PE RE Dp apt aa 90 String CiS cirrus PRAE rh een EEA 90 Sring CIE dioc nere ds earn dae Ip ug 89 String ci f s ee ede iU ali due Vd 90 String ciof loud ated e ah owas EEG Rd 90 String COmpare ocgemkeserteoree e p Ree a8 90 string compare 6i o o ga rmn reri 90 StrlnB COpy
205. ble binding The value returned by thunk is the returned as the value of this procedure Table must satisfy parser macros and thunk must be a procedure of no arguments Chapter 14 Input Output 217 14 12 XML Parser MIT Scheme provides a simple non validating XML parser This parser is mostly confor mant with the exception that it doesn t support UTF 16 The parser also does not support external document type declarations DTDs The output of the parser is a record tree that closely reflects the structure of the XML document There is also an output mechanism that writes an XML record tree to a port There is no guarantee that parsing an XML document and writing it back out will make a verbatim copy of the document The output will be semantically identical but may have small syntactic differences For example comments are discarded by the parser and entities are substituted during the parsing process The purpose of the XML support is to provide a mechanism for reading and writing simple XML documents In the future this support may be further developed to support a standard interface such as DOM or SAX The XML support is a run time loadable option to use it execute load option xml once before compiling any code that uses it The XML interface consists of an input procedure an output procedure and a set of record types parse xml document buffer procedure This procedure parses an XML input stream and returns a newly allo
206. bracket in entries 0 cece ee eee eee 5 bucky bit of character defn issu 80 bucky bit prefix defn 0 000 77 buffering of graphics output 285 buffering of Output er steri ess doni etir ag 188 built in procedure 222 2 ose 165 byte VecLof cesenssentasnier e e pit bh Eds 103 MIT Scheme Reference C call by need evaluation defn 133 capitalization of string 04 91 car field of pair defn 105 case clase i5uspu ce 7e8 peed ete awa 25 case conversion of character lusu 79 case sensitivity of string operations 87 case of interned symbol 128 case Of SING oso i padogo ber ee ieee ees 91 case insensitivity of programs defn i cdr field of pair defn 000 105 cell def Lect ipi i nenk eene erue 131 character deff i e renes TT character bits defn 00 20000 80 character code defn 0 0005 80 character seb 2 2e2 22s ele er eR gs 82 character alphabetic defn 83 character alphanumeric defn 83 character graphic defn 00 83 character input from port 185 198 character ISO 8859 1 defn 0 82 character named defn 200 77 character numeric defn 0 83 character output to
207. cR RR So oko cR We See ease ees 1 l Overview ara 694 56545654 Ro o 95 S08 Go ERSTE SES 3 2 Special POENIS posses aw de ew sa a ee eee ee See ee 15 a doguivalence PERIODS aca def cst wx acm Reine bee ood ous 51 4 Numbers isch or EROR 3c erc EX DOR Soe P wa 57 ONERE 00 00 side cnet 12117211 1 117 7 1117 7 T5751 TT O BNIUUPEe S ax uoE S BERE ocd ete ds na EE E ER VR A dae 87 2B rrr 105 B Vectores saaressa Bow wie sew Se ew es wwe Be we aa 119 9 Bit Sings ssa eo cae es Seo eRe eS ee ee eRe eee es 123 10 Miscellaneous Datatypes 22a son unnm m mh 8h 127 LI JSSOOHNDUDBS 2 294 3 9 009 4 39 ebb dees bode deed eae 139 12 Procedures 4 9 922594 Rx REA ETERS 165 13 Environments es uw a owe ae ee oS aa ee RC C 173 14 Input Output rece eee ae doe aA oe do CK cad ewes 179 15 Operating System Interface is 222r rms 221 lb Error Systemi semere okwox de Ox o9 en X OR e EROR RC RC oa 257 I7 Graphics ose CT UP 281 18 Win32 Package Reference ss 94r oo hono 303 GNU Free Documentation License eere 313 Binding Index saaa ados s edo 6 Ad Seed os weed ede seeder ed 319 oncept Ended s bu uos uua hoes hepa sews od be EORR weds 335 MIT Scheme Reference Table of Contents Acknowledgements ccc cece ccc eceeeeee 1 l OVERVICW cs icnseudsdedescemieeeanesewdws de 3 1 1 Notational Conventions s esasa ss sra seasan aaa se esses 4 LLT EUTROTS nit pitched alan bee dase aR E ate mta tte ro 4 1 1 2 Examples lerne eas 4 1 L3 Entry For
208. cally occupies less space than a list of the same length and the average time required to access a randomly chosen element is typically less for the vector than for the list The length of a vector is the number of elements that it contains This number is an exact non negative integer that is fixed when the vector is created The valid indexes of a vector are the exact non negative integers less than the length of the vector The first element in a vector is indexed by zero and the last element is indexed by one less than the length of the vector Vectors are written using the notation object For example a vector of length 3 containing the number zero in element 0 the list 2 2 2 2 in element 1 and the string Anna in element 2 can be written as 0 2 2 2 2 Anna Note that this is the external representation of a vector not an expression evaluating to a vector Like list constants vector constants must be quoted 0 2 2 2 2 Anna gt 0 2 2 2 2 Anna A number of the vector procedures operate on subvectors A subvector is a segment of a vector that is specified by two exact non negative integers start and end Start is the index of the first element that is included in the subvector and end is one greater than the index of the last element that is included in the subvector Thus if start and end are the same they refer to a null subvector and if start is zero and end is the length of the vector they refer to
209. case newline characters read from the subprocess port are translated to the specified line ending The default value of this option is default call with output file foo out lambda port run shell command ls la etc output port output line translation r n output buffer size n subprocess option Specifies the size of the output buffer for the standard output of the subprocess This is the buffer on the Scheme side and has nothing to do with any buffering done on the subprocess side Ignored if the output option is f N must be an exact positive integer specifying the number of characters the buffer can hold The default value of this option is 512 call with output file foo out lambda port run shell command ls la etc output port output buffer size 4096 redisplay hook thunk subprocess option Specifies that thunk is to be run periodically when output from the subprocess is available Thunk must be a procedure of no arguments or f indicating that no hook is supplied This option is mostly useful for interactive systems For example the Edwin text editor uses this to update output buffers when running some subprocesses The default value of this option is f run shell command ls la etc redisplay hook lambda update buffer contents buffer environment environment subprocess option Specifies the environment variables that are to be used for the subprocess Environ ment must be either
210. case version may be used and probably should to make the code look more like conventional Windows code The Scheme bindings have been produced automagically Most of the define symbols contain an underscore so there are not many name clashes There is one very notable name clash however ERROR is defined to 0 which shadows the scheme procedure error in the root package environment To signal an error use access to get error from the system global environment Chapter 18 Win32 Package Reference 309 declare usual integrations access error system global environment Complain The set of procedures is incomplete because procedures have been added on a by need basis for the implementation of other parts of the system e g Scheme Graphics Look in the implementation for further details Win32 API procedure names have been uniformly converted into Scheme identifiers as follows e leading uppercase letter is translated into a lowercase letter e Subsequent sequences of uppercase letters are translated into lowercase letters pre ceeded by a hyphen minus symbol i e hyphens are inserted at a lowercase to upper case transition e Predicates beginning with Is finally have a question mark appended Example applying these rules to IsWindow yields is window and GetDC is translated into get dc 18 3 Device Independent Bitmap Utilities The Device Independent Bitmap DIB utilities library DIBUTILS DLL and the as
211. cated XML record tree The buffer argument must be a parser buffer see Section 14 10 Parser Buffers page 204 Most errors in the input stream are detected and signalled with informa tion identifying the location of the error where possible Note that the input stream is assumed to be UTF 8 write xml xml document port procedure This procedure writes an XML record tree to port The xml document argument must be a record of type xm1 document which is the root record of an XML record tree The output is encoded in UTF 8 XML names are represented in memory as symbols All symbols appearing within XML records are XML names Because XML names are case sensitive there is a procedure to intern these symbols xml intern string procedure Returns the XML name called string XML names are represented as symbols but unlike ordinary Scheme symbols they are case sensitive The following is true for any two strings string and string2 let name1 xml intern stringl name2 xml intern s ring2 if string stringl string2 eq namei1 name2 not eq name1 name2 218 MIT Scheme Reference The output from the XML parser and the input to the XML output procedure is a complex data structure composed of a heirarchy of typed components Each component is a record whose fields correspond to parts of the XML structure that the record represents There are no special operations on these records each is a tuple with named subparts The root
212. ce cece eee eese 4 error unassigned variable 6 error unbound variable defn 6 error gt notational convention 4 errors notational conventions 4 escape character for string 87 escape procedure defn 000 167 escape procedure alternate invocation 168 evaluation order of arguments 14 evaluation call by need defn 133 evaluation in examples isses eeesss 4 evaluation lazy defn 00 000 133 evaluation of s expression 04 175 ever Biber sp ous Sis hls bab aay hg ER 62 Cun T R 58 exampl 8u 22 pde mer Rue den ter det mes tus 4 existence testing of fille 232 exit on locall 24 2 2ppLar Ime Re SERI eua 168 explicit renaming e dig icceertereiebidiniesds 47 exponent marker defn 00 60 expression defn 0 000 005 13 expression binding defn 0 0 7 expression conditional defn 24 expression constant defn 0 13 expression input from port 186 expression iteration defn 27 expression literal defn uuueu 13 expression output to port 0 189 expression procedure call defn 14 expression special form defn 13 e
213. cedure Returns an output port suitable for generating tracing information about a pro gram s execution The output generated by the trace procedure is sent to this port Initially trace output port returns the value of console i o port interaction i o port procedure Returns an 1 O port suitable for querying or prompting the user The standard prompting procedures use this port by default see Section 14 8 Prompting page 194 Initially interaction i o port returns the value of console i o port with input from port input port thunk procedure with output to port output port thunk procedure with notification output port output port thunk procedure with trace output port output port thunk procedure with interaction i o port i o port thunk procedure Thunk must be a procedure of no arguments Each of these procedures binds one of the standard ports to its first argument calls thunk with no arguments restores the port to its original value and returns the result that was yielded by thunk This Chapter 14 Input Output 181 temporary binding is performed the same way as dynamic binding of a variable including the behavior in the presence of continuations see Section 2 3 Dynamic Binding page 18 with input from port binds the current input port with output to port binds the current output port with notification output port binds the notification output port with trace output port binds the trace output port and with
214. char input port procedure input port peek char input port procedure input port discard char input port procedure input port char ready input port k procedure input port read string input port char set procedure input port discard chars input port char set procedure input port read substring input port string start end procedure Each of these procedures invokes the respective operation on input port For example the following are equivalent input port read char input port input port operation input port read char input port The following custom operations are implemented for input ports to files and will also work with some other kinds of input ports 200 MIT Scheme Reference eof input port operation on input port Returns stt if input port is known to be at end of file otherwise it returns f chars remaining input port operation on input port Returns an estimate of the number of characters remaining to be read from input port This is useful only when input port is a file port in binary mode in other cases it returns f buffered input chars input port operation on input port Returns the number of unread characters that are stored in input port s buffer This will always be less than or equal to the buffer s size input buffer size input port operation on input port Returns the maximum number of characters that input port s buffer can hold set input buffer size input port size operation on input port Resizes inpu
215. cheme system library directory An error of type condition type file operation error is signalled if pathname cannot be located on the library search path system library directory pathname options gt pathname 44 usr local lib mit scheme options 15 2 Working Directory When MIT Scheme is started the current working directory or simply working direc tory is initialized in an operating system dependent manner usually it is the directory in which Scheme was invoked The working directory can be determined from within Scheme Chapter 15 Operating System Interface 231 by calling the pwd procedure and changed by calling the cd procedure Each REP loop has its own working directory and inferior REP loops initialize their working directory from the value in effect in their superior at the time they are created working directory pathname procedure pwd procedure Returns the current working directory as a pathname that has no name type or version components just host device and directory components pwd is an alias for working directory pathname the long name is intended for programs and the short name for interactive use set working directory pathname filename procedure cd filename procedure Makes filename the current working directory and returns the new current working directory as a pathname Filename is coerced to a pathname using pathname as directory cd is an alias for set working directory pathname the long
216. ciation cdr association alist tree 11 7 2 Basic Operations on Weight Balanced Trees This section describes the basic tree operations on weight balanced trees These opera tions are the usual tree operations for insertion deletion and lookup some predicates and a procedure for determining the number of associations in a tree wt tree object procedure Returns stt if object is a weight balanced tree otherwise returns f wt tree empty wt tree procedure Returns t if wt tree contains no associations otherwise returns f wt tree size wt tree procedure Returns the number of associations in wt tree an exact non negative integer This operation takes constant time Chapter 11 Associations 159 wt tree add wt tree key datum procedure Returns a new tree containing all the associations in wt tree and the association of datum with key If wt tree already had an association for key the new association overrides the old The average and worst case times required by this operation are proportional to the logarithm of the number of associations in wt tree wt tree add wt tree key datum procedure Associates datum with key in wt tree and returns an unspecified value If wt tree already has an association for key that association is replaced The average and worst case times required by this operation are proportional to the logarithm of the number of associations in wt tree wt tree member key wt tree procedure Returns stt if
217. console bell Luue 189 root as pathname component 224 run time loadable option 153 157 191 209 217 runtime Systemi ecd de kane done dur b dn 3 S S as exponent marker in number 60 S expfression cc dece ere rhEDeMpPIRIGUG MEE Bees 175 scheme concepls J dus v eo ness da reed ag owed 6 Scheme standard iol pene sewed pede ed 3 scope see region ss eaee eee ei e e eee eee 3 scoping lexical defn 0 2 000 8 SCOPING StatiC ce sve IR yee se Gad eee 7 screen Clearing Teorier terit irimi iriiri yars 189 searching for regular expression 97 searching of alist 5 5445 overtone nciudde dary 140 searching of bit string 0 124 searching OF lisb 2i tad toa nu a Peete 113 searching Of StTing gacnus panceeoG dae we A 93 searching of vector 0c E IEEE ba 121 selecting of stream component 136 selection components of pathname 228 selection of bit string component 124 selection of cell component 131 selection of character component 80 selection of list component 109 selection of pair component 106 selection of string component 88 selection of vector component 120 selection of weak pair component T3 semicolon as external representation 11 sensitivity to cas
218. cutoff absolute 4 number gt string 4e10 atan 1 1 31415930000 fluid let flonum unparser cutoff absolute 4 scientific number gt string 4e10 atan 1 1 3 141593e10 fluid let flonum unparser cutoff absolute 4 engineering number gt string 4e10 atan 1 1 gt 31 41593e9 fluid let flonum unparser cutoff absolute 5 number gt string 4e10 atan 1 1 31415900000 string gt number string radix procedure Returns a number of the maximally precise representation expressed by the given string Radix must be an exact integer either 2 8 10 or 16 If supplied radix is a default radix that may be overridden by an explicit radix prefix in string e g 0177 If radix is not supplied then the default radix is 10 If string is not a syntactically valid notation for a number then string gt number returns sf string gt number 100 100 string gt number 100 16 gt 256 string gt number 1e2 100 0 string gt number 15 1500 0 Note that a numeric representation using a decimal point or an exponent marker is not recognized unless radix is 10 4 7 Fixnum and Flonum Operations This section describes numerical operations that are restricted forms of the operations described above These operations are useful because they compile very efficiently However care should be exercised if used improperly these operations can return incorrec
219. d gt 3 2 greater 3 2 less gt greater cond gt 3 3 greater 3 3 less else equal gt equal Normally programs should not depend on the value of a cond expression that has no else clause However some Scheme programmers prefer to write cond expressions in which at least one of the predicates is always true In this style the final clause is equivalent to an else clause Scheme supports an alternative clause syntax predicate gt recipient where recipient is an expression If predicate evaluates to a true value then recipient is evaluated Its value must be a procedure of one argument this procedure is then invoked on the value of the predicate cond assv b a 1 b 2 gt cadr else f 9 case key clause clause special form Key may be any expression Each clause has this form Cobject expression expression No object is evaluated and all the objects must be distinct The last clause may be an else clause which has the form else expression expression A case expression does the following 1 Evaluates key and compares the result with each object 2 If the result of evaluating key is equivalent in the sense of eqv see Chapter 3 Equivalence Predicates page 51 to an object case evaluates the expressions 26 MIT Scheme Reference in the corresponding clause from left to right and returns the result of evaluating the last expressio
220. d no type descriptor is defined only a predicate define structure foo type vector named foo a b c vector ref make foo 1 2 3 0 foo safe accessors boolean structure option This option allows the programmer to have some control over the safety of the slot accessors and modifiers generated by define structure If safe accessors is not specified or if boolean is then the accessors are optimized for speed at the expense of safety when compiled the accessors will turn into very fast inline sequences usually one to three machine instructions in length However if safe accessors is specified and boolean is either omitted or t then the accessors are optimized for safety will check the type and structure of their argument and will be close coded define structure foo safe accessors a b c initial offset offset structure option This is valid only in conjunction with the type option Offset must be an exact non negative integer and specifies the number of slots to leave open at the beginning of the structure instance before the specified slots are allocated Specifying an offset of zero is equivalent to omitting the initial offset option If the named option is specified the structure tag appears in the first slot followed by the offset slots and then the regular slots Otherwise the offset slots come first followed by the regular slots 34 MIT Scheme Reference define structure foo type vect
221. d by the REP loop to read the user s expressions If prompt is a string it is used verbatim as the prompt string Otherwise it must be a pair whose car is standard and whose cdr is a string in this case the prompt string is formed by prepending to the string the current REP loop level number and a space Also a space is appended to the string unless it already ends in a space or is an empty string The default behavior of this procedure is to print a fresh line a newline and the prompt string flush the output buffer then read an object and return it Under Edwin and Emacs before the object is read the interaction buffer is put into a mode that allows expressions to be edited and submitted for input using specific editor commands The first expression that is submitted is returned as the value of this procedure prompt for command char prompt port procedure Prompts the user for a single character that is to be executed as a command the returned character is guaranteed to satisfy char graphic If at all possible the character is read from the user interface using a mode that reads the character as a single keystroke in other words it should not be necessary for the user to follow the character with a carriage return or something similar This is the procedure called by debug and where to read the user s commands If prompt is a string it is used verbatim as the prompt string Otherwise it must be a pair whose car is standard
222. d in terms of pixels and usually the upper left hand corner is the origin of the coordinate system with x coordinates increasing to the right and y coordinates increasing downwards In contrast virtual coordinates are more flexible in the units employed the position of the origin and even the direction in which the coordinates increase A virtual coordinate system is defined by assigning coordinates to the edges of a device Because these edge coordinates are arbitrary real numbers any Cartesian coordinate system can be defined All graphics procedures that use coordinates are defined on virtual coordinates For example to draw a line at a particular place on a device the virtual coordinates for the endpoints of that line are given When a graphics device is initialized its virtual coordinate system is reset so that the left edge corresponds to an x coordinate of 1 the right edge to x coordinate 1 the bottom edge to y coordinate 1 and the top edge to y coordinate 1 graphics device coordinate limits graphics device procedure Returns as multiple values the device coordinate limits for graphics device The values which are exact non negative integers are x left y bottom x right and y top graphics coordinate limits graphics device procedure Returns as multiple values the virtual coordinate limits for graphics device The values which are real numbers are x left y bottom x right and y top graphics set coordinate lim
223. d is a symbolic link this procedure returns the contents of the symbolic link as a newly allocated string The returned value is the name of the file that the symbolic link points to and must be interpreted relative to the directory of filename If filename either does not exist or is not a symbolic link or if the operating system does not support symbolic links this procedure returns f file type direct filename procedure file type indirect filename procedure If the file named filename exists file type direct returns a symbol specifying what type of file it is For example if filename refers to a directory the symbol directory is returned If filename doesn t refer to an existing file f is returned If filename refers to a symbolic link file type direct returns the type of the link itself while file type indirect returns the type of the file linked to At this time the symbols that can be returned are the following The names are in tended to be self explanatory Most of these names can only be returned on particular operating systems and so the operating system name is prefixed to the name regular directory unix symbolic link unix character device unix block device unix named pipe unix socket os2 named pipe win32 named pipe file readable filename procedure Returns t if filename names a file that can be opened for input i e a readable file Otherwise returns f file writeable filename procedure Returns t if fil
224. d sd ies Med 306 hin LETT 306 i o port type es nl 9 ev Cian Pees dy 197 I O port sche kpeedien va dead ete RETE 179 identifiers i Bo cide te ae oe EDER E 46 identifier eso noid enera enana ae 46 DE E a es ied e ta E EEEE EE 24 127 Jignor efrfOrucsssierke eg a duty eee RET ELRES 262 ipnor rrOIS i ei du dun nad n kdo 261 imag part iik ke donee bh do 67 image destroy i ddr e ows oiii rep 287 image fill from byte vector 288 image height sped diese Ere bn 287 image width sie ce ances he epi tuai ne ee ae Ea 287 Jmageiilo Set aaa adus duda su ta ae ee 287 implemented primitive procedure 167 inexact exaCto s sie ope REG 58 67 inexact ns widens owes mae pu seus 61 init file patlhname b nrw 229 initial offset r9 ERR ES 33 3nputl o2tezescexerbeRPPI eS vere HAPES aE 250 input buffer siz6 epe reg dirai 250 input buffer sizeon input port 200 input line translation 0 250 input port parser buffer 204 inp t porFt type c 2 9 4 gad Vendee nes 197 input port char ready 199 input port discard char 199 input port discard chars 199 input port peek char 00 199 input port read Char nsc 2 mrs 199 input port read string 199 input port read substring 199 inp t port ores node io 9 94e dor eR wd 179 JU oui n EE epu ni D RFIN RE W
225. d structure is known in advance If no commas appear within the template the result of evaluating template is equivalent in the sense of equal to the result of evaluating template If a comma appears within the template however the expression following the comma is evaluated un quoted and its result is inserted into the structure instead of the comma and the expression If a comma appears followed immediately by an at sign then the following expression shall evaluate to a list the opening and closing parentheses of the list are then stripped away and the elements of the list are inserted in place of the comma at sign expression sequence list 1 2 4 gt let mame a a 1 2 map abs 4 5 6 b gt foo 10 3 cdr c 10 5 sqrt 4 map sqrt 16 9 8 list name name gt list 3 4 list a a a 3 45 6b car cons gt foo 7 cons gt 10 5 2 4 3 8 Pgh 3 gt 5 Quasiquote forms may be nested Substitutions are made only for unquoted compo nents appearing at the same nesting level as the outermost backquote The nesting level increases by one inside each successive quasiquotation and decreases by one inside each unquotation 24 MIT Scheme Reference Ca b 1 2 foo 1 3 d e f gt a b 1 2 foo 4 d e f let name1 x name2 y a b nam
226. d to software manuals it can be used for any textual work regardless of subject matter or whether it is published as a printed book We recommend this License principally for works whose purpose is instruction or reference 1 APPLICABILITY AND DEFINITIONS This License applies to any manual or other work that contains a notice placed by the copyright holder saying it can be distributed under the terms of this License The Document below refers to any such manual or work Any member of the public is a licensee and is addressed as you A Modified Version of the Document means any work containing the Document or a portion of it either copied verbatim or with modifications and or translated into another language A Secondary Section is a named appendix or a front matter section of the Document that deals exclusively with the relationship of the publishers or authors of the Document to the Document s overall subject or to related matters and contains nothing that could fall directly within that overall subject For example if the Document is in part a textbook of mathematics a Secondary Section may not explain any mathematics The relationship could be a matter of historical connection with the subject or with related matters or of legal commercial philosophical ethical or political position regarding them The Invariant Sections are certain Secondary Sections whose titles are designated as being thos
227. dad edo eee eee as 20 2 4 1 Top Level Definitions 2 04 21 2 4 2 Internal Definitions 0002005 21 2 5 Assignments ocv deed dE aA E east Rod e bb hs 22 2 0 QUOD ragaie na eaa aa aa tet ve or aeta d ed RR Res 22 2 Conditionals sc cei tee ee vad ere Re RR egre RE 24 2 8 SeQuencine 2549 ved au cbe et vem e ond E e ond d eos 26 2 0 Iterablons oiso esta Meet eee elite dh desse etus 27 ii iv MIT Scheme Reference 2 10 Structure Definitions 0 00 00 e eee eee eee 29 2AL Mattos stad esee tied hed eta ed oca De da edd 34 2 11 1 Binding Constructs for Syntactic Keywords 35 2 11 2 Pattern Language 00 eee eee 37 2 11 3 Syntactic Closures 00 cece cece eee eee 39 2 11 3 1 Syntax Terminology 40 2 11 3 2 Transformer Definition 40 2 11 33 Identifiers liiis elis 45 2 11 4 Explicit Renaming 0065 4T 3 Equivalence Predicates 51 4 N mMDeErSe epa edd ewe d Ede eco e a a ys 57 4 Numerical tyD68 4 4 4 2454 Eee um cb REED oe dade 57 AD HXACKIESS CPP 58 4 8 Implementation restrictions 00 0 eee eee eee ee 58 4 4 Syntax of numerical constants 000 eee eee eee 60 4 5 Numerical operations 000 c eee cece eee eee 60 4 6 Numerical input and output 0000 eee eee eee 68 4 7 Fixnum and Flonum Operations 00000 70
228. dard unparser method Name may be any object and is used as the name of the type with which the unparser method is associated name is usually a symbol Procedure must be f or a procedure of two arguments If procedure is f the returned method generates an external representation of this form name hash Here name is the external representation of the argument name as generated by write and hash is the external representation of an exact non negative integer unique to the object being printed specifically it is the result of calling hash on the object Subsequently the expression hash is notation for the object If procedure is supplied the returned method generates a slightly different external representation name hash output Here name and hash are as above and output is the output generated by procedure The representation is constructed in three stages 1 The first part of the format up to output is written to the output port specified by the unparser state This is name and hash 2 Procedure is invoked on two arguments the object and an output port 3 The closing bracket is written to the output port The following procedure is useful for writing more general kinds of unparser methods with current unparser state unparser state procedure procedure This procedure calls procedure with one argument the output port from unparser state Additionally it arranges for the remaining components
229. data structures do not have standard representations although particular implementations may define representations for them An external representation may be written in a program to obtain the corresponding object see Section 2 6 Quoting page 22 External representations can also be used for input and output The procedure read parses external representations and the procedure write generates them Together they provide an elegant and powerful input output facility Chapter 1 Overview 9 Note that the sequence of characters 2 6 is not an external representation of the integer 8 even though it is an expression that evaluates to the integer 8 rather it is an external representation of a three element list the elements of which are the symbol and the integers 2 and 6 Scheme s syntax has the property that any sequence of characters that is an expression is also the external representation of some object This can lead to confusion since it may not be obvious out of context whether a given sequence of characters is intended to denote data or program but it is also a source of power since it facilitates writing programs such as interpreters and compilers that treat programs as data or data as programs 1 2 7 Disjointness of Types Every object satisfies at most one of the following predicates but see Section 1 2 5 True and False page 8 for an exception bit string environment port symbol boolean null pr
230. datum 151 hash table entry key 04 151 hash table entry valid 151 hash table for each esses 146 hash table get iuo e weds ras sade 145 hash table key hash 151 hash table key list 146 hash table key 000000 151 hash table lookup i erm 146 hash table make 00000 153 hash table make entry 151 hash table put 0 eee 145 hash table rehash size 148 326 hash table rehash threshold 148 hash table remove 000 145 hash table set entry datum 151 hash table siZe s sii ririri eere ped re 148 Hash table ee iii ca ba te FECE doce 145 DIG MAD Pm 306 hbr sbh vao be aee ad soa te Bayes ios 306 hc rSOrb iex Reg e Rabe ea eoe gue 306 nn c eben adhe deb de acars anal a bod 306 libio MM baa oie ee bees E E EA 306 hide windowon os2 graphics device 298 hihstanceconoxeoijR e sews deere ee mee 306 MON iss p E 306 host address anyeec cis cent re nea TAPETE EE 256 host address loopback soyi rsriseri i besg it 256 host namesString c eed e neds da dees 228 NOS GH ict ccu pereo abere Tende Dude 229 HOSE sconce cen Ev RR nee erageda P qas 229 lpalette 2 seni te te v eiue v ee oe 306 lipeti icuenhenie de ee Sip edP ree EE re tate 306 WE OM doshas cna acy iae ede eed rane o
231. de procedure pp prints object in a visually appealing and structurally revealing manner on output port If object is a procedure pp attempts to print the source text If the optional argument as code is true pp prints lists as Scheme code providing appropriate indentation by default this argument is false pp performs discretionary output flushing and returns an unspecified value The following variables may be dynamically bound to change the behavior of the write and display procedures unparser radix variable This variable specifies the default radix used to print numbers Its value must be one of the exact integers 2 8 10 or 16 the default is 10 If unparser radix is not 10 numbers are prefixed to indicate their radix unparser list breadth limit variable This variable specifies a limit on the length of the printed representation of a list or vector for example if the limit is 4 only the first four elements of any list are printed followed by ellipses to indicate any additional elements The value of this variable must be an exact non negative integer or f meaning no limit the default is fluid let unparser list breadth limit 4 write to string a b c d gt a b c d fluid let unparser list breadth limit 4 write to string a b c d e gt abcd unparser list depth limit variable This variable specifies a limit on the nesting of lists and vectors in the printed repre s
232. denominator of their argument the result is computed as if the argument was represented as a fraction in lowest terms The denominator is always positive The denominator of 0 is defined to be 1 numerator 6 4 gt 3 denominator 6 4 gt 2 denominator exact gt inexact 6 4 gt 2 0 Chapter 4 Numbers 65 floor x procedure ceiling x procedure truncate x procedure round x procedure These procedures return integers floor returns the largest integer not larger than x ceiling returns the smallest integer not smaller than x truncate returns the integer closest to x whose absolute value is not larger than the absolute value of x round returns the closest integer to x rounding to even when x is halfway between two integers Rationale round rounds to even for consistency with the rounding modes required by the IEEE floating point standard Note If the argument to one of these procedures is inexact then the result will also be inexact If an exact value is needed the result should be passed to the inexact gt exact procedure or use one of the procedures below floor 4 3 gt 5 0 ceiling 4 3 gt 4 0 truncate 4 3 gt 4 0 round 4 3 gt 4 0 floor 3 5 gt 3 0 ceiling 3 5 gt 4 0 truncate 3 5 gt 3 0 round 3 5 4 0 inexact round 7 2 gt 4 exact round 7 gt 7 floor gt exact x procedure ceiling gt exact x procedure truncate gt exact x procedure round
233. denote the boolean constants see Section 10 1 Booleans page 127 This character sequence introduces a character constant see Chapter 5 Char acters page 77 This character sequence introduces a vector constant see Chapter 8 Vectors page 119 A close parenthesis terminates a vector constant e 1 b o d 1 s x amp These character sequences are used in the notation for numbers see Chapter 4 Numbers page 57 This character sequence introduces an extended comment The comment is terminated by the sequence This notation is an MIT Scheme extension This character sequence is used to denote a small set of named constants Cur rently there are only two of these optional and rest both of which are used in the lambda special form to mark certain parameters as being optional or rest parameters This notation is an MIT Scheme extension This character sequence introduces a bit string see Chapter 9 Bit Strings page 123 This notation is an MIT Scheme extension This character sequence is used to denote objects that do not have a readable external representation see Section 14 7 Custom Output page 193 A close bracket terminates the object s notation This notation is an MIT Scheme extension This character sequence is a convenient shorthand used to refer to objects by their hash number see Section 14 7 Custom Output page 193 This nota
234. directory pathname temporary directory pathname procedure Returns the pathname of an existing directory that can be used to store temporary files These directory names are tried in order until a writeable directory is found e The directories specified by the environment variables TMPDIR TEMP or TMP e Under unix the directories var tmp usr tmp or tmp e Under OS 2 or Windows the following directories on the system drive temp tmp or V e Under OS 2 or Windows the current directory as specified by default pathname defaults file directory filename procedure Returns stt if the file named filename exists and is a directory Otherwise returns f In operating systems that support symbolic links if filename names a symbolic link this examines the file linked to not the link itself This is equivalent to 234 MIT Scheme Reference eq directory file type indirect filename file regular filename procedure Returns t if the file named filename exists and is a regular file i e not a directory symbolic link device file etc Otherwise returns 4f In operating systems that support symbolic links if filename names a symbolic link this examines the file linked to not the link itself This is equivalent to eq regular file type indirect filename file symbolic link filename procedure In operating systems that support symbolic links if the file named filename exists an
235. dition generated by the warn procedure The fields message and irritants are taken directly from the arguments to warn message contains an object usually a string and irritants contains a list of objects The reporter for this type uses format error message to generate its output from message and irritants condition type simple condition message irritants condition type This is an unspecialized condition that does not fall into any of the standard condition classes The message field contains an object usually a string and irritants contains a list of objects The reporter for this type uses format error message to generate its output from message and irritants condition type breakpoint environment message prompt condition type A condition of this type is generated by the breakpoint mechanism The contents of its fields are beyond the scope of this document Chapter 17 Graphics 281 17 Graphics MIT Scheme has a simple two dimensional line graphics interface that is suitable for many graphics applications In particular it is often used for plotting data points from experiments The interface is generic in that it can support different types of graphics devices in a uniform manner At the present time only one type of graphics device is implemented on each operating system Procedures are available for drawing points lines and text defining the coordinate system clipping graphics output controlling some of the drawing characteristic
236. dition to having value cells and sometimes function cells these structures contained property lists Because of this uninterned symbols were often used merely for their property lists sometimes an uninterned symbol used this way was referred to as a disembodied property list In MIT Scheme symbols do not have property lists or any other components besides their names There is a different data structure similar to disembodied property lists one dimensional tables see Section 11 2 1D Tables page 141 For these reasons uninterned symbols are not very useful in MIT Scheme In fact their primary purpose is to simplify the generation of unique variable names in programs that generate Scheme code MIT Scheme reserves a specific set of interned symbols for its own use If you use these reserved symbols it is possible that you could break specific pieces of software that depend on them The reserved symbols all have names beginning with the characters and ending with the character thus none of these symbols can be read by the procedure read and hence are not likely to be used by accident For example intern unnamed procedure produces a reserved symbol Chapter 10 Miscellaneous Datatypes 129 string gt uninterned symbol foo l uninterned symbol 30 foo In this section the procedures that return symbols as values will either always return interned symbols or always return uninterned symbols The procedures tha
237. dtt if substring moon text process lunar text no moon string find next char string char procedure substring find next char string start end char procedure string find next char ci string char procedure substring find next char ci string start end char procedure Returns the index of the first occurrence of char in the string substring returns f if char does not appear in the string For the substring procedures the index Chapter 6 Strings 95 returned is relative to the entire string not just the substring The ci procedures don t distinguish uppercase and lowercase letters string find next char Adam A gt 0 substring find next char Adam 1 4 A gt f substring find next char ci Adam 1 4 A gt 2 string find next char in set string char set procedure substring find next char in set string start end char set procedure Returns the index of the first character in the string or substring that is also in char set or returns amp f if none of the characters in char set occur in string For the substring procedure only the substring is searched but the index returned is relative to the entire string not just the substring string find next char in set my string char set alphabetic start position of the first word in my string Can be used as a predicate if string find next char in set my string char set contains parentheses no parentheses string find previous char str
238. dure perror takes a pointer p which it uses to indicate the position in the input stream at which the error occurred In this case that is the beginning of the start tag i e the position of the leading lt marker This example still looks pretty complicated mostly due to the error signalling code In practice this is abstracted into a macro after which the expression is quite succinct Chapter 14 Input Output 209 parser bracket start tag seq noise string lt parse name match alt string gt string gt parse attribute list The bracket macro captures the pattern of a bracketed item and hides much of the detail The parser language actually consists of two languages one for defining matchers and one for defining parsers The languages are intentionally very similar and are meant to be used together Each sub language is described below in its own section The parser language is a run time loadable option to use it execute load option parser once before compiling any code that uses the language 14 11 1 Matcher The matcher language is a declarative language for specifying a matcher procedure A matcher procedure is a procedure that accepts a single parser buffer argument and returns a boolean value indicating whether the match it performs was successful If the match succeeds the internal pointer of the parser buffer is moved forward over the matched text If the match fails the intern
239. dures support multiple values call with values thunk procedure procedure Thunk must be a procedure of no arguments and procedure must be a procedure Thunk is invoked with a continuation that expects to receive multiple values specif ically the continuation expects to receive the same number of values that procedure accepts as arguments Thunk must return multiple values using the values proce dure Then procedure is called with the multiple values as its arguments The result yielded by procedure is returned as the result of call with values 170 MIT Scheme Reference values object procedure Returns multiple values The continuation in effect when this procedure is called must be a multiple value continuation that was created by call with values Fur thermore it must accept as many values as there are objects 12 4 Application Hooks Application hooks are objects that can be applied like procedures Each application hook has two parts a procedure that specifies what to do when the application hook is applied and an arbitrary object called extra Often the procedure uses the extra object to determine what to do There are two kinds of application hooks which differ in what arguments are passed to the procedure When an apply hook is applied the procedure is passed exactly the same arguments that were passed to the apply hook When an entity is applied the entity itself is passed as the first argument followed by the other argu
240. e entity procedure procedure Changes the procedure component of entity to be procedure Returns an unspecified value entity extra entity procedure Returns the extra component of entity set entity extra entity object procedure Changes the extra component of entity to be object Returns an unspecified value 172 MIT Scheme Reference Chapter 13 Environments 173 13 Environments 13 1 Environment Operations Environments are first class objects in MIT Scheme An environment consists of some bindings and possibly a parent environment from which other bindings are inherited The operations in this section reveal the frame like structure of environments by permitting you to examine the bindings of a particular environment separately from those of its parent There are several types of bindings that can occur in an environment The most com mon is the simple variable binding which associates a value any Scheme object with an identifier a symbol A variable binding can also be unassigned which means that it has no value An unassigned variable is bound in that is will shadow other bindings of the same name in ancestor environments but a reference to that variable will signal an error of type condition type unassigned variable An unassigned variable can be assigned using set or environment assign to give it a value In addition to variable bindings an environment can also have keyword bindings A keyword binding associates a s
241. e read char immediately returning that character Otherwise f is returned unless input port is a file port at end of file in which case an end of file object is returned In no case will this procedure block waiting for input read string char set input port procedure Reads characters from input port until it finds a terminating character that is a member of char set see Section 5 6 Character Sets page 82 or encounters end of file The port is updated to point to the terminating character or to end of file if no terminating character was found read string returns the characters up to but excluding the terminating character as a newly allocated string This procedure ignores the blocking mode of the port blocking unconditionally until it sees either a delimiter or eof of file If end of file is encountered before any characters are read an end of file object is returned On many input ports this operation is significantly faster than the following equiva lent code using peek char and read char define read string char set input port let char peek char input port if eof object char char list gt string let loop char char if or eof object char char set member char set char t begin read char input port cons char loop peek char input port characters whose existence has been asserted by char ready cannot be rubbed out If char ready were to return amp f at end of file
242. e 113 For example here is how assv could be implemented define assv association procedure eqv car Another example is a reverse association procedure define rassv association procedure eqv cdr del assq object alist procedure del assv object alist procedure del assoc object alist procedure These procedures return a newly allocated copy of alist in which all associations with keys equal to object have been removed Note that while the returned copy is a newly allocated list the association pairs that are the elements of the list are shared with alist not copied del assq uses eq to compare object with the keys while del assv uses eqv and del assoc uses equal 1 This introduction is taken from Common Lisp The Language second edition p 431 2 Although they are often used as predicates assq assv and assoc do not have question marks in their names because they return useful values rather than just t or f Chapter 11 Associations 141 define a gt Cbutcher 231 e22nd St baker 515 w23rd St hardware 988 Lexington Ave del assq baker a gt butcher 231 e22nd St hardware 988 Lexington Ave del assq object alist procedure del assv object alist procedure del assoc object alist procedure These procedures remove from alist all associations with keys equal to object They return the resulting list del assq uses eq to compare object with the keys while del
243. e It is exited when the called procedure returns e It is also exited when execution is within the dynamic extent and a continuation is invoked that was captured while not within the dynamic extent If a second call to dynamic wind occurs within the dynamic extent of the call to thunk and then a continuation is invoked in such a way that the afters from these two invocations of dynamic wind are both to be called then the after associated with the second inner call to dynamic wind is called first If a second call to dynamic wind occurs within the dynamic extent of the call to thunk and then a continuation is invoked in such a way that the befores from these two invocations of dynamic wind are both to be called then the before associated with the first outer call to dynamic wind is called first If invoking a continuation requires calling the before from one call to dynamic wind and the after from another then the after is called first The effect of using a captured continuation to enter or exit the dynamic extent of a call to before or after is undefined let path c let add lambda s set path cons s path dynamic wind lambda add connect lambda add call with current continuation lambda cO set c cO talki lambda add disconnect if length path 4 c talk2 reverse path gt connect talk disconnect connect talk2 disconnect The following two proce
244. e arguments which are given in the current virtual coordinates for the device See Section 17 8 Images page 287 for more information about manipulating images draw lines xv yv operation on os2 graphics device This operation draws multiple disjoint lines it is like multiple calls to graphics draw line but much faster The arguments xv and yv are vectors of coordinates these vectors must be the same length and the length must be a multiple of two The contents of the vectors are alternating start end pairs For example the following are equivalent graphics draw line device xs ys xe ye graphics operation device draw lines vector xs xe vector ys ye 302 MIT Scheme Reference Chapter 18 Win32 Package Reference 303 18 Win32 Package Reference 18 1 Overview The Win32 implementation is still in a state of development It is expected that changes will be necessary when MIT Scheme is ported to Windows NT on the DEC Alpha ar chitecture In particular the current system is not arranged in a way that adequately distinguishes between issues that are a consequence of the NT operating system and those which are a consequence of the Intel x86 architecture Thus this documentation is not definitive it merely outlines how the current system works Parts of the system will change and any project implemented using the win32 system must plan for a re implementation stage The Win32 implementation has several components e Special
245. e contents of the device s display are unchanged graphics drag cursor graphics device x y procedure Draws a line from graphics device s cursor to the point x y simultaneously moving the cursor to that point The line is drawn using the current drawing mode and line style 17 4 Characteristics of Graphics Output Two characteristics of graphics output are so useful that they are supported uniformly by all graphics devices drawing mode and line style A third characteristic color is equally useful if not more so but implementation restrictions prohibit a uniform interface The drawing mode an exact integer in the range 0 to 15 inclusive determines how the figure being drawn is combined with the background over which it is drawn to generate the final result Initially the drawing mode is set to source so that the new output overwrites whatever appears in that place Useful alternative drawing modes can for example erase what was already there or invert it Altogether 16 boolean operations are available for combining the source what is being drawn and the destination what is being drawn over The source and destination are combined by the device on a pixel by pixel basis as follows Mode Meaning 0 ZERO erase use background color 1 source AND destination 2 source AND NOT destination 3 Source 4 NOT source AND destination 5 destination 6 source XOR destination 7 source OR destination 8 NOT source OR de
246. e eof object issus net seer pae dee 198 make eq hash table s di iiie tt 144 make equal hash table 144 make eqv hash table 00005 144 make graphics device suus 281 make initialized vector 120 Dak list cisco wdc e ewes pies eR ede 108 117 mnake parsSer macro8 e eife RERO vise es 216 make pathname 20 er biria LE EE ES 225 lake polarf seofibseb e gebe eta PES 67 make port 23 4e nerne IU Re RIED 198 make Port type feci se lowe tees es 197 make primitive procedure 166 Make Tandom State tia caidc hese gga hak ale alee 75 make rb tfee 0 212 Pee te ow heeds 153 make record type i le mede 132 make rectangular ssssss 66 67 make root top level environment 176 Wak SLrling 2 sns xs peed seib ig quud ERES 88 make string hash table 144 make syntactic closure esses 42 make synthetic identifier 47 MAkKe VECCON decre caca ak u EEG E EE 119 Make wt tHee ii 2 vis beeen esas ee ere PPS 158 make wt tree type o eR tirine 157 make xml lattlist 4 in eb sneh 219 make xml element esee sss 219 make xml lentity i z c E erdt RE 220 make xml notation o t Lem 220 make xml declaration sess 218 make xml document eeee eee 218 make xml dtd 2 a b E hoes 219 make xml element nr en 218 make xm
247. e error condition type procedure Returns t if the condition type is condition type error or a specialization of it f otherwise condition type field names condition type procedure Returns a list of all of the field names for a condition of type condition type This is the set union of the fields specified when this condition type was created with the condition type field names of the generalization of this condition type condition type generalizations condition type procedure Returns a list of all of the generalizations of condition type Notice that every condi tion type is considered a generalization of itself condition type object procedure Returns f if and only if object is not a condition type 16 7 Condition Type Taxonomy The MIT Scheme error system provides a rich set of predefined condition types These are organized into a forest through taxonomic links providing the relationships for specializes and generalizes The chart appearing below shows these relationships by indenting all the specializations of a given type relative to the type Note that the variables that are bound to these condition types are prefixed by condition type for example the type appearing in the following table as simple error is stored in the variable condition type simple error Users are encouraged to add new condition types by creating specializations of existing ones Following the chart are detailed descriptions of the pred
248. e for use in creating procedures with windows procedure Name is a string which is the name of a DLL file Internally find module uses the LoadLibrary Win32 API so name should conform to the specifications for this call Name should be either a full path name of a DLL or the name of a DLL that resides in the same directory as the Scheme binary SCHEME EXE or in the system directory The module returned is a description for the DLL and the DLL need not necessarily be linked at or immediately after this call DLL modules are linked on need and unlinked before Scheme exits and when there are no remaining references to entry points after a garbage collection This behavior ensures that the Scheme system can run when a DLL is absent provided the DLL is not actually used i e no attempt is made to call a procedure in the DLL gdi32 dll variable This variable is bound to the module describing the GDI32 DLL library which con tains the Win32 API graphics calls e g LineTo kernel32 dll variable This variable is bound to the module describing the KERNEL32 DLL library user32 dll variable This variable is bound to the module describing the USER32 DLL library This module contains many useful Win32 API procedures like MessageBox and SetWindowText windows procedure name parameter type return type special form module entry name options This form creates a procedure and could be thought of as foreign named lambd
249. e in programs defn 11 sequencing expressions sees eese 26 Server socket remm Rm 252 253 service TOP oscars das ren mr ene pee a 253 Set of characters iss ee er pem 82 sets using binary trees 157 shadowing of variable binding defn 6 short precision of inexact number 60 signal an error defn 0 005 4 signalling of condition defn 258 simplest rational defn 00 65 simplification of pathname 222 single precision of inexact number 60 size of hash table defn 146 Cod cM MEET 252 Concept Index soft linking of file 5 see 232 special characters in programs 11 Special Torii 222i proce ewan aaa 15 special form defn csircreiriesroriicir irit ers 13 special form entry category 5 specialization of condition types 258 259 269 270 272 specialization of condition types defn 257 specified result in examples 4 standard character 00 eee eee 79 standard character defn suus 83 standard operations on port 196 standard poris 22 0x6 RARIOR EIE TS 180 standard Scheme defn 200005 3 start of substring defn 00 87 start of subvector defn 0 119 Static SCOPING e eroe sees ad
250. e is called with the vector of values as its argument and must return a vector or 4f If it returns a vector the parse is successful and those are the resulting values If it returns f the parse fails and the internal pointer of the parser buffer is returned to what it was before pexp was parsed For example transform lambda v if 0 vector length v f v encapsulate expression pexp parser expression The encapsulate expression transforms the values returned by parsing pexp into a single value Expression is a Scheme expression that must evaluate to a procedure at run time If pexp is successfully parsed the procedure is called with the vector of values as its argument and may return any Scheme object The result of the encapsulate expression is a vector of length one containing that object And con sequently encapsulate doesn t change the success or failure of pexp only its value For example encapsulate vector gt list map expression pexp parser expression The map expression performs a per element transform on the values returned by pars ing pexp Expression is a Scheme expression that must evaluate to a procedure at run time If pexp is successfully parsed the procedure is mapped by vector map over the values returned from the parse The mapped values are returned as the result of Chapter 14 Input Output 215 the map expression And consequently map doesn t change the success or failure of pexp n
251. e let e ew eg eee edet 179 port defn wise cena ekeecey tEn ir EEE 179 port number TCP 0 02 eee 253 port primilves 2 ocale goes 196 DOLL CY PO PPP m 196 POTT Console oso nob GI Levies a Hehe deed 181 DOE CUIIOll co pn eee etie ERR 179 DOEU file iors REEL Ea Ra bench deals he 181 ORG STNE aasgier rara aanre Ead 183 positive infinity inf 00 0 0 0000 73 positive NUMBER Js ssdolnezesezme prp I 62 precision of inexact number 60 predicate defn 0 0000000 11 51 predicate equivalence defn 0 51 prefix OF SUING sock ats cu apresa mp pg 96 pretty printer 229 3 4 R6 B5 I Ilse pesi 190 primitive procedure defn 165 primitive procedure type 165 print name of symbol 0005 129 printed output in examples 4 printing graphics output 294 procedures enne dose nuum etwas owes 165 procedure call defn 00 200005 14 procedure define defn 00 000 20 procedure closing environment defn 15 procedure compiled 0000 165 procedure compound 00 eee 165 procedure construction ss esee eere 15 342 procedure entry format 0005 5 procedure escape defn 004 167 procedure interpreted 04 165 procedure invocation environment defn
252. e of Invariant Sections in the notice that says that the Document is released under this License 314 MIT Scheme Reference The Cover Texts are certain short passages of text that are listed as Front Cover Texts or Back Cover Texts in the notice that says that the Document is released under this License A Transparent copy of the Document means a machine readable copy represented in a format whose specification is available to the general public whose contents can be viewed and edited directly and straightforwardly with generic text editors or for images composed of pixels generic paint programs or for drawings some widely avail able drawing editor and that is suitable for input to text formatters or for automatic translation to a variety of formats suitable for input to text formatters A copy made in an otherwise Transparent file format whose markup has been designed to thwart or discourage subsequent modification by readers is not Transparent A copy that is not Transparent is called Opaque Examples of suitable formats for Transparent copies include plain ASCII without markup Texinfo input format LaTeX input format SGML or XML using a publicly available DTD and standard conforming simple HTML designed for human modification Opaque formats include PostScript PDF proprietary formats that can be read and edited only by proprietary word processors SGML or XML for which the DTD and or processing tools are
253. e of condition type associated with con tinuation The continuation is provided for inspection purposes only not for restart ing the computation The restarts argument is described in Section 16 4 Restarts page 263 The field plist is an alternating list of field names and values for those fields where the field names are those that would be returned by condition type field names condition type It is used to provide values for fields in the condition object fields with no value specified are set to Once a condition object has been created there is no way to alter the values of these fields access condition condition field name procedure Returns the value stored in the field field name within condition Field name must be one of the names returned by condition type field names condition type condition access condition looks up the field name at runtime so it is more efficient to use condition accessor to create an access function if the same field is to be extracted from several instances of the same condition type condition report string condition procedure Returns a string containing a report of the condition This is generated by calling write condition report on condition and a string output port and returning the output collected by the port as a string 16 6 Condition Types Each condition has a condition type object associated with it These objects are used as a means of focusing on related classes of conditions f
254. e procedures return the first pair of list whose car is object the returned pair is always one from which list is composed If object does not occur in list n b not the empty list is returned memq uses eq to compare object with the elements of list while memv uses eqv and member uses equal memq a a b c gt abc memq b a b c gt bc memq a bc d gt f memg list a b a c f member list a b a c 0 c memq 101 100 101 102 unspecified memv 101 100 101 102 gt 101 102 member procedure predicate procedure Returns a procedure similar to memq except that predicate which must be an equiv alence predicate is used instead of eq This could be used to define memv as follows define memv member procedure eqv 7 7 Mapping of Lists map procedure list list procedure Procedure must be a procedure taking as many arguments as there are lists If more than one list is given then they must all be the same length map applies procedure element wise to the elements of the lists and returns a list of the results in order from left to right The dynamic order in which procedure is applied to the elements of the lists is unspecified use for each to sequence side effects map cadr a b d e g h gt beh map lambda n expt n n 1234 1 4 27 256 map 1 2 3 4 5 6 gt 5 7 9 let count 0 map lambda ignored
255. e returned as the value of a procedure indicating that something unusual has happened to allow the caller to clean up some state The caller could then signal the condition once it is ready Chapter 16 Error System 259 A more important reason for having a separate condition signalling mechanism is that it allows resignalling When a signalled condition has been caught by a particular handler and the handler decides that it doesn t want to process that particular condition it can signal the condition again This is one way to allow other handlers to get a chance to see the condition error reason argument procedure This is the simplest and most common way to signal a condition that requires inter vention before a computation can proceed when intervention is not required warn is more appropriate error signals a condition using signal condition and if no handler for that condition alters the flow of control by invoking a restart for example it calls the procedure standard error handler which normally prints an error message and stops the computation entering an error REPL Under normal circumstances error will not return a value although an interactive debugger can be used to force this to occur Precisely what condition is signalled depends on the first argument to error If reason is a condition then that condition is signalled and the arguments are ignored If reason is a condition type then a new instance of this type i
256. e supplied and which were defaulted Rest Finally if there is a rest parameter there can only be one any remaining arguments are made into a list and the list is bound to the rest parameter If there are no remaining arguments the rest parameter is bound to the empty list In Scheme unlike some other Lisp implementations the list to which a rest parameter is bound is always freshly allocated It has infinite extent and may be modified without affecting the procedure s caller 16 MIT Scheme Reference Specially recognized keywords divide the formals parameters into these three classes The keywords used here are optional and rest Note that only is defined by standard Scheme the other keywords are MIT Scheme extensions t rest has the same meaning as in formals The use of these keywords is best explained by means of examples The following are typical lambda lists followed by descriptions of which parameters are required optional and rest We will use rest in these examples but anywhere it appears could be used instead a b c a b and c are all required The procedure must be passed exactly three arguments a b optional c a and b are required c is optional The procedure may be passed either two or three arguments GEL optional a b c a b and c are all optional The procedure may be passed any number of arguments between zero and three inclusive
257. e ticks gt seconds process time clock Example system clock 20 88 runtime procedure Returns the amount of process time in seconds that has elapsed since Scheme was started However it does not include time spent in garbage collection runtime 20 83 with timings thunk receiver procedure Calls thunk with no arguments After thunk returns receiver is called with three arguments describing the time spent while computing thunk the elapsed run time the amount of time spent in the garbage collector and the elapsed real time All three times are in ticks This procedure is most useful for doing performance measurements and is designed to have relatively low overhead with timings lambda hairy computation lambda run time gc time real time write internal time ticks gt seconds run time write char space write internal time ticks gt seconds gc time write char space write internal time ticks gt seconds real time newline measure interval runtime procedure procedure Calls procedure passing it the current process time in seconds as an argument The result of this call must be another procedure When procedure returns the resulting procedure is tail recursively called with the ending time in seconds as an argument If runtime is f the elapsed time is deducted from the elapsed system time returned by runtime While this procedure can be used for time measurement its interface i
258. e vector Chapter 14 Input Output 193 Note that in this example newlines appear in the output only as specified by the directives the actual newline characters in the control string are suppressed because each is preceded by a tilde 14 7 Custom Output MIT Scheme provides hooks for specifying that certain kinds of objects have special written representations There are no restrictions on the written representations but only a few kinds of objects may have custom representation specified for them specifically records see Section 10 4 Records page 132 vectors that have special tags in their zero th elements see Chapter 8 Vectors page 119 and pairs that have special tags in their car fields see Chapter 7 Lists page 105 There is a different procedure for specifying the written representation of each of these types set record type unparser method record type unparser method procedure Changes the unparser method of the type represented by record type to be unparser method and returns an unspecified value Subsequently when the unparser encoun ters a record of this type it will invoke unparser method to generate the written representation unparser set tagged vector method tag unparser method procedure Changes the unparser method of the vector type represented by tag to be unparser method and returns an unspecified value Subsequently when the unparser en counters a vector with tag as its zero th element it wi
259. e1 name2 d e gt a b x y d e The notations template and quasiquote template are identical in all respects expression is identical to unquote expression and expression is identical to unquote splicing expression quasiquote list unquote 1 2 40 list 3 4 gt quasiquote list unquote 1 2 40 gt list 4 12 4 i e quasiquote list unquote 1 2 4 Unpredictable behavior can result if any of the symbols quasiquote unquote or unquote splicing appear in a template in ways otherwise than as described above 2 7 Conditionals The behavior of the conditional expressions is determined by whether objects are true or false The conditional expressions count only f as false They count everything else including t pairs symbols numbers strings vectors and procedures as true but see Section 1 2 5 True and False page 8 In the descriptions that follow we say that an object has a true value or is true when the conditional expressions treat it as true and we say that an object has a false value or is false when the conditional expressions treat it as false if predicate consequent alternative special form Predicate consequent and alternative are expressions An if expression is evaluated as follows first predicate is evaluated If it yields a true value then consequent is evaluated and its value is returned Otherwise alternative is evalu
260. ecified value call with input file filename procedure procedure call with output file filename procedure procedure These procedures call procedure with one argument the port obtained by opening the named file for input or output respectively If the file cannot be opened an error of type condition type file operation error is signalled If procedure returns Chapter 14 Input Output 183 then the port is closed automatically and the value yielded by procedure is returned If procedure does not return then the port will not be closed automatically unless it is reclaimed by the garbage collector call with binary input file filename procedure procedure call with binary output file filename procedure procedure These procedures open files in binary mode In all other respects they are identical to call with input file and call with output file respectively with input from file filename thunk procedure with output to file filename thunk procedure Thunk must be a procedure of no arguments The file is opened for input or output an input or output port connected to it is made the default value returned by current input port or current output port and the thunk is called with no arguments When the thunk returns the port is closed and the previous default is restored with input from file and with output to file return the value yielded by thunk If an escape procedure is used to escape from the continuation of these procedures their beha
261. ection 11 3 The Association Table page 142 If one of the keys 142 MIT Scheme Reference being associated is a compound object such as a vector a 1D table can be stored in one of the vector s slots Under these circumstances accessing items in a 1D table will be comparable in performance to using a property list in a conventional Lisp make 1d table procedure Returns a newly allocated empty 1D table 1d table object procedure Returns stt if object is a 1D table otherwise returns Any object that satisfies this predicate also satisfies list 1d table put 1d table key datum procedure Creates an association between key and datum in Id table Returns an unspecified value 1d table remove 1d table key procedure Removes any association for key in 1d table and returns an unspecified value 1d table get 1d table key default procedure Returns the datum associated with key in 1d table If there is no association for key default is returned 1d table lookup 1d table key if found if not found procedure If found must be a procedure of one argument and if not found must be a procedure of no arguments If 1d table contains an association for key if found is invoked on the datum of the association Otherwise if not found is invoked with no arguments In either case the result of the invoked procedure is returned as the result of 1d table lookup 1d table alist 1d table procedure Returns a newly allocated association list that
262. ectory 4USERDIR NAUSER exists then it is used Failing that if the directory ZUSER exists on the OS 2 system drive then it is used As a last resort the OS 2 system drive is the home directory Like OS 2 the Windows implementation uses heuristics based on environment vari ables The user s home directory is computed by examining several environment variables in the following order e HOMEDRIVE and HOMEPATH are both defined and HOMEDRIVE Z ZHOMEPATHY is an existing directory These variables are automatically defined by Windows NT e HOME is defined and HOMEY is an existing directory e USERDIR and USERNAME are defined and 4USERDIRANAUSERNAMEA is an existing directory e USERDIR and USER are defined and 4USERDIR NAUSERA is an existing directory e USERNAME is defined and USERNAMEY is an existing directory on the Windows system drive e USER is defined and AUSER is an existing directory on the Windows system drive e Finally if all else fails the Windows system drive is used as the home directory system library pathname pathname procedure Locates pathname in MIT Scheme s system library directory An error of type condition type file operation error is signalled if pathname cannot be located on the library search path system library pathname compiler com pathname 45 usr local lib mit scheme compiler com system library directory pathname pathname procedure Locates the pathname of an MIT S
263. ed If object is a string this procedure returns the pathname that corresponds to the string in this case it is equivalent to parse namestring object 4f f gt pathname foo pathname 65 foo gt pathname usr morris pathname 66 usr morris parse namestring thing host defaults procedure This turns thing into a pathname Thing must be a pathname or a string If thing is a pathname it is returned If thing is a string this procedure returns the pathname that corresponds to the string parsed according to the syntax of the file system specified by host This procedure does not do defaulting of pathname components The optional arguments are used to determine what syntax should be used for parsing the string In general this is only really useful if your implementation of MIT Scheme supports more than one file system otherwise you would use pathname If given host must be a host object or and defaults must be a pathname Host specifies the syntax used to parse the string If host is not given or f the host component from defaults is used instead if defaults is not given the host component from default pathname defaults is used gt namestring pathname procedure namestring returns a newly allocated string that is the filename corresponding to pathname namestring gt pathname usr morris minor van gt usr morris minor van pathname simplify pathname procedure Returns a p
264. ed directly by the condition handling code or by gathering them interactively from the user The names of restarts can be chosen arbitrarily but the choice of name is significant These names are used to coordinate between the signalling code which supplies names for restarts and the handling code which typically chooses a restart effector by the name of its restart Thus the names specify the restart protocol implemented by the signalling code and invoked by the handling code The protocol indicates the number of arguments required by the effector code as well as the semantics of the arguments Scheme provides a conventional set of names hence protocols for common use By choosing the names of restarts from this set signalling code can indicate that it is able to perform a small set of fairly common actions abort continue muffle warning retry store value use value In turn simple condition handling code can look for the kind of action it wishes to perform and simply invoke it by name All of Scheme s conventional names are symbols although in general restart names are not restricted to any particular data type In addition the object f is reserved to indicate the not for automated use protocol these restarts should be activated only under human control Restarts themselves are first class objects They encapsulate their name a procedure known as the effector to be executed if they are invoked and a thunk known as the
265. eec 170 13 Environments eee eene 173 13 1 Environment Operations sseseeee eee eee ee 173 13 2 Environment Variables 0 0 00 e cece een eee 175 13 8 REPL Environment 0 0 00 tisie eee eee eens 176 13 4 Top level Environments 00 000 c cece een eee 176 14 Input Output 22232 rox mb eeu 179 I1 PON eee ee 179 142 Fil POri85 ne bern piner ret nce te RR wate dote 181 L43 Stine Ports 2223 ud ede dia shen ad ded e UR ed aud es 183 144 Input Procedures sonet epe ber nee 185 14 5 Output Procedures seessueeessseeeesee eens 188 14 6 FOTW Ait sect eed eet ehe ah Ono ed e ee RR 191 14 7 QCu stom Output s uiieekie cere epe EUR FR ca Rd 193 TALS IPrompbng eco cse ze eet tate ed eee te guia 194 14 9 Port Primitives 0 0 ccc cece ek rr n 196 14 9 1 Port lyp6e8S 2 sercis tC ce wide shied de 197 14 9 2 Constructors and Accessors for Ports 198 14 9 3 Input Port Operations 00 198 14 9 4 Output Port Operations 200 14 9 5 Blocking Mode 0c ee eee eee 202 14 9 6 Terminal Mode 0 0 0 c cece esses 203 14 10 Parser Butters serceru eitad tad aides dtnd teks See des 204 14 11 Parser Language 0 c eee e E 207 WALI Matcher 1 shot id ae a tava bas 209 TARL S PATSOIS uu ited tne tees in E A ond 212 14 11 38 Parser language Macros esses 215 14 12 XML ParSer 2 ub tag mn oom
266. efault version 226 pathname device i052 o esas e eres 225 pathname directory eee cee 225 pathname ho8t 2 4 dde rues 225 pathname name c 2 cca den rere dus 225 pathname new device sess 226 pathname new directory sss 226 pathname new name see 226 pathname new type eee 226 pathname new version esses 226 pathname simplify 0004 222 pathname type 6 cde ee Rr re 225 pathname versiOn u e e hp nm 225 pathname wild 2 Ree Re 227 pathnamez 2s n edu dees ern 226 pathname zies irani 4 eges uirepteees 226 peek char sz daegs epee ae I bn E d 185 peek charon input port esses 198 peek parser buffer char 205 port type operation sess 197 port type operation names 197 port type operations lesse 197 port type srs ic ceases n e uber ieai miiia 197 port input blocking mode 202 port input terminal mode 203 port operation i dw rug Rr we 198 port operation names sss 198 port output blocking mode 202 port output terminal mode 204 port set input blocking mode 202 port set input terminal mode 203 Binding Index port set output blocking mode 202 port set output terminal mode 204 Por
267. efault version procedure Returns a pathname whose components are obtained by combining those of pathname and defaults Defaults defaults to the value of default pathname defaults and default version defaults to newest The pathnames are combined by components if pathname has a non missing com ponent that is the resulting component otherwise the component from defaults is used The default version can be f to preserve the information that the component was missing from pathname The directory component is handled specially if both pathnames have directory components that are lists and the directory component from pathname is relative i e starts with relative then the resulting directory component is formed by appending pathname s component to defaults s component For example define pathi gt pathname scheme foo scm define path2 gt pathname usr morris pathi pathname 74 scheme foo scm path2 pathname 75 usr morris merge pathnames path path2 pathname 76 usr scheme foo scm merge pathnames path2 path1 pathname 77 usr morris scm The merging rules for the version are more complex and depend on whether pathname specifies a name If pathname does not specify a name then the version if not provided will come from defaults However if pathname does specify a name then the version is not affected by defaults The reason is that the version belongs to some other file name and is
268. efine parser macro special forms expand into calls to these procedures The remaining procedures define the interface to the parser macros table abstraction Each parser macro table has a separate binding space for macros in the matcher and parser languages However the table inherits bindings from one specified table it s not possible to inherit matcher language bindings from one table and parser language bindings from another make parser macros parent table procedure Create and return a new parser macro table that inherits from parent table Parent table must be either a parser macro table or f usually it is specified as the value of global parser macros parser macros object procedure This is a predicate for parser macro tables global parser macros procedure Return the global parser macro table This table is predefined and contains all of the bindings documented here There is a current table at all times and macro definitions are always placed in this table By default the current table is the global macro table but the following procedures allow this to be changed current parser macros procedure Return the current parser macro table set current parser macros table procedure Change the current parser macro table to table which must satisfy parser macros with current parser macros table thunk procedure Bind the current parser macro table to table call thunk with no arguments then restore the original ta
269. efined condition types Some of these types are marked as abstract types Abstract types are not intended to be used directly as the type of a condition they are to be used as generalizations of other types and for binding condition handlers Types that are not marked as abstract are concrete they are intended to be explicitly used as a condition s type Chapter 16 Error System 273 serious condition error simple error illegal datum wrong type datum wrong type argument wrong number of arguments datum out of range bad range argument inapplicable object file error file operation error derived file error port error derived port error variable error unbound variable unassigned variable arithmetic error divide by zero floating point overflow floating point underflow control error no such restart not loading primitive procedure error system call error warning simple warning simple condition breakpoint condition type serious condition condition type This is an abstract type All serious conditions that require some form of intervention should inherit from this type In particular all errors inherit from this type condition type error condition type This is an abstract type All errors should inherit from this type condition type simple error message irritants condition type This is the condition generated by the error procedure when its first argument is not a condition or condition type The fields message and irritants
270. egal datum cdr pair procedure Returns the contents of the cdr field of pair Note that it is an error to take the cdr of the empty list cdr 3 b c d gt bcd cdr 1 2 gt 2 cdr Illegal datum set car pair object procedure Stores object in the car field of pair The value returned by set car is unspecified Chapter 7 Lists 107 define f list not a constant list define g constant list set car f 3 unspecified set car g 3 error Illegal datum set cdr pair object procedure Stores object in the cdr field of pair The value returned by set cdr is unspecified caar pair procedure cadr pair procedure cdar pair procedure cddr pair procedure caaar pair procedure caadr pair procedure cadar pair procedure caddr pair procedure cdaar pair procedure cdadr pair procedure cddar pair procedure cdddr pair procedure caaaar pair procedure caaadr pair procedure caadar pair procedure caaddr pair procedure cadaar pair procedure cadadr pair procedure caddar pair procedure cadddr pair procedure cdaaar pair procedure cdaadr pair procedure cdadar pair procedure cdaddr pair procedure cddaar pair procedure cddadr pair procedure cdddar pair procedure cddddr pair procedure These procedures are compositions of car and cdr for example caddr could be defined by define caddr lambda x car cdr cdr x general car cdr object path procedure This procedure is a ge
271. em dependent as follows e On unix systems bin sh is used e On OS 2 systems the value of the environment variable COMSPEC is used or if that is not set cmd exe on the current path e On Windows systems the value of the environment variable COMSPEC is used If that is not set cmd exe is used for Windows NT or command com is used for Windows 9x in each case the shell is found by searching the path run shell command ls la etc gt shell file name usr local bin bash 15 8 TCP Sockets MIT Scheme provides access to sockets which are a mechanism for inter process commu nication TCP stream sockets are supported which communicate between computers over a TCP IP network TCP sockets are supported on all operating systems TCP sockets have two distinct interfaces one interface to implement a client and another to implement a server The basic protocol is that servers set up a listening port and wait for connections from clients Implementation of clients is simpler and will be treated first The socket procedures accept two special arguments called host name and service Host name is a string which must be the name of an internet host It is looked up using the Chapter 15 Operating System Interface 253 ordinary lookup rules for your computer For example if your host is foo mit edu and host name is bar then it specifies bar mit edu Service specifies the service to which you will connect A netwo
272. eme Reference string match backward string1 string2 procedure substring match backward string start end string2 start end procedure string match backward ci string string2 procedure substring match backward ci string start end string2 start end procedure Compares the two strings substrings starting from the end and matching toward the front returning the number of characters that are the same If the two strings sub strings end differently returns 0 The ci procedures don t distinguish uppercase and lowercase letters string match backward ci BULBOUS fractious gt S3 matches ous string prefix stringl string2 procedure substring prefix stringl start1 end1 string2 start2 end2 procedure string prefix ci string string2 procedure substring prefix ci string start1 end1 string start2 end2 procedure These procedures return t if the first string substring forms the prefix of the second otherwise returns f The ci procedures don t distinguish uppercase and lowercase letters string prefix abc abcdef gt t string prefix any string gt t string suffix string string2 procedure substring suffix string start1 end1 string start2 end2 procedure string suffix ci string string2 procedure substring suffix ci string start1 end1 string2 start2 end2 procedure These procedures return stt if the first string substring forms the suffix of the second otherwise returns amp f The ci procedures d
273. ename names a file that can be opened for output i e a writeable file Otherwise returns f Chapter 15 Operating System Interface 235 file executable filename procedure Returns stt if filename names a file that can be executed Otherwise returns Under unix an executable file is identified by its mode bits Under OS 2 an executable file has one of the file extensions exe com cmd or bat Under Windows an 3 3 executable file has one of the file extensions exe com or bat file access filename mode procedure Mode must be an exact integer between 0 and 7 inclusive it is a bitwise encoded predicate selector with 1 meaning executable 2 meaning writeable and 4 mean ing readable file access returns t if filename exists and satisfies the predicates selected by mode For example if mode is 5 then filename must be both readable and executable If filename doesn t exist or if it does not satisfy the selected predicates f is returned file eq filenamel filename2 procedure Determines whether filenamel and filename refer to the same file Under unix this is done by comparing the inodes and devices of the two files Under OS 2 and Windows this is done by comparing the filename strings file modes filename procedure If filename names an existing file file modes returns an exact non negative integer encoding the file s permissions The encoding of this in
274. entation aa as external representation 11 b as external representation 60 d as external representation 60 e as external representation 60 f as external representation 127 i as external representation 60 0 as external representation 60 t as external representation LDF x as external representation 60 2 as external representation 22 as external representation 105 as external representation issue 105 9 as external representation 24 as external representation 24 notational convention 00000 4 ci in string procedure name 87 as external representation 105 m eniries rizcc mesenteric pbEeE dg 5 335 as external representation 4 dhl gt in Cond clause cq So lala dad 22 ea ond e d 25 gt notational convention 04 4 T in predicate names sese eese Til m entries s cose e be OUI Esso 5 ONTOS o ker eb DO de dade dete ede 5 6 as external representation 0 24 as escape character in string 8T 1 1D table def vh pu reegecesader eta 141 absolute pathname defn 0 0 230 absolute value of number
275. entation If lists or vectors are more deeply nested than the limit the part of the representation that exceeds the limit is replaced by ellipses The value of this variable must be an exact non negative integer or f meaning no limit the default is fluid let unparser list depth limit 4 write to string a b c d a b c d fluid let unparser list depth limit 4 write to string a b c d gt CC b c da unparser string length limit variable This variable specifies a limit on the length of the printed representation of strings If a string s length exceeds this limit the part of the printed representation for the characters exceeding the limit is replaced by ellipses The value of this variable must be an exact non negative integer or f meaning no limit the default is f Chapter 14 Input Output 191 fluid let unparser string length limit 4 write to string abcd abcd fluid let unparser string length limit 4 write to string abcde N abcd Ne unparse with maximum readability variable This variable which takes a boolean value tells the printer to use a special printed representation for objects that normally print in a form that cannot be recognized by read These objects are printed using the representation n where n is the result of calling hash on the object to be printed The reader recognizes this syntax calling unha
276. er should be rounded so that there are a specific number of digits to the right of the decimal point Chapter 4 Numbers 69 precision An exact integer If rounding type is normal precision is ignored If rounding type is relative precision must be positive and it specifies the number of digits to which the printed representation will be rounded If rounding type is absolute the printed representation will be rounded precision digits to the right of the decimal point if precision is negative the representation is rounded precision digits to the left of the decimal point format type One of the symbols normal scientific or engineering This speci fies the format in which the number will be printed scientific specifies that the number will be printed using scientific no tation x xxxeyyy In other words the number is printed as a mantissa between zero inclusive and ten exclusive and an exponent engineering is like scientific except that the exponent is always a power of three and the mantissa is constrained to be between zero inclusive and 1000 exclusive If normal is specified the number will be printed in positional notation if it is small enough otherwise it is printed in scientific nota tion A number is small enough when the number of digits that would be printed using positional notation does not exceed the number of digits of precision in the underlying floating point number representation IEEE double preci
277. er method defn 5 193 unspecified result defn 200008 5 up as pathname component 224 Uppercase 4 cicada pate oe T EAE 11 uppercase character conversion 79 Uppercase iN StriN Goce c teed ener ees 91 usable size of hash table defn 147 usage environment eee eee ia ii 41 y V as format parameter s esses 192 valid index of bit string defn 123 valid index of list defn iussus 110 valid index of string defn uusueu 87 valid index of subvector defn 119 valid index of vector defn 119 value of variable defn 00 00 6 values multiple 002 5560 040 mil 169 variable bindimng RI RRIRRE bao 6 173 variable binding do 2 22005 28 variable binding fluid let 00 18 variable binding internal definition 21 variable binding lambda 15 MIT Scheme Reference variable binding let 17 variable binding let 22 ee ee ee 17 variable binding letrec 18 variable binding top level definition 21 variable reference defn 0 00005 13 variable adding to environment 20 variable assigning values to 22 variable binding region defn
278. er s name for the desired color set border color and set mouse color immediately change the border and mouse cursor colors set background color and set foreground color change the colors to be used when drawing but have no effect on anything drawn prior to their invocation Because changing the background color affects the entire window we recommend calling graphics clear on the window s device afterwards Color names include both mnemonic names like red and intensity names specified in the rrggbb no tation draw arc x y radius x radius y angle start operation on x graphics device angle sweep fill Operation draw arc draws or fills an arc An arc is a segment of a circle which may have been stretched along the x or y axis to form an ellipse The parameters x y radius x and radius y describe the circle and angle start and angle sweep choose which part of the circle is drawn The arc is drawn on the graphics device with the center of the circle at the virtual coordinates given by x and y radius x and radius y determine the size of the circle in virtual coordinate units The parameter angle start determines where the arc starts It is measured in degrees in an anti clockwise direction starting at 3 o clock angle sweep determines how much of the circle is drawn It too is measured anti clockwise in degrees A negative value means the measurement is in a clockwise direction Note that the angles are determined on a unit circle
279. eration does not affect text drawn prior to its invocation set mouse shape shape number operation on x graphics device Changes the shape of the mouse cursor Shape number is an exact non negative integer that is used as an index into the mouse shape font when multiplied by 2 this number corresponds to an index in the file usr include X11 cursorfont h map window operation on x graphics device withdraw window operation on x graphics device These operations control the mapping of windows They correspond directly to Xlib s XMapWindow and XWithdrawWindow resize window width height operation on x graphics device Changes the size of a window Width and height must be exact non negative integers The operation corresponds directly to Xlib s XResizeWindow This operation resets the virtual coordinate system and the clip rectangle move window x y operation on x graphics device Changes the position of a window on the display X and y must be exact integers The operation corresponds directly to Xlib s XMoveWindow Note that the coordinates x and y do not take the external border into account and therefore will not position the window as you might like The only reliable way to position a window is to ask a window manager to do it for you get default resource property operation on x graphics device This operation corresponds directly to Xlib s XGetDefault Resource and property must be strings The operation returns the character
280. erede 176 VAS ges ty rh bape ata ee T TM 6 108 117 119 ligt 28trfe8m o rms eere e PEERS 135 liSt 2sStrfing ere ER e RREY DOR eres 88 109 list vectOr o o v b OPES 109 119 li8t COpyol i oa Ea Da wee bue 109 141 list deletor o 09r IRR rena 113 141 list deletor cet etd wee tot ke we 113 141 list head oc eed ie etes few wpre ti pae 111 list ref iem epum Res areas 110 list search negative eese 114 list search positive 0 114 list tall sit x63 LOS he edge we US LIO XLI list transform negative ss 112 list transform positive 112 list cese EPRCNERMLIETERES 109 140 142 load bitmapon win32 graphics device 294 load optioH s 153 157 191 209 217 local decoded time 2 2 212 6 bee 239 Jocat hoBtiucl oresesriec Ree ease dente Sens 229 Binding Index VOM 306 lower windowon os2 graphics device 298 M magnitude eIcee Gun eee Perdre EET 67 mnake 1d table c lesen we sweetest od 142 make appby hoOok i mne niatan 170 make bit string cie ur lle ree red ES 123 make Cell cem mnes reinii ens 131 make char oce dx prr cts pee tras eg 80 make circular liSt 1 c e beereers 117 make condition 258 259 271 make condition type ceoos e RR 271 Make decoded time eit s2 teede bie ER gee its 240 p ke directory o blc BRE RR 233 make entity 2zsertefredaepibceridpeY eee 170 mak
281. erminal mode of port to be mode executes thunk restores the output terminal mode of port to what it was when port with output terminal mode was called and returns the value that was yielded by thunk This binding is performed by dynamic wind which guarantees that the output terminal mode is restored if thunk escapes from its continuation 14 10 Parser Buffers The parser buffer mechanism facilitates construction of parsers for complex grammars It does this by providing an input stream with unbounded buffering and backtracking The amount of buffering is under program control The stream can backtrack to any position in the buffer The mechanism defines two data types the parser buffer and the parser buffer pointer A parser buffer is like an input port with buffering and backtracking A parser buffer pointer is a pointer into the stream of characters provided by a parser buffer Note that all of the procedures defined here consider a parser buffer to contain a stream of 8 bit characters in the 180 8859 1 character set except for natch utf8 char in alphabet which treats it as a stream of Unicode characters encoded as 8 bit bytes in the UTF 8 encoding There are several constructors for parser buffers input port gt parser buffer port procedure Returns a parser buffer that buffers characters read from port substring gt parser buffer string start end procedure Returns a parser buffer that buffers the characters in the argument substri
282. ermine if two identifers are the same Thus eq can be used to compare identifiers exactly as it would be used to compare symbols Often though it is useful to know whether two identifiers mean the same thing For example the cond macro uses the symbol else to identify the final clause in the conditional A macro transformer for cond cannot just look for the symbol else because the cond form might be the output of another macro transformer that replaced the symbol else with an alias Instead the transformer must look for an identifier that means the same thing in the usage environment as the symbol else means in the transformer environment identifier environment identifierl environment2 identifier2 procedure Environment and environment2 must be syntactic environments and identifier and identifier2 must be identifiers identifier returns t if the meaning of identifier in environment is the same as that of identifier2 in environment2 otherwise it returns 4f Examples let syntax 00 sc macro transformer lambda form env capture syntactic environment lambda transformer env identifier transformer env x env x list foo let x 3 foo gt t Hf Chapter 2 Special Forms 47 let syntax bar foo let syntax 00 sc macro transformer lambda form env capture syntactic environment lambda transformer env identifier transformer env foo env cadr form
283. error message message irritants port procedure Message is typically a string although this is not required irritants a list of irritant objects and port an output port Formats message and irritants to port in the standard way Note that during the formatting process the depth and breadth to which lists are printed are each limited to small numbers to guarantee that the output from each irritant is not arbitrarily large error irritant noise value procedure Creates and returns a noise object whose value is value 16 3 Condition Handling The occurrence of a condition is signalled using signal condition signal condition attempts to locate and invoke a condition handler that is prepared to deal with the type of condition that has occurred A condition handler is a procedure of one parameter the condition that is being signalled A procedure is installed as a condition handler by calling bind condition handler to establish a handler that is in effect only while a particu lar thunk is executing or bind default condition handler to establish a handler that is in effect permanently As implied by the name handlers created by bind default condition handler are invoked only after all other applicable handlers have been invoked A handler may process a signal in any way it deems appropriate but the common patterns are Ignore the condition By returning from the handler in the usual manner Handle the condition By doing some processin
284. es The set of named operations is represented by an object called a port type A port type is constructed from a set of named operations and is subsequently used to construct a port The port type completely specifies the behavior of the port Port types also support a simple form of inheritance allowing you to create new ports that are similar to existing ports The port operations are divided into two classes Standard operations There is a specific set of standard operations for input ports and a different set for output ports Applications can assume that the standard input operations are implemented for all input ports and likewise the standard output operations are implemented for all output ports Custom operations Some ports support additional operations For example ports that implement output to terminals or windows may define an operation named y size that returns the height of the terminal in characters Because only some ports will implement these operations programs that use custom operations must test Chapter 14 Input Output 197 each port for their existence and be prepared to deal with ports that do not implement them 14 9 1 Port Types The procedures in this section provide means for constructing port types with standard and custom operations and accessing their operations make port type operations port type procedure Creates and returns a new port type Operations must be a list each element is a list
285. es argument defaults to the list of field names in the call to make record type that created the type represented by record type if the field names argument is provided it is an error if it contains any duplicates or any symbols not in the default list record predicate record type procedure Returns a procedure for testing membership in the type represented by record type The returned procedure accepts exactly one argument and returns t if the argument is a member of the indicated record type it returns f otherwise record accessor record type field name procedure Returns a procedure for reading the value of a particular field of a member of the type represented by record type The returned procedure accepts exactly one argument which must be a record of the appropriate type it returns the current value of the field named by the symbol field name in that record The symbol field name must be a member of the list of field names in the call to make record type that created the type represented by record type record modifier record type field name procedure Returns a procedure for writing the value of a particular field of a member of the type represented by record type The returned procedure accepts exactly two arguments first a record of the appropriate type and second an arbitrary Scheme value it modifies the field named by the symbol field name in that record to contain the given value The returned value of the modifier procedure is
286. es an alphabetic character followed by a numeric character such as H4 Note that if there are no mexp operands the seq expression successfully matches the null string alt mexp matcher expression This attempts to match each mexp operand in order from left to right The first one that successfully matches becomes the match for the entire alt expression The alt expression participates in backtracking If one of the mexp operands matches but the overall match in which this expression is embedded fails the backtracking mechanism will cause the alt expression to try the remaining mexp operands For example if the expression seq alt ab a b is matched against the text abc the alt expression will initially match its first operand But it will then fail to match the second operand of the seq expression This will cause the alt to be restarted at which time it will match a and the overall match will succeed Note that if there are no mexp operands the alt match will always fail mexp matcher expression This matches zero or more occurrences of the mexp operand Consequently this match always succeeds The expression participates in backtracking if it matches N occurrences of mexp but the overall match fails it will backtrack to N 1 occurrences and continue If the overall match continues to fail the expression will continue to backtrack until there are no occurrences left mexp matcher expression
287. establish for their variable bindings In a let expression the initial values are computed before any of the variables become bound In a let expression the evaluations and bindings are sequentially interleaved And in a letrec expression all the bindings are in effect while the initial values are being computed thus allowing mutually recursive definitions let variable init expression expression special form The inits are evaluated in the current environment in some unspecified order the variables are bound to fresh locations holding the results the expressions are evalu ated sequentially in the extended environment and the value of the last expression is returned Each binding of a variable has the expressions as its region MIT Scheme allows any of the inits to be omitted in which case the corresponding variables are unassigned Note that the following are equivalent let variable init expression expression lambda variable expression expression init Some examples let x 2 y 3 x y gt 6 let x 2 y 3 let foo lambda z x y z x 7 foo 4 gt 9 See Section 2 9 Iteration page 27 for information on named let let variable init expression expression special form let is similar to let but the bindings are performed sequentially from left to right and the region of a binding is that part of the let expression to the right of the bindin
288. et eo vee di e REY rien 93 true boolean object 2222 eee 8 true boolean object defn 127 true in conditional expression defn 24 truename of input file 233 type predicate for 1D table 142 type predicate for alist 140 type predicate for apply hook 170 type predicate for bit string 124 type predicate for boolean 127 type predicate for cell 4 131 type predicate for character 79 type predicate for character set 82 type predicate for compiled procedure 166 type predicate for compound procedure 166 type predicate for continuation 168 type predicate for empty list 110 type predicate for entity 171 type predicate for environment 173 type predicate for EOF object 186 type predicate for fixmum 71 type predicate for flonum 13 type predicate for hash table 145 type predicate for list 004 109 type predicate for number 60 type predicate for pair 106 type predicate for pathname 226 type predicate for pathname host 229 type predicate for port 179 type predicate for p
289. ever each of the mechanisms has various different properties that make it appropriate in different situations e Association lists are one of Lisp s oldest association mechanisms Because they are made from ordinary pairs they are easy to build and manipulate and very flexible in use However the average lookup time for an association list is linear in the number of associations e 1D tables have a very simple interface making them easy to use and offer the feature that they do not prevent their keys from being reclaimed by the garbage collector Like association lists their average lookup time is linear in the number of associations but 1D tables aren t as flexible e The association table is MIT Scheme s equivalent to the property lists of Lisp It has the advantages that the keys may be any type of object and that it does not prevent the keys from being reclaimed by the garbage collector However two linear time lookups must be performed one for each key whereas for traditional property lists only one lookup is required for both keys e Hash tables are a powerful mechanism with constant time access to large amounts of data Hash tables are not as flexible as association lists but because their access times are independent of the number of associations in the table for most applications they are the mechanism of choice e Balanced binary trees are another association mechanism that is useful for applications in which the keys
290. evious char string start end code procedure vector 8b find previous char ci string start end code procedure Returns the index of the last occurrence of code in the given substring returns f if code does not appear The index returned is relative to the entire string not just the substring Code must be a valid ISO 8859 1 code vector 8b find previous char ci doesn t distinguish uppercase and lowercase let ters 104 MIT Scheme Reference Chapter 7 Lists 105 7 Lists A pair sometimes called a dotted pair is a data structure with two fields called the car and cdr fields for historical reasons Pairs are created by the procedure cons The car and cdr fields are accessed by the procedures car and cdr The car and cdr fields are assigned by the procedures set car and set cdr Pairs are used primarily to represent lists A list can be defined recursively as either the empty list or a pair whose cdr is a list More precisely the set of lists is defined as the smallest set X such that e The empty list is in X e If list is in X then any pair whose cdr field contains list is also in X The objects in the car fields of successive pairs of a list are the elements of the list For example a two element list is a pair whose car is the first element and whose cdr is a pair whose car is the second element and whose cdr is the empty list T he length of a list is the number of elements which is the same as the number of pairs The empty lis
291. ey hashing procedure used by make eqv hash table equal hash mod object modulus procedure This procedure is the key hashing procedure used by make equal hash table 11 4 5 Low Level Hash Table Operations The procedures in this section allow the programmer to control some of the internal structure of a hash table Normally hash tables maintain associations between keys and datums using pairs or weak pairs These procedures allow the programmer to specify the use of some other data structure to maintain the association In this section the data structure that represents an association in a hash table is called an entry 150 MIT Scheme Reference hash table constructor key hash key make entry entry valid procedure entry key entry datum set entry datum rehash after gc Creates and returns a hash table constructor procedure see Section 11 4 1 Construc tion of Hash Tables page 143 The arguments define the characteristics of the hash table as follows key hash The hashing procedure A procedure that accepts two arguments a key and an exact positive integer the modulus and returns an exact non negative integer that is less than the modulus key A equivalence predicate that accepts two keys and is true iff they are the same key If this predicate is true of two keys then key hash must return the same value for each of these keys given the same modulus in both cases make entry A procedure that accepts a key and a datum as
292. f not object procedure false object procedure These procedures return t if object is false otherwise they return f In other words they invert boolean values These two procedures have identical semantics their names are different to give different connotations to the test not t gt f not 3 gt Hf not list 3 gt f not df gt dit boolean objl obj2 procedure This predicate is true iff obj1 and obj2 are either both true or both false 128 MIT Scheme Reference boolean and object procedure This procedure returns stt if none of its arguments are f Otherwise it returns f boolean or object procedure This procedure returns f if all of its arguments are f Otherwise it returns stt 10 2 Symbols MIT Scheme provides two types of symbols interned and uninterned Interned symbols are far more common than uninterned symbols and there are more ways to create them Interned symbols have an external representation that is recognized by the procedure read uninterned symbols do not Interned symbols have an extremely useful property any two interned symbols whose names are the same in the sense of string are the same object i e they are eq to one another The term interned refers to the process of interning by which this is accomplished Uninterned symbols do not share this property The names of interned symbols are not distinguished by their alphabetic case Because of this MIT Scheme con
293. f list append list procedure Returns a list consisting of the elements of the first list followed by the elements of the other lists append x y gt xy append a b c d gt abc d append a b c gt a b c gt Q0 append The resulting list is always newly allocated except that it shares structure with the last list argument The last argument may actually be any object an improper list results if the last argument is not a proper list append a b c d gt abc d append a gt a append list procedure Returns a list that is the argument lists concatenated together The arguments are changed rather than copied Compare this with append which copies arguments rather than destroying them For example define x a b c define y d e f define z g h append x y z gt abcdef gh x gt abcdef gh y gt def gh Zz gt gh last pair list procedure Returns the last pair in list which may be an improper list last pair could have been defined this way define last pair lambda x if pair cdr x last pair cdr x x 112 MIT Scheme Reference except last pair list procedure except last pair list procedure These procedures remove the last pair from list List may be an improper list except that it must consist of at least one pair except last pair returns a newly allocated copy of list that omits the
294. file systems directory Corresponds to the directory concept in many host file systems the name of a group of related files typically those belonging to a single user or project This component is always used for all file systems name The name of a group of files that can be thought of as conceptually the same file This component is always used for all file systems type Corresponds to the filetype or extension concept in many host file systems This says what kind of file this is Files with the same name but different type are usually related in some specific way such as one being a source file another the compiled form of that source and a third the listing of error messages from the compiler This component is currently used for all file systems and is formed by taking the characters that follow the last dot in the namestring version Corresponds to the version number concept in many host file systems Typ ically this is a number that is incremented every time the file is modified This component is currently unused for all file systems Note that a pathname is not necessarily the name of a specific file Rather it is a specification possibly only a partial specification of how to access a file A pathname need not correspond to any file that actually exists and more than one pathname can refer to the same file For example the pathname with a version of newest may refer to the same file as a pathna
295. for large aggregates e In addition to the usual element level operations like insertion deletion and lookup there is a full complement of collection level operations like set intersection set union and subset test all of which are implemented with good orders of growth in time and space This makes weight balanced trees ideal for rapid prototyping of functionally derived specifications e An element in a tree may be indexed by its position under the ordering of the keys and the ordinal position of an element may be determined both with reasonable efficiency e Operations to find and remove minimum element make weight balanced trees simple to use for priority queues e The implementation is functional rather than imperative This means that operations like inserting an association in a tree do not destroy the old tree in much the same way that 1 x modifies neither the constant 1 nor the value bound to x The trees are referentially transparent thus the programmer need not worry about copying the trees Referential transparency allows space efficiency to be achieved by sharing subtrees These features make weight balanced trees suitable for a wide range of applications especially those that require large numbers of sets or discrete maps Applications that have a few global databases and or concentrate on element level operations like insertion and lookup are probably better off using hash tables or red black trees The size of a
296. form pattern template The pattern in a syntax rule is a list pattern that begins with the keyword for the macro A pattern is either an identifier a constant or one of the following pattern pattern pattern pattern pattern pattern ellipsis and a template is either an identifier a constant or one of the following element element element template where an element is a template optionally followed by an ellipsis and an ellipsis is the identifier which cannot be used as an identifier in either a template or a pattern An instance of syntax rules produces a new macro transformer by specifying a sequence of hygienic rewrite rules A use of a macro whose keyword is associated with a transformer specified by syntax rules is matched against the patterns contained in the syntax rules beginning with the leftmost syntax rule When a match is found the macro use is transcribed hygienically according to the template An identifier that appears in the pattern of a syntax rule is a pattern variable unless it is the keyword that begins the pattern is listed in literals or is the identifier Pattern variables match arbitrary input elements and are used to refer to elements of the input in the template It is an error for the same pattern variable to appear more than once in a pattern The keyword at the beginning of the pattern in a syntax rule is not involved in the matching and is no
297. from the supported range for inexact numbers of that type For example an implementation that uses flonums to represent all its inexact real numbers may support a practically unbounded range of exact integers and rationals while limiting the range of inexact reals and therefore the range of inexact integers and rationals to the dynamic range of the flonum format Furthermore the gaps between the representable inexact integers and rationals are likely to be very large in such an implementation as the limits of this range are approached An implementation of Scheme must support exact integers throughout the range of numbers that may be used for indexes of lists vectors and strings or that may result from computing the length of a list vector or string The length vector length and string length procedures must return an exact integer and it is an error to use anything but an MIT Scheme implements the whole tower of numerical types It has unlimited precision exact integers and exact rationals Flonums are used to implement all inexact reals on machines that support IEEE floating point arithmetic these are double precision floating point numbers Chapter 4 Numbers 59 exact integer as an index Furthermore any integer constant within the index range if expressed by an exact integer syntax will indeed be read as an exact integer regardless of any implementation restrictions that may apply outside this range Finally the procedures li
298. fter the identifier loop has been added capture syntactic environment captures exactly that environment as follows Chapter 2 Special Forms 45 define syntax loop until sc macro transformer lambda exp env let id cadr exp init caddr exp test cadddr exp return cadddr cdr exp step cadddr cddr exp close lambda exp free make syntactic closure env free exp letrec loop capture syntactic environment lambda env lambda id make syntactic closure env if close test list id close return list id Gake syntactic closure env loop close step list id loop close init In this case having captured the desired syntactic environment it is convenient to construct syntactic closures of the identifiers if and the loop and use them in the body of the lambda A common use of capture syntactic environment is to get the transformer envi ronment of a macro transformer sc macro transformer lambda exp env capture syntactic environment lambda transformer env 222222 2 11 3 3 Identifiers This section describes the procedures that create and manipulate identifiers The iden tifier data type extends the syntactic closures facility to be compatible with the high level syntax rules facility As discussed earlier an identifier is either a symbol or an alias An alias is implemented as a syntactic closure whose form is an identifier
299. g Thus the second binding is done in an environment in which the first binding is visible and so on Note that the following are equivalent let Cvariablel initl variable2 init2 variableN initN expression expression 18 MIT Scheme Reference let Cvariablel initl let Cvariable2 init2 let variableN initN expression expression oD An example let x 2 y 3 let x 7 z x y z x gt 70 letrec variable init expression expression special form The variables are bound to fresh locations holding unassigned values the inits are evaluated in the extended environment in some unspecified order each variable is assigned to the result of the corresponding init the expressions are evaluated sequen tially in the extended environment and the value of the last expression is returned Each binding of a variable has the entire letrec expression as its region making it possible to define mutually recursive procedures MIT Scheme allows any of the inits to be omitted in which case the corresponding variables are unassigned letrec even lambda n if zero n t odd n 1 odd lambda n if zero n Hf even n 1 even 88 gt dt One restriction on letrec is very important it shall be possible to evaluated each init without assigning or referring to the value of any variable If this restriction is violated then it is an err
300. g and then invoking a restart or less preferably a continuation that was established at some point prior to the call to signal condition Resignal a condition By doing some processing and calling signal condition with either the same condition or a newly created one In order to support this signal condition runs handler in such a way that a subsequent call to signal condition sees only the handlers that were established prior to this one As an aid to debugging condition handlers Scheme maintains a set of condition types that will cause an interactive breakpoint to occur prior to normal condition signalling That is signal condition creates a new REPL prior to its normal operation when its argument is a condition that is a specialization of any of these types The procedure break on signals establishes this set of condition types ignore errors thunk procedure Executes thunk with a condition handler that intercepts the signalling of any special ization of condition type error including those produced by calls to error and immediately terminates the execution of thunk and returns from the call to ignore errors with the signalled condition as its value If thunk returns normally its value is returned from ignore errors 262 MIT Scheme Reference Notice that ignore errors does not turn off signalling or condition handling Con dition handling takes place in the normal manner but conditions specialized from condition type error
301. g cor eriicsri errnit akitii 86 alphabet 2 x ied Pb cig die Dum pEP Ehei is 85 Alt scene i aurea Fae HARE Pa EE RER E gud 211 213 Bideei irin i eip aia raih deed EA RU 26 127 Angle inertes deni sehdei Ga monka pant a aksi 66 67 append voi seeded gee E e ERR 111 115 append 2 e d eR e nts 111 115 append map 42 249 Rer e RIP PP 115 append map i e cuo e RPG 115 append map c ga et wbeda secu ss 115 append map 2 sedge w ale edad lke 115 apply c E 165 apply cho k xtra 1 22 2422 bee 170 apply hook procedure cole rb ties 170 apply Shook sic edi ede A seeders eed 170 aScii P Cha8r 2 2 seges hse aoe Meta Res 82 ascii range gt char set esses 84 OSIM 23 Lace a Shee ddp Ne tl ee Sate 2 66 e TER 140 association proced re lk es 140 BSS Giese Wanted sis Meri coed doses runi fte 140 BSSY isa ak di saan tate a eee ae 140 Atanuo ig a DRE aay elo dare Radices 66 74 beep ssnciick aati be tite eas etaaee eae 189 BG GU ost od deked Fh eh tpa Y EEEE EEE dnd 26 bind cell co ntents 2 99 cv s 131 bind condition handler 258 259 261 262 bind default condition handler 259 261 262 bit string signed integer 126 bit string gt unsigned integer 126 bit string allocate o scecsosiss 123 bit string and iss cele e d dd uu EES 125 bit string and i ilis sie es dda reds 125 bit string andC s iso EE preps 125 bit string andC osse h
302. g eq restart effector restart procedure Returns the effector encapsulated in restart Normally this procedure is not used since invoke restart and invoke restart interactively capture the most common invocation patterns restart interactor restart procedure Returns the interactor encapsulated in restart This is either a procedure of no argu ments or the object Normally this procedure is not used since invoke restart interactively captures the most common usage Thus restart interactor is most useful as a predicate to determine if restart is intended to be invoked interac tively write restart report restart port procedure Writes a description of restart to port This works by either displaying if it is a string or calling if it is a procedure the reporter that was supplied when the restart was created 16 5 Condition Instances A condition in addition to the information associated with its type usually contains other information that is not shared with other conditions of the same type For example the condition type associated with unbound variable errors does not specify the name of the variable that was unbound The additional information is captured in a condition object also called a condition instance Chapter 16 Error System 269 In addition to information that is specific to a given type of condition such as the variable name for unbound variable conditions every condition instance also contains a c
303. g length string k procedure Alters the length of string to be k and returns an unspecified value K must be less than or equal to the maximum length of string set string length does not change the maximum length of string 6 11 Byte Vectors MIT Scheme implements strings as packed vectors of 8 bit 180 8859 1 bytes Most of the string operations such as string ref coerce these 8 bit codes into character objects However some lower level operations are made available for use vector 8b ref string k procedure Returns character k of string as an ISO 8859 1 code K must be a valid index of string vector 8b ref abcde 2 gt 99 sc vector 8b set string k code procedure Stores code in element k of string and returns an unspecified value K must be a valid index of string and code must be a valid 180 8859 1 code vector 8b fill string start end code procedure Stores code in elements start inclusive to end exclusive of string and returns an unspecified value Code must be a valid 180 8859 1 code vector 8b find next char string start end code procedure vector 8b find next char ci string start end code procedure Returns the index of the first occurrence of code in the given substring returns f if code does not appear The index returned is relative to the entire string not just the substring Code must be a valid ISO 8859 1 code vector 8b find next char ci doesn t distinguish uppercase and lowercase letters vector 8b find pr
304. g relation of the tree type of wt tree The average and worst case times required by this operation are proportional to the logarithm of the size of wt tree 160 MIT Scheme Reference wt tree split gt wt tree bound procedure Returns a new tree containing all and only the associations in wt tree that have a key that is greater than bound in the ordering relation of the tree type of wt tree The average and worst case times required by this operation are proportional to the logarithm of the size of wt tree wt tree union wt tree 1 wt tree 2 procedure Returns a new tree containing all the associations from both trees This operation is asymmetric when both trees have an association for the same key the returned tree associates the datum from wt tree 2 with the key Thus if the trees are viewed as discrete maps then wt tree union computes the map override of wt tree 1 by wt tree 2 If the trees are viewed as sets the result is the set union of the arguments The worst case time required by this operation is proportional to the sum of the sizes of both trees If the minimum key of one tree is greater than the maximum key of the other tree then the worst case time required is proportional to the logarithm of the size of the larger tree wt tree intersection wt tree 1 wt tree 2 procedure Returns a new tree containing all and only those associations from wt tree 1 that have keys appearing as the key of an association in wt tree 2 Thus the associated
305. gers less than the length of the list The first element of a list has index 0 the second has index 1 and so on list ref abc d 2 gt c list ref abc d inexact gt exact round 1 8 gt C list ref list k is equivalent to car list tail list k first list procedure second list procedure third list procedure fourth list procedure fifth list procedure sixth list procedure seventh list procedure eighth list procedure ninth list procedure tenth list procedure Returns the specified element of list It is an error if list is not long enough to contain the specified element for example if the argument to seventh is a list that contains only six elements 7 4 Cutting and Pasting Lists sublist list start end procedure Start and end must be exact integers satisfying O lt start lt end lt length list sublist returns a newly allocated list formed from the elements of list beginning at index start inclusive and ending at end exclusive Chapter 7 Lists 111 list head list k procedure Returns a newly allocated list consisting of the first k elements of list K must not be greater than the length of list We could have defined list head this way define list head list k sublist list O k list tail list k procedure Returns the sublist of list obtained by omitting the first k elements The result if it is not the empty list shares structure with list K must not be greater than the length o
306. ght 0 foo error Illegal datum fold right list 12 3 45 gt 1 GBG 4 0 Fold right has interesting properties because it establishes a homomorphism be tween cons O and procedure initial It can be thought of as replacing the pairs in the spine of the list with procedure and replacing the at the end with initial Many of the classical list processing procedures can be expressed in terms of fold right at least for the simple versions that take a fixed number of arguments define copy list list fold right cons list define append list1 list2 fold right cons list2 list1 define map p list fold right lambda x r cons p x r O list define reverse items fold right lambda x r append r list x items fold left procedure initial list procedure Combines all the elements of list using the binary operation procedure Elements are combined starting with initial and then the elements of list from left to right Whereas fold right is recursive in nature capturing the essence of cdr ing down a list and then computing a result fold left is iterative in nature combining the elements as the list is traversed fold left list 0 1 2 3 4 gt CCQ 1 2 3 4 define length list fold left lambda sum element sum 1 O list define reverse items fold left lambda x y cons y x items there exists list predicate procedure Predicate must be a procedu
307. h an option number RESTART 3 gt Specify a value to use instead of foo RESTART 2 gt Define foo to a given value RESTART 1 gt Return to read eval print level 1 278 MIT Scheme Reference condition type unassigned variable location environment condition type This type is generated when a program attempts to access a variable that is not assigned The location field contains the name of the variable and the environment field contains the environment in which the reference occurred foo Unassigned variable foo To continue call RESTART with an option number RESTART 3 gt Specify a value to use instead of foo RESTART 2 gt Set foo to a given value RESTART 1 gt Return to read eval print level 1 condition type arithmetic error operator operands condition type This is an abstract type It indicates that a numerical operation was unable to com plete because of an arithmetic error For example division by zero The operator field contains the procedure that implements the operation or a symbol naming the procedure and the operands field contains a list of the arguments that were passed to the procedure condition type divide by zero operator operands condition type This type is generated when a program attempts to divide by zero The operator field contains the procedure that implements the failing operation or a symbol naming the procedure and the operands field contains a list of the a
308. h nmi 125 bit string append 52 p err Ee 124 bit string clear ee a inem weedy 124 bat string copy s me Ee ees 123 bit string fill eius n or t doo 126 bit string length 5 ieee sede a Ee 124 bit string Move sei cis sug ee Roe ree isss 126 bit string movee oii sa wade bre kv 125 bit string nOt ii a 4s be deada das AD 125 bit string OF 4 2o as cia teed Reda eae E 125 it string oTl os ose ee ek POP Rae 125 bit string ref sev ERRARE P Ee RE 124 bit string S6t e ns eae Pas peda 124 DAG ASERING KOT sei isda ease bed Adee eb dure 125 bit string xOr iiid od aad easel oe 125 it string Zero eos sed gies eed Smee Tiis 125 bit Stfrihg T i d go eek Pa God VLDE 125 bit estring esd qr RA PRESE pac 124 bit sSubString 2iscosis ue pem aeneis 124 Binding Index bit substring find next set bit 124 bit substring move right 126 bitmap from dib 2 uoc t RR ERR 310 OO 25 oaa teil ad eed ROREM ege EUER 305 boolean and 2 s qr ee pada te eons aide 128 bodL an or bese 2 4 cem I Peer pur 128 boolean 2 aac ERE DR ots eh mnes 127 boolean siere die aus cde le gaia wh dew a api ne wl dnd es 127 bound restart ossuac rer aerem 267 bound restarts i soc gs pear ek e 267 break on signalS irere rsre 259 261 262 buffered input charson input port 200 buffered output charson output port 201 byte ese eed bere reete E Pic red 306 C caaan eei
309. h pointer example page 208 14 11 2 Parser The parser language is a declarative language for specifying a parser procedure A parser procedure is a procedure that accepts a single parser buffer argument and parses some of the input from the buffer If the parse is successful the procedure returns a vector of objects that are the result of the parse and the internal pointer of the parser buffer is advanced past the input that was parsed If the parse fails the procedure returns f and the internal pointer is unchanged This interface is much like that of a matcher procedure except that on success the parser procedure returns a vector of values rather than t The parser special form is the interface between the parser language and Scheme Chapter 14 Input Output 213 parser pexp special form The operand pexp is an expression in the parser language The parser expression expands into Scheme code that implements a parser procedure There are several primitive expressions in the parser language The first two provide a bridge to the matcher language see Section 14 11 1 Matcher page 209 match mexp parser expression The match expression performs a match on the parser buffer The match to be performed is specified by mexp which is an expression in the matcher language If the match is successful the result of the match expression is a vector of one element a string containing that text noise mexp parser expression The noise
310. handler if signal condition returns This is not sufficient to implement the muffle warning protocol however For that pur pose an explicit restart must be provided standard warning hook variable This variable controls the behavior of the procedure standard warning handler and hence warn It is intended to be bound with fluid let and is normally sf It may be changed to a procedure of one argument and will then be invoked with standard warning hook rebound to f by standard warning handler in lieu of writing the warning message It is passed one argument the condition being signalled 16 4 Restarts The Scheme error system provides a mechanism known as restarts that helps coordinate condition signalling code with condition handling code module of code that detects and signals conditions can provide procedures using with simple restart or with restart to be invoked by handlers that wish to continue abort or restart the computation These procedures called restart effectors are encapsulated in restart objects When a condition object is created it contains a set of restart objects each of which contains a restart effector Condition handlers can inspect the condition they are han dling using find restart to find restarts by name or condition restarts to see the entire set and they can invoke the associated effectors using invoke restart or invoke restart interactively Effectors can take arguments and these may be comput
311. hapter Additional procedures let you open ports to strings Many input procedures such as read char and read read data from the current input port by default or from a port that you specify The current input port is initially console i o port but Scheme provides procedures that let you change the current input port to be a file or string Similarly many output procedures such as write char and display write data to the current output port by default or to a port that you specify The current output port is initially console i o port but Scheme provides procedures that let you change the current output port to be a file or string All ports read or write only 180 8859 1 characters Every port is either an input port an output port or both The following predicates distinguish all of the possible cases port object procedure Returns stt if object is a port otherwise returns f input port object procedure Returns t if object is an input port otherwise returns f Any object satisfying this predicate also satisfies port output port object procedure Returns t if object is an output port otherwise returns 4f Any object satisfying this predicate also satisfies port i o port object procedure Returns stt if object is both an input port and an output port otherwise returns f Any object satisfying this predicate also satisfies port input port and output port 180 MIT Scheme Reference guarantee port objec
312. har2 procedure char gt charl char2 procedure char lt charl char2 procedure char charl char2 procedure char ci charl char2 procedure char ci lt charl char2 procedure char ci gt charl char2 procedure char ci lt charl char2 procedure char ci gt charl char2 procedure Returns t if the specified characters are have the appropriate order relationship to one another otherwise returns 4f The ci procedures don t distinguish uppercase and lowercase letters Character ordering follows these rules e The digits are in order for example char 0 4X9 returns stt e The uppercase characters are in order for example char lt A B returns t e The lowercase characters are in order for example char a 4 Nb returns t In addition MIT Scheme orders those characters that satisfy char standard the same way that IS0 8859 1 does Characters are ordered by first comparing their bucky bits part and then their code part In particular characters without bucky bits come before characters with bucky bits 5 3 Miscellaneous Character Operations char object procedure Returns stt if object is a character otherwise returns f char upcase char procedure char downcase char procedure Returns the uppercase or lowercase equivalent of char if char is a letter otherwise returns char These procedures return a character char2 such that char ci char char2 char gt digit char radix procedure If char
313. has independent terminal modes both for input and for output A terminal port in cooked mode provides some standard processing to make the terminal easy to communicate with For example under unix cooked mode on input reads from the terminal a line at a time and provides rubout processing within the line while cooked mode on output might translate linefeeds to carriage return linefeed pairs In general the precise meaning of cooked mode is operating system dependent and furthermore might be customizable by means of operating system utilities The basic idea is that cooked mode does whatever is necessary to make the terminal handle all of the usual user interface conventions for the operating system while keeping the program s interaction with the port as normal as possible A terminal port in raw mode disables all of that processing In raw mode characters are directly read from and written to the device without any translation or interpretation by the operating system On input characters are available as soon as they are typed and are not echoed on the terminal by the operating system In general programs that put ports in raw mode have to know the details of interacting with the terminal In particular raw mode is used for writing programs such as text editors Terminal ports are initially in cooked mode this can be changed at any time with the procedures defined in this section These procedures represent cooked mode by the symbol co
314. havior when continuations are used see Section 2 3 Dynamic Binding page 18 132 MIT Scheme Reference 10 4 Records MIT Scheme provides a record abstraction which is a simple and flexible mechanism for building structures with named components Records can be defined and accessed using the procedures defined in this section A less flexible but more concise way to manipulate records is to use the define structure special form see Section 2 10 Structure Defini tions page 29 make record type type name field names procedure Returns a record type descriptor a value representing a new data type disjoint from all others The type name argument must be a string but is only used for debugging purposes such as the printed representation of a record of the new type The field names argument is a list of symbols naming the fields of a record of the new type It is an error if the list contains any duplicates It is unspecified how record type descriptors are represented record constructor record type field names procedure Returns a procedure for constructing new members of the type represented by record type The returned procedure accepts exactly as many arguments as there are symbols in the given list field names these are used in order as the initial values of those fields in a new record which is returned by the constructor procedure The values of any fields not named in the list of field names are unspecified The field nam
315. he arguments to map but for each calls proce dure for its side effects rather than for its values Unlike map for each is guaranteed to call procedure on the elements of the lists in order from the first element to the last and the value returned by for each is unspecified let v make vector 5 for each lambda i vector set v i i i 0123 4 v gt 0 149 16 7 8 Reduction of Lists reduce procedure initial list procedure Combines all the elements of list using the binary operation procedure For example using one can add up all the elements reduce O list of numbers The argument initial is used only if list is empty in this case initial is the result of the call to reduce If list has a single argument it is returned Otherwise the arguments are reduced in a left associative fashion For example reduce 0 1 2 3 4 gt 10 reduce 0 1 2 gt 3 reduce 0 1 1 reduce 0 gt 0 reduce 0 foo gt foo reduce list 1 2 3 4 gt 1 2 3 4 116 MIT Scheme Reference reduce right procedure initial list procedure Like reduce except that it is right associative reduce right list O 1 2 3 4 gt 1 2 3 4 fold right procedure initial list procedure Combines all of the elements of list using the binary operation procedure Unlike reduce and reduce right initial is always used fold right 0 1 2 3 4 10 fold ri
316. he initial environment the one in which 8 MIT Scheme Reference g was created with a binding of y to 2 In this extended environment y is 2 and x is 1 In a dynamically bound Lisp the call to g would extend the environment in effect during the call to in which x is bound to 5 by the call to and the answer would be 7 Note that with static scoping you can tell what binding a variable reference refers to just from looking at the text of the program the referenced binding cannot depend on how the program is used That is the nesting of environments their parent child relationship corresponds to the nesting of binding expressions in program text Because of this connection to the text of the program static scoping is also called lexical scoping For each place where a variable is bound in a program there is a corresponding region of the program text within which the binding is effective For example the region of a binding established by a lambda expression is the entire body of the lambda expression The documentation of each binding expression explains what the region of the bindings it makes is A use of a variable that is a reference to or assignment of a variable refers to the innermost binding of that variable whose region contains the variable use If there is no such region the use refers to the binding of the variable in the global environment which is an ancestor of all other environments and can be thought of as a reg
317. he list of Cover Texts in the Modified Version Only one passage of Front Cover Text and one of Back Cover Text may be added by or through arrangements made by any one entity If the Document already includes a cover text for the same cover previously added by you or by arrangement made by the same entity you are acting on behalf of you may not add another but you may replace the old one on explicit permission from the previous publisher that added the old one The author s and publisher s of the Document do not by this License give permission to use their names for publicity for or to assert or imply endorsement of any Modified Version COMBINING DOCUMENTS GNU Free Documentation License 317 You may combine the Document with other documents released under this License under the terms defined in section 4 above for modified versions provided that you include in the combination all of the Invariant Sections of all of the original documents unmodified and list them all as Invariant Sections of your combined work in its license notice The combined work need only contain one copy of this License and multiple identical Invariant Sections may be replaced with a single copy If there are multiple Invariant Sections with the same name but different contents make the title of each such section unique by adding at the end of it in parentheses the name of the original author or publisher of that section if known or else a unique number Ma
318. he number of associations in the table hash table datum list hash table procedure Returns a newly allocated list of the datums in hash table Each element of the list corresponds to one of the associations in hash table if the table contains multiple associations with the same datum so will this list The average and worst case times required by this operation are linear in the number of associations in the table hash table for each hash table procedure procedure Procedure must be a procedure of two arguments Invokes procedure once for each association in hash table passing the association s key and datum as arguments in that order Returns an unspecified result Procedure must not modify hash table with one exception it is permitted to call hash table remove to remove the association being processed The following procedure is an alternate form of hash table get that is useful in some situations Usually hash table get is preferable because it is faster hash table lookup hash table key if found if not found procedure If found must be a procedure of one argument and if not found must be a procedure of no arguments If hash table contains an association for key if found is invoked on the datum of the association Otherwise ifnot found is invoked with no arguments In either case the result yielded by the invoked procedure is returned as the result of hash table lookup hash table lookup reduces into the invoked procedure i e cal
319. hics 293 Ill O8 2 EDS aam terit e eo eie 295 17 11 1 05 2 Graphics Type l l laniaeme ker him i pare 295 17 11 2 Color Operations for OS 2 Graphics 296 17 11 3 Window Operations for OS 2 Graphics 297 17 11 4 Event Operations for OS 2 Graphics 298 17 11 5 Miscellaneous Operations for OS 2 Graphics 301 18 Win32 Package Reference 303 ISl OVERVIEW Lese sut o bok eee Og o o s eere ecce 303 18 2 Foreign Function Interface llis esses else 303 18 2 1 Windows Types sseee else esses 304 18 2 2 Windows Foreign Procedures 307 18 2 3 Win32 API names and procedures 308 18 3 Device Independent Bitmap Utilities 309 18 3 1 DIB procedures 0 000 e eee eee ee 310 18 3 2 Other parts of the DIB Utilities implementation TER 312 GNU Free Documentation License 313 ADDENDUM How to use this License for your documents 318 Binding Ind 2 9 RRERRIRR Ta Rex Rs 319 Concept Index 22944 nections Cena do yu aa 335
320. his is equivalent to the s construct rexp not syntax char syntax type procedure Returns a REXP that matches any character not of type syntax type This is equivalent to the S construct rexp sequence rexp procedure Returns a REXP that matches each rexp argument in sequence If no rexp argument is supplied the result matches the null string This is equivalent to concatenating the regular expressions corresponding to each rexp argument rexp alternatives rexp procedure Returns a REXP that matches any of the rexp arguments This is equivalent to con catenating the regular expressions corresponding to each rexp argument separating them by the construct rexp group rexp procedure rexp group is like rexp sequence except that the result is marked as a match group This is equivalent to the NC V construct The next three procedures in principal accept a single REXP argument For convenience they accept multiple arguments which are converted into a single argument by rexp group Note however that if only one REXP argument is supplied and it s very simple no grouping occurs rexp rexp procedure Returns a REXP that matches zero or more instances of the pattern matched by the rexp arguments This is equivalent to the construct rexp rexp procedure Returns a REXP that matches one or more instances of the pattern matched by the rexp arguments This is equivalent to the construct Chapter 6 Strings
321. hout the domain suffix get host name aarau 256 MIT Scheme Reference os hostname procedure Returns the canonical internet host name of the computer that MIT Scheme is running on So in contrast to the example for get host name os hostname gt aarau ai mit edu allocate host address procedure Allocates and returns an IP address object This is just a string of a fixed length current 4 bytes into which an IP address may be stored This procedure is used to generate an appropriate argument to be passed to tcp server connection accept allocate host address Xe 034 241 host address any procedure Return an IP address object that specifies any host This object is useful only when passed as the address argument to open tcp server socket host address any 000 000 000 000 host address loopback procedure Return an IP address object that specifies the local loopback network interface The loopback interface is a software network interface that can be used only for commu nicating between processes on the same computer This address object is useful only when passed as the address argument to open tcp server socket host address loopback 177 000 000 001 Chapter 16 Error System 257 16 Error System The MIT Scheme error system provides a uniform mechanism for the signalling of errors and other exceptional conditions The simplest and most generally useful procedures in the error system are er
322. iated with the smallest key in rb tree or default if the tree is empty rb tree min pair rb tree procedure Finds the smallest key in rb tree and returns a pair containing that key and its associated datum If the tree is empty returns f rb tree max rb tree default procedure Returns the largest key in rb tree or default if the tree is empty 156 MIT Scheme Reference rb tree max datum rb tree default procedure Returns the datum associated with the largest key in rb tree or default if the tree is empty rb tree max pair rb tree procedure Finds the largest key in rb tree and returns a pair containing that key and its asso ciated datum If the tree is empty returns f rb tree delete min rb tree default procedure rb tree delete min datum rb tree default procedure rb tree delete min pair rb tree procedure rb tree delete max rb tree default procedure rb tree delete max datum rb tree default procedure rb tree delete max pair rb tree procedure These operations are exactly like the accessors above in that they return information associated with the smallest or largest key except that they simultaneously delete that key 11 7 Weight Balanced Trees Balanced binary trees are a useful data structure for maintaining large sets of ordered objects or sets of associations whose keys are ordered MIT Scheme has a comprehensive implementation of weight balanced binary trees which has several advantages over the other data structures
323. ibes a class of errors relating to program control flow condition type no such restart name condition type This type indicates that a named restart was not active when it was expected to be Conditions of this type are signalled by several procedures that look for particular named restarts for example muffle warning The name field contains the name that was being searched for muffle warning The restart named muffle warning is not bound To continue call RESTART with an option number RESTART 1 gt Return to read eval print level 1 error no such restart name procedure This procedure signals a condition of type condition type no such restart The name field of the condition is filled in from the corresponding argument to the pro cedure condition type not loading condition type A condition of this type is generated when the procedure current load pathname is called from somewhere other than inside a file being loaded 280 MIT Scheme Reference current load pathname No file being loaded To continue call RESTART with an option number RESTART 1 gt Return to read eval print level 1 condition type warning condition type This is an abstract type All warnings should inherit from this type Warnings are a class of conditions that are usually handled by informing the user of the condition and proceeding the computation normally condition type simple warning message irritants condition type This is the con
324. ices for bit string 1 and start2 must be a valid index for bit string 2 The length of the source substring must not exceed the length of bit string 2 minus the index start2 The bits are copied starting from the MSB and working towards the LSB the direction of copying only matters when bit string 1 and bit string 2 are eqv 9 6 Integer Conversions of Bit Strings unsigned integer gt bit string length integer procedure Both length and integer must be exact non negative integers Converts integer into a newly allocated bit string of length bits Signals an error of type condition type bad range argument if integer is too large to be represented in length bits signed integer bit string length integer procedure Length must be an exact non negative integer and integer may be any exact inte ger Converts integer into a newly allocated bit string of length bits using two s complement encoding for negative numbers Signals an error of type condition type bad range argument if integer is too large to be represented in length bits bit string gt unsigned integer bit string procedure bit string gt signed integer bit string procedure Converts bit string into an exact integer bit string gt signed integer regards bit string as a two s complement representation of a signed integer and produces an integer of like sign and absolute value bit string gt unsigned integer regards bit string as an unsigned quantity and converts to an integer accord
325. ified value If rb tree already has an association for key that association is replaced The average and worst case times required by this operation are proportional to the logarithm of the number of assocations in rb tree 154 MIT Scheme Reference rb tree lookup rb tree key default procedure Returns the datum associated with key in rb tree If rb tree doesn t contain an association for key default is returned The average and worst case times required by this operation are proportional to the logarithm of the number of assocations in rb tree rb tree delete rb tree key procedure If rb tree contains an association for key removes it Returns an unspecified value The average and worst case times required by this operation are proportional to the logarithm of the number of assocations in rb tree rb tree gt alist rb tree procedure Returns the contents of rb tree as a newly allocated alist Each element of the alist is a pair key datum where key is one of the keys of rb tree and datum is its associated datum The alist is sorted by key according to the key lt argument used to construct rb tree The time required by this operation is proportional to the number of associations in the tree rb tree key list rb tree procedure Returns a newly allocated list of the keys in rb tree The list is sorted by key according to the key argument used to construct rb tree The time required by this operation is proportional to the number of ass
326. ill denote the same thing as the original identifier unless the transformation procedure that renamed the identifier placed an occurrence of it in a binding position The renaming procedure acts as a mathematical function in the sense that the identi fiers obtained from any two calls with the same argument will be the same in the sense of eqv It is an error if the renaming procedure is called after the transformation procedure has returned The third argument to a transformation procedure is a comparison predicate that takes the representations of two identifiers as its arguments and returns true if and only if they denote the same thing in the syntactic environment that will be used to expand the transformed macro application For example the transformation proce dure for a simplified version of the cond macro can be written as lambda exp rename compare let clauses cdr exp if null clauses rename quote unspecified let first car clauses rest cdr clauses test car first cond and identifier test compare test rename else rename begin cdr first else rename if test rename begin cdr first cond rest Chapter 2 Special Forms 49 In this example the identifier else is renamed before being passed to the comparison predicate so the comparison will be true if and only if the test expression is an identifier that denotes the same thing in the synt
327. indicates that symbol is bound and its value is object 174 MIT Scheme Reference environment reference type environment symbol procedure Returns a symbol describing the reference type of symbol in environment or one of its ancestor environments The result is one of the following normal means symbol is a variable binding with a normal value unassigned means symbol is a variable binding with no value macro means symbol is a keyword binding unbound means symbol has no associated binding environment bound environment symbol procedure Returns t if symbol is bound in environment or one of its ancestor environments otherwise returns f This is equivalent to not eq unbound environment reference type environment symbol environment assigned environment symbol procedure Returns stt if symbol is bound in environment or one of its ancestor environments and has a normal value Returns f if it is bound but unassigned Signals an error if it is unbound or is bound to a keyword environment lookup environment symbol procedure Symbol must be bound to a normal value in environment or one of its ancestor environments Returns the value to which it is bound Signals an error if unbound unassigned or a keyword environment lookup macro environment symbol procedure If symbol is a keyword binding in environment or one of its ancestor environments returns the value of the binding Otherwise returns 4f Does not signal any erro
328. ine the string name to be the color specified by spec Spec may be any acceptable color specification Note that the color names defined this way are available to any Win32 graphics device and the names do not have to be defined for each device Color names defined by this interface may also be used when setting the colors of the Scheme console window or the colors of Edwin editor windows find color name operation on win32 graphics device Looks up a color previously defined by define color This returns the color in its most efficient form for operations set foreground color or set background color draw ellipse left top right bottom operation on win32 graphics device Draw an ellipse Left top right and bottom indicate the coordinates of the bounding rectangle of the ellipse Circles are merely ellipses with equal width and height Note that the bounding rectangle has horizontal and vertical sides Ellipses with rotated axes cannot be drawn The rectangle applies to the center of the line used to draw the ellipse if the line width has been set to greater than 1 then the ellipse will spill outside the bounding rectange by half of the line width fill polygon points operation on win32 graphics device Draws a filled polygon using the current foreground color Points is a vector of real numbers The numbers are in the order x1 yl x2 y2 xn yn For example graphics operation device fill polygon 0 O O 1 1 0 draws a solid triangular reg
329. ine variable t define access variable variable variable gt dt let variable f access variable gt dtt variable gt dit access variable returns t in this case because it is defined in an environment with variable bound to stt fluid let on the other hand temporarily reuses an existing variable variable gt dit fluid let variable f reuses old binding access variable gt df variable gt idit The extent of a dynamic binding is defined to be the time period during which the variable contains the new value Normally this time period begins when the body is entered and ends when it is exited on a sequential machine it is normally a contiguous time period However because Scheme has first class continuations it is possible to leave the body and then reenter it as many times as desired In this situation the extent becomes non contiguous When the body is exited by invoking a continuation the new value is saved and the variable is set to the old value Then if the body is reentered by invoking a continuation the old value is saved and the variable is set to the new value In addition side effects to the variable that occur both inside and outside of body are preserved even if continuations are used to jump in and out of body repeatedly Here is a complicated example that shows the interaction between dynamic binding and continuations 20 MIT Scheme Reference define complicated dynamic bi
330. ing char procedure substring find previous char string start end char procedure string find previous char ci string char procedure substring find previous char ci string start end char procedure Returns the index of the last occurrence of char in the string substring returns f if char doesn t appear in the string For the substring procedures the index returned is relative to the entire string not just the substring The ci procedures don t distinguish uppercase and lowercase letters string find previous char in set string char set procedure substring find previous char in set string start end char set procedure Returns the index of the last character in the string substring that is also in char set For the substring procedure the index returned is relative to the entire string not just the substring 6 7 Matching Strings string match forward stringl string2 procedure substring match forward string start end string2 start end procedure string match forward ci string string2 procedure substring match forward ci string start end string2 start end procedure Compares the two strings substrings starting from the beginning and returns the number of characters that are the same If the two strings substrings start dif ferently returns 0 The ci procedures don t distinguish uppercase and lowercase letters string match forward mirror micro 2 matches mi string match forward a b 0 no match 96 MIT Sch
331. ing message resulting from the condition would be pre sented to the user The procedure warn establishes a muffle warning restart for this purpose If there is no restart named muffle warning this procedure signals an error of type condition type no such restart retry restarts procedure Retry the current computation using the restart named retry The corresponding effector takes no arguments and simply retries the same computation that triggered the condition The condition may reoccur of course if the root cause has not been eliminated The code that signals a file does not exist error can be expected to supply a retry restart The restart would be invoked after first creating the missing file since the computation is then likely to succeed if it is simply retried store value new value restarts procedure Retry the current computation using the restart named store value after first storing new value The corresponding effector takes one argument new value and stores it away in a restart dependent location then retries the same computation that triggered the condition The condition may reoccur of course if the root cause has not been eliminated The code that signals an unassigned variable error can be expected to supply a store value restart this would store the value in the variable and continue the computation use value new value restarts procedure Retry the current computation using the restart named use va
332. ing stream cdr k times K must be an exact non negative integer strictly less than the length of stream Chapter 10 Miscellaneous Datatypes 137 stream map procedure stream stream procedure Returns a newly allocated stream each element being the result of invoking procedure with the corresponding elements of the streams as its arguments 10 7 Weak Pairs Weak pairs are a mechanism for building data structures that point at objects without protecting them from garbage collection The car of a weak pair holds its pointer weakly while the cdr holds its pointer in the normal way If the object in the car of a weak pair is not held normally by any other data structure it will be garbage collected Note weak pairs are not pairs that is they do not satisfy the predicate pair weak pair object procedure Returns stt if object is a weak pair otherwise returns f weak cons car cdr procedure Allocates and returns a new weak pair with components car and cdr The car component is held weakly weak pair car weak pair procedure This predicate returns f if the car of weak pair has been garbage collected otherwise returns t In other words it is true if weak pair has a valid car component weak car weak pair procedure Returns the car component of weak pair If the car component has been garbage collected this operation returns amp f but it can also return f if that is the value that was stored in the car Normally weak pair c
333. ingly Chapter 10 Miscellaneous Datatypes 127 10 Miscellaneous Datatypes 10 1 Booleans The boolean objects are true and false The boolean constant true is written as t and the boolean constant false is written as The primary use for boolean objects is in the conditional expressions if cond and and or the behavior of these expressions is determined by whether objects are true or false These expressions count only f as false They count everything else including t pairs symbols numbers strings vectors and procedures as true but see Section 1 2 5 True and False page 8 Programmers accustomed to other dialects of Lisp should note that Scheme distinguishes f and the empty list from the symbol nil Similarly t is distinguished from the symbol t In fact the boolean objects and the empty list are not symbols at all Boolean constants evaluate to themselves so you don t need to quote them t gt dit f gt df Hf gt df t Unbound variable false variable true variable These variables are bound to the objects f and t respectively The compiler given the usual integrations declaration replaces references to these variables with their respective values Note that the symbol true is not equivalent to t and the symbol false is not equivalent to f boolean object procedure Returns t if object is either t or otherwise returns f boolean f gt t boolean 0 gt
334. inning of a line If output port is not such a port this procedure is identical to newline In either case fresh line performs discretionary output flushing and returns an unspecified value write line object output port procedure Like write except that it writes an end of line to output port after writing object s representation This procedure performs discretionary output flushing and returns an unspecified value flush output output port procedure If output port is buffered this causes the contents of its buffer to be written to the output device Otherwise it has no effect Returns an unspecified value beep output port procedure Performs a beep operation on output port performs discretionary output flushing and returns an unspecified value On the console port this usually causes the console bell to beep but more sophisticated interactive ports may take other actions such as flashing the screen On most output ports e g file and string output ports this does nothing clear output port procedure Clears the screen of output port performs discretionary output flushing and re turns an unspecified value On a terminal or window this has a well defined effect On other output ports e g file and string output ports this does nothing 4 write is intended for producing machine readable output and display is for producing human readable output 190 MIT Scheme Reference pp object output port as co
335. intained These aspects are all encoded as procedures that either check for validity or convert between representations Thus a foreign type is not a declarative type so much as a procedural description of how to pass the type The underlying foreign procedure call mechanism can pass integers and vector like Scheme objects and returns integer values All other objects must be translated into integers or some other basic type and must be recovered from integers The aspects are check A predicate that returns t if the argument is of an acceptable Scheme type otherwise returns The check procedure is used for type checking convert A procedure of one argument which returns a Scheme object of one of the basic types It is used to convert an object into a simpler object that will eventually be converted into a C object T he legal simpler objects are integers and strings return convert A procedure of one argument that given an integer returns a Scheme object of a type satisfying check Its purpose is to convert the result returned by the foreign procedure into a Scheme value revert Some C procedures modify one or more of their arguments These arguments are passed by reference i e as a pointer to their address Since a Scheme object might have a different memory layout and storage conventions it must be passed by copy in and copy out rather than by reference Revert is a procedure of two parameters the original object passed and
336. inted starting with the most significant bit highest index Note that the external representation of bit strings uses a bit ordering that is the reverse of the representation for bit strings in Common Lisp It is likely that MIT Scheme s repre sentation will be changed in the future to be compatible with Common Lisp For the time being this representation should be considered a convenience for viewing bit strings rather than a means of entering them as data 11111 1010 00000000 x All of the bit string procedures are MIT Scheme extensions 9 1 Construction of Bit Strings make bit string k initialization procedure Returns a newly allocated bit string of length k If initialization is f the bit string is filled with 0 bits otherwise the bit string is filled with 1 bits make bit string 7 f 0000000 bit string allocate k procedure Returns a newly allocated bit string of length k but does not initialize it bit string copy bit string procedure Returns a newly allocated copy of bit string 124 MIT Scheme Reference 9 2 Selecting Bit String Components bit string object procedure Returns t if object is a bit string otherwise returns amp f bit string length bit string procedure Returns the length of bit string bit string ref bit string k procedure Returns t if the kth bit is 1 otherwise returns f K must be a valid index of bit string bit string set bit string k procedure Sets the kth bit in
337. interaction i o port binds the interaction 1 O port set current input port input port procedure set current output port output port procedure set notification output port output port procedure set trace output port output port procedure set interaction i o port i o port procedure Each of these procedures alters the binding of one of the standard ports and returns an unspecified value The binding that is modified corresponds to the name of the procedure console i o port variable console i o port is an I O port that communicates with the console Under unix the console is the controlling terminal of the Scheme process Under Windows and OS 2 the console is the window that is created when Scheme starts up This variable is rarely used instead programs should use one of the standard ports defined above This variable should not be modified close port port procedure Closes port and returns an unspecified value If port is a file port the file is closed close input port port procedure Closes port and returns an unspecified value Port must be an input port or an 1 O port if it is an I O port then only the input side of the port is closed close output port port procedure Closes port and returns an unspecified value Port must be an output port or an 1 0 port if it is an I O port then only the output side of the port is closed 14 2 File Ports Before Scheme can access a file for reading or writing it is necess
338. ion 14 11 3 Parser language Macros page 215 We will start with the primitive expressions char expression matcher expression char ci expression matcher expression not char expression matcher expression not char ci expression matcher expression These expressions match a given character In each case the expression operand is a Scheme expression that must evaluate to a character at run time The ci expressions do case insensitive matching The not expressions match any character other than the given one string expression matcher expression string ci expression matcher expression These expressions match a given string The expression operand is a Scheme ex pression that must evaluate to a string at run time The string ci expression does case insensitive matching char set expression matcher expression These expressions match a single character that is a member of a given character set The expression operand is a Scheme expression that must evaluate to a character set at run time alphabet expression matcher expression These expressions match a single character that is a member of a given Unicode alphabet see Section 5 7 Unicode page 84 The expression operand is a Scheme expression that must evaluate to an alphabet at run time end of input matcher expression The end of input expression is successful only when there are no more characters available to be matched discard matched matcher expression The discard
339. ion between the points 0 0 0 1 and 1 0 load bitmap pathname operation on win32 graphics device The graphics device contents and size are initialized from the windows bitmap file specified by pathname If no file type is supplied then a BMP extension is added If a clip rectangle is in effect when this procedure is called it is necessary to redefine the clip rectangle afterwards save bitmap pathname operation on win32 graphics device The graphics device contents are saved as a bitmap to the file specified by pathname If no file type is supplied then a BMP extension is added The saved bitmap may be incorporated into documents or printed Chapter 17 Graphics 295 move window x y operation on win32 graphics device The graphics device window is moved to the screen position specified by x and y resize window width height operation on win32 graphics device The graphics device window is resized to the specified width and height in device coordinates pixels If a clip rectangle is in effect when this procedure is called it is necessary to redefine the clip rectangle afterwards set line width width operation on win32 graphics device This operation sets the line width for future drawing of lines points and ellipses It does not affect existing lines and has no effect on filled polygons The line width is specified in device units The default and initial value of this parameter is 1 pixel set window name name operation on wi
340. ion in which all your programs are contained 1 2 5 True and False In Scheme the boolean values true and false are denoted by stt and f However any Scheme value can be treated as a boolean for the purpose of a conditional test This manual uses the word true to refer to any Scheme value that counts as true and the word false to refer to any Scheme value that counts as false In conditional tests all values count as true except for f which counts as false see Section 2 7 Conditionals page 24 Implementation note In MIT Scheme f and the empty list are the same object and the printed representation of f is always As this contradicts the Scheme standard MIT Scheme will be changed to make f and the empty list different objects 1 2 6 External Representations An important concept in Scheme is that of the external representation of an object as a sequence of characters For example an external representation of the integer 28 is the sequence of characters 28 and an external representation of a list consisting of the integers 8 and 13 is the sequence of characters 8 13 The external representation of an object is not necessarily unique The integer 28 also has representations e28 000 and x1c and the list in the previous paragraph also has the representations 08 13 and 8 13 DP Many objects have standard external representations but some such as procedures and circular
341. irst by concentrating all of the information about a specific class of condition in a single place and second by specifying an inheritance relationship between types This inheritance relationship forms the taxonomic structure of the condition hierarchy see Section 16 7 Taxonomy page 272 The following procedures consititute the abstraction for condition types make condition type name generalization field names reporter procedure Creates and returns a new condition type that is a specialization of generalization if it is a condition type or is the root of a new tree of condition types if generalization is For debugging purposes the condition type has a name and instances of this type contain storage for the fields specified by field names a list of symbols in addition to the fields common to all conditions type continuation and restarts 272 MIT Scheme Reference Reporter is used to produce a description of a particular condition of this type It may be a string describing the condition a procedure of arity two the first argument will be a condition of this type and the second a port that will write the message to the given port or f to specify that the reporter should be taken from the condition type generalization or produce an undocumented condition of type message if generalization is The conventions used to form descriptions are spelled out in Section 16 2 Error Messages page 260 condition typ
342. is amp no constructor is defined argument list may not be specified in this case Otherwise name must be a symbol and a constructor is defined with that symbol as its name If name is a symbol argument list is optionally allowed if it is omitted the constructor accepts one argument for each slot in the structure definition in the same order in which the slots appear in the definition Otherwise argument list must be a lambda list see Section 2 1 Lambda Expressions page 15 and each of the parameters of the lambda list must be the name of a slot in the structure The arguments accepted by the constructor are defined by this lambda list Any slot that is not specified by the lambda list is initialized to the default init as specified above likewise for any slot specified as an optional parameter when the corresponding argument is not supplied If the constructor option is specified the default constructor is not defined Addi tionally the constructor option may be specified multiple times to define multiple constructors with different names and argument lists define structure foo constructor make foo optional a b a 6 read only stt b 9 keyword constructor name structure option This option controls the definition of keyword constructor procedures A keyword constructor is a procedure that accepts arguments that are alternating slot names and values If name is omitted a keyword constructor is defined and the name
343. is a character representing a digit in the given radix returns the corresponding integer value If you specify radix which must be an exact integer between 2 and 36 inclusive the conversion is done in that base otherwise it is done in base 10 If char doesn t represent a digit in base radix char digit returns f Note that this procedure is insensitive to the alphabetic case of char 80 MIT Scheme Reference char gt digit 8 gt 8 char gt digit e 16 gt 14 char gt digit e gt f digit gt char digit radix Returns a character that represents digit in the radix given by radix Radix must be an exact integer between 2 and 36 inclusive and defaults to 10 Digit which must be an exact non negative integer should be less than radix if digit is greater than or equal to radix digit gt char returns f digit gt char 8 digit gt char 14 16 gt E procedure gt 8 5 4 Internal Representation of Characters An MIT Scheme character consists of a code part and a bucky bits part The MIT Scheme set of characters can represent more characters than ASCII can it includes characters with Super Hyper and Top bucky bits as well as Control and Meta Every ASCII character corresponds to some MIT Scheme character but not vice versa MIT Scheme uses a 16 bit character code with 5 bucky bits Normally Scheme uses the least significant 8 bits of the character code to contain the ISO 8859 1 represen
344. is killed or suspended then one of the following errors will be signalled condition type subprocess signalled subprocess reason condition type This condition type is a subtype of condition type subprocess abnormal termination It is signalled when the subprocess is killed Subprocess is an object that represents the subprocess involved The internals of this object can be accessed but the interface is not documented at this time see the source code for details Reason is interesting only on unix systems where it is the signal that killed the process On other systems it has a fixed value that conveys no useful information condition type subprocess stopped subprocess reason condition type This condition type is a subtype of condition type subprocess abnormal termination It is signalled when the subprocess is stopped or suspended Subprocess is an object that represents the subprocess involved The internals of this object can be accessed but the interface is not documented at this time see the source code for details Reason is interesting only on unix systems where it is the signal that stopped the process On other systems it has a fixed value that conveys no useful information condition type subprocess abnormal termination condition type subprocess reason This condition type is a subtype of condition type error This is an abstract type that is never signalled It is provided so that condition handlers can be bound to it 15
345. iscourages programmers from making code depend on the lack of a file hierarchy A string which is a literal component or the symbol wild meaningful only when used in conjunction with the directory reader A string which is a literal component or the symbol wild meaningful only when used in conjunction with the directory reader An exact positive integer which is a literal component the symbol newest which means to choose the largest available version number for that file the symbol oldest which means to choose the smallest version number or the sym bol wild meaningful only when used in conjunction with the directory reader In the future some other possible values may be added e g installed Note that currently no file systems support version numbers thus this component is not used and should be specified as f Returns a pathname object whose components are the respective arguments Each argument must satisfy the restrictions for the corresponding component which were outlined above make pathname f Hf absolute usr morris foo scm 8f pathname 67 usr morris foo scm procedure pathname host pathname procedure pathname device pathname procedure pathname directory pathname procedure pathname name pathname procedure pathname type pathname procedure pathname version pathname procedure Returns a particular component of pathname define x gt pathname usr morris foo scm pathname host x
346. istically related to the number of associations However it is possible to place bounds on the physical size and from this to estimate the amount of space used by the table define hash table space bounds count rehash size rehash threshold let tf 1 rehash threshold values if exact integer rehash size count 4 tf tf rehash size rehash size count 4 tf rehash size rehash size count 4 tf What this formula shows is that for a normal rehash size that is not an exact integer the amount of space used by the hash table is proportional to the number of associations in the table The constant of proportionality varies statistically with the low bound being 4 1 rehash threshold rehash size rehash size and the high bound being 4 1 rehash threshold which for the default values of these parameters are 4 25 and 5 respectively Reducing the rehash size will tighten these bounds but increases the amount of time spent resizing so you can see that the rehash size gives some control over the time space tradeoff of the table The programmer can control the size of a hash table by means of three parameters e Each table s initial size may be specified when the table is created e Each table has a rehash size that specifies how the size of the table is changed when it is necessary to grow or shrink the table e Each table has a rehash threshold that specifies
347. it destructively modifies list Because the result may not be eqv to list it is desirable to do something like set x reverse x Sort sequence procedure procedure merge sort sequence procedure procedure quick sort sequence procedure procedure Sequence must be either a list or a vector Procedure must be a procedure of two arguments that defines a total ordering on the elements of sequence In other words if x and y are two distinct elements of sequence then it must be the case that and procedure x y procedure y x gt Hf If sequence is a list vector sort returns a newly allocated list vector whose ele ments are those of sequence except that they are rearranged to be sorted in the order defined by procedure So for example if the elements of sequence are numbers and procedure is then the resulting elements are sorted in monotonically nondecreasing order Likewise if procedure is gt the resulting elements are sorted in monotonically nonincreasing order To be precise if x and y are any two adjacent elements in the result where x precedes y it is the case that procedure y x gt Hf 118 MIT Scheme Reference Two sorting algorithms are implemented merge sort and quick sort The proce dure sort is an alias for merge sort See also the definition of sort Chapter 8 Vectors 119 8 Vectors Vectors are heterogenous structures whose elements are indexed by exact non negative integers A vector typi
348. its graphics device x left y bottom procedure x right y top Changes the virtual coordinate limits of graphics device to the given arguments X left y bottom x right and y top must be real numbers Subsequent calls to graphics coordinate limits will return the new limits This operation has no effect on the device s displayed contents Note This operation usually resets the clip rectangle although it is not guaranteed to do so If a clip rectangle is in effect when this procedure is called it is necessary to redefine the clip rectangle afterwards Chapter 17 Graphics 283 17 3 Drawing Graphics The procedures in this section provide the basic drawing capabilities of Scheme s graphics system graphics clear graphics device procedure Clears the display of graphics device Unaffected by the current drawing mode graphics draw point graphics device x y procedure Draws a single point on graphics device at the virtual coordinates given by x and y using the current drawing mode graphics erase point graphics device x y procedure Erases a single point on graphics device at the virtual coordinates given by x and y This procedure is unaffected by the current drawing mode This is equivalent to lambda device x y graphics bind drawing mode device 0 lambda graphics draw point device x y graphics draw line graphics device x start y start x end y end procedure X start y start x end and y end must be real numbers Draws a
349. ject hashing facility is useful in conjunction with hash tables but it may be used for other things as well In particular it is used in the generation of the written representation for many objects see Section 14 7 Custom Output page 193 All of these procedures accept an optional argument called table this table contains the object integer associations If given this argument must be an object hash table as constructed by hash table make see below If not given a default table is used hash object table procedure hash associates an exact non negative integer with object and returns that integer If hash was previously called with object as its argument the integer returned is the same as was returned by the previous call hash guarantees that distinct objects in the sense of eq are associated with distinct integers 152 MIT Scheme Reference unhash k table procedure unhash takes an exact non negative integer k and returns the object associated with that integer If there is no object associated with k or if the object previously associ ated with k has been reclaimed by the garbage collector an error of type condition type bad range argument is signalled In other words if hash previously returned k for some object and that object has not been reclaimed it is the value of the call to unhash An object that is passed to hash as an argument is not protected from being reclaimed by the garbage collector If all other refe
350. ke the same adjustment to the section titles in the list of Invariant Sections in the license notice of the combined work In the combination you must combine any sections entitled History in the various original documents forming one section entitled History likewise combine any sec tions entitled Acknowledgements and any sections entitled Dedications You must delete all sections entitled Endorsements 6 COLLECTIONS OF DOCUMENTS You may make a collection consisting of the Document and other documents released under this License and replace the individual copies of this License in the various documents with a single copy that is included in the collection provided that you follow the rules of this License for verbatim copying of each of the documents in all other respects You may extract a single document from such a collection and distribute it individu ally under this License provided you insert a copy of this License into the extracted document and follow this License in all other respects regarding verbatim copying of that document 7 AGGREGATION WITH INDEPENDENT WORKS A compilation of the Document or its derivatives with other separate and independent documents or works in or on a volume of a storage or distribution medium does not as a whole count as a Modified Version of the Document provided no compilation copyright is claimed for the compilation Such a compilation is called an aggreg
351. l Forms 31 copier name structure option This option controls the definition of a procedure to copy instances of the struc ture This is a procedure of one argument a structure instance that makes a newly allocated copy of the structure and returns it If name is not given the copier is defined and the name of the copier is copy followed by the structure name e g copy foo If name is f the copier is not defined Otherwise name must be a symbol and the copier is defined with that symbol as its name print procedure expression structure option Evaluating expression must yield a procedure of two arguments which is used to print instances of the structure The procedure is an unparser method see Section 14 7 Custom Output page 193 If the structure instances are records this option has the same effect as calling set record type unparser method constructor name argument list structure option This option controls the definition of constructor procedures These constructor pro cedures are called BOA constructors for By Order of Arguments because the arguments to the constructor specify the initial contents the structure s slots by the order in which they are given This is as opposed to keyword constructors which specify the initial contents using keywords and in which the order of arguments is irrelevant If name is not given a constructor is defined with the default name and arguments see above If name
352. l drawing operations perform their output immediately before returning Note graphics disable buffering flushes the output buffer if necessary 286 MIT Scheme Reference graphics flush graphics device procedure Flushes the graphics output buffer for graphics device This operation has no effect for devices that do not support buffering or if buffering is disabled for the device 17 6 Clipping of Graphics Output Scheme provides a rudimentary mechanism for restricting graphics output to a given rectangular subsection of a graphics device By default graphics output that is drawn anywhere within the device s virtual coordinate limits will appear on the device When a clip rectangle is specified however output that would have appeared outside the clip rectangle is not drawn Note that changing the virtual coordinate limits for a device will usually reset the clip rectangle for that device as will any operation that affects the size of the device such as a window resizing operation However programs should not depend on this graphics set clip rectangle graphics device x left y bottom x right procedure y top Specifies the clip rectangle for graphics device in virtual coordinates X left y bottom x right and y top must be real numbers Subsequent graphics output is clipped to the intersection of this rectangle and the device s virtual coordinate limits graphics reset clip rectangle graphics device procedure Eliminates the clip
353. l external id s esse 220 make xml parameter entity 220 make xml processing instructions 219 make xml uninterpreted s 219 make xml unparsed entity 220 Illa i2 ses bout dure biG E ed yp aide sara 114 214 apk o e cauere Pup ea x ERE Rs 114 327 match 200 06 ie hi pi dun Pea sities 213 match parser buffer char 206 match parser buffer char Cci 206 match parser buffer char ci no advance 206 match parser buffer char in set 206 match parser buffer char in set no advance EEEE PENA aa qu a deed e d Cape is 206 match parser buffer char no advance 206 match parser buffer not char 206 match parser buffer not char ci 206 match parser buffer not char ci no advance LLL 206 match parser buffer not char no advance ueber diccre beate deos d Lc gus 206 match parser buffer string 206 match parser buffer string ci 206 match parser buffer string ci no advance sides ddr ed a DERE Reed alate d P aden 206 match parser buffer string no advance 206 match parser buffer substring 207 match parser buffer substring ci 207 match parser buffer substring ci no advance vasa s dA wae a rece pi eid don rise Dra EE 207 match parser buffer substring no advance CTI 207 match utf8 char in alphabet 207 MA sce 62 maximize window
354. last pair except last pair destructively removes the last pair from list and returns list If the cdr of list is not a pair the empty list is returned by either procedure 7 5 Filtering Lists keep matching items list predicate procedure delete matching items list predicate procedure These procedures return a newly allocated copy of list containing only the elements for which predicate is respectively true or false Predicate must be a procedure of one argument keep matching items 1 2 3 4 5 odd gt 1 3 5 delete matching items 1 2 3 4 5 odd 2 4 For compatibility the procedure list transform positive is an alias for keep matching items and list transform negative is an alias for delete matching items keep matching items list predicate procedure delete matching items list predicate procedure These procedures are exactly like keep matching items and delete matching items respectively except that they destructively modify the list argument rather than allocating a new result delq element list procedure delv element list procedure delete element list procedure Returns a newly allocated copy of list with all entries equal to element removed delq uses eq to compare element with the entries in list delv uses eqv and delete uses equal delq element list procedure delv element list procedure delete element list procedure Returns a list consisting of the top level elements of list with all e
355. later version published by the Free Software Foundation with the Invariant Sections being list their titles with the Front Cover Texts being list and with the Back Cover Texts being list A copy of the license is included in the section entitled GNU Free Documentation License If you have no Invariant Sections write with no Invariant Sections instead of saying which ones are invariant If you have no Front Cover Texts write no Front Cover Texts instead of Front Cover Texts being list likewise for Back Cover Texts If your document contains nontrivial examples of program code we recommend releasing these examples in parallel under your choice of free software license such as the GNU General Public License to permit their use in free software Binding Index Binding Index Hiei bittegeddobaieekhianiacntme deed aedea ds 60 l Optional terse seca ey anaes otek hab ees 12 16 BP rest aslo sian desea ed iadaaa eae EGER 12 16 HC oh Lust eee etna he DATA rae doceas 119 HN ci hawiied Bil ae a ets bold eae 77 dNaltmode ire pe Cele dee dae EI 78 backnext 2 ois Sea eae nR EEE NDE nE OES 78 H DACKSPACE oc s base So riae nr 78 dSNCalll 2l0 RR 0090 4I RESI I RP RES 78 linefeed oie do ay eye bep ue 78 83 newline 0000 77 78 83 87 WI PE TREE 78 83 87 Protu i 30 cates ees ch eed E wenPPU ee deeds 78 83 diNrubout c n prebere E ang ae eee 78 LAT qe ior MEE pecan sees TT 78 88 92 SNCaB
356. le Scheme function Look at WIN32 DIB SCM to see how this is done e The current system works with C procedures with the stdcall and __cdecl calling conventions but not the fastcall calling convention GNU Free Documentation License 313 GNU Free Documentation License Version 1 1 March 2000 Copyright 2000 Free Software Foundation Inc 59 Temple Place Suite 330 Boston MA 02111 1307 USA Everyone is permitted to copy and distribute verbatim copies of this license document but changing it is not allowed 0 PREAMBLE The purpose of this License is to make a manual textbook or other written document free in the sense of freedom to assure everyone the effective freedom to copy and redistribute it with or without modifying it either commercially or noncommercially Secondarily this License preserves for the author and publisher a way to get credit for their work while not being considered responsible for modifications made by others This License is a kind of copyleft which means that derivative works of the document must themselves be free in the same sense It complements the GNU General Public License which is a copyleft license designed for free software We have designed this License in order to use it for manuals for free software because free software needs free documentation a free program should come with manuals providing the same freedoms that the software does But this License is not limite
357. le size The default rehash threshold of a newly constructed hash table is 1 hash table size hash table procedure Returns the usable size of hash table as an exact positive integer This is the number of associations that hash table can hold before it will grow hash table rehash size hash table procedure Returns the rehash size of hash table set hash table rehash size hash table x procedure X must be either an exact positive integer or a real number that is greater than one Sets the rehash size of hash table to x and returns an unspecified result This operation adjusts the shrink threshold of the table the table might shrink if the number of associations is less than the new threshold hash table rehash threshold hash table procedure Returns the rehash threshold of hash table Chapter 11 Associations 149 set hash table rehash threshold hash table x procedure X must be a real number between zero exclusive and one inclusive Sets the rehash threshold of hash table to x and returns an unspecified result This operation does not change the usable size of the table but it usually changes the physical size of the table which causes the table to be rehashed 11 4 4 Address Hashing The procedures described in this section may be used to make very efficient key hashing procedures for arbitrary objects All of these procedures are based on address hashing which uses the address of an object as its hash number The great advantage
358. ler procedure Individual handlers have complete control over the han dling of a condition and additionally may decide not to handle a particular condition passing it on to previously bound handlers Restarting from a handler The with restart procedure provides a means for condition signalling code to communicate to condition handling code what must be done to proceed past the condition Handlers can examine the restarts in effect when a condition was signalled allowing a structured way to continue an interrupted computation Packaging condition state Each condition is represented by an explicit object Condition objects contain information about the nature of the condition information that describes the state of the computation from which the condition arose and information about the ways the computation can be restarted Classification of conditions Each condition has a type represented by a condition type object Each con dition type may be a specialization of some other condition types A group of types that share a common generalization can be handled uniformly by speci fying a handler for the generalization 16 1 Condition Signalling Once a condition instance has been created using make condition or any condition constructor it can be signalled The act of signalling a condition is separated from the act of creating the condition to allow more flexibility in how conditions are handled For example a condition instance could b
359. ll invoke unparser method to generate the written representation unparser set tagged pair method tag unparser method procedure Changes the unparser method of the pair type represented by tag to be unparser method and returns an unspecified value Subsequently when the unparser encoun ters a pair with tag in its car field it will invoke unparser method to generate the written representation An unparser method is a procedure that is invoked with two arguments an unparser state and an object An unparser method generates a written representation for the object writing it to the output port specified by the unparser state The value yielded by an unparser method is ignored Note that an unparser state is not an output port rather it is an object that contains an output port as one of its components Application programs generally do not construct or examine unparser state objects but just pass them along There are two ways to create an unparser method which is then registered by one of the above procedures The first and easiest is to use standard unparser method The second is to define your own method using the procedure with current unparser state We encourage the use of the first method as it results in a more uniform appearance for objects Many predefined datatypes for example procedures and environments already have this appearance 194 MIT Scheme Reference standard unparser method name procedure procedure Returns a stan
360. ll make this clear Suppose we wanted to define a simple loop until keyword equivalent to define syntax loop until syntax rules loop until id init test return step letrec loop lambda id if test return loop step loop init The following attempt at defining loop until has a subtle bug 44 MIT Scheme Reference define syntax loop until sc macro transformer lambda exp env let id cadr exp init caddr exp test cadddr exp return cadddr cdr exp step cadddr cddr exp close lambda exp free make syntactic closure env free exp letrec loop lambda id if close test list id close return list id loop close step list id loop close init This definition appears to take all of the proper precautions to prevent unintended captures It carefully closes the subexpressions in their original syntactic environment and it leaves the id identifier free in the test return and step expressions so that it will be captured by the binding introduced by the lambda expression Unfortunately it uses the identifiers if and loop within that lambda expression so if the user of loop until just happens to use say if for the identifier it will be inadvertently captured The syntactic environment that if and loop want to be exposed to is the one just outside the lambda expression before the user s identifier is added to the syntactic environment but a
361. ll open displays x geometry string x y width height procedure This procedure creates and returns a standard X geometry string from the given arguments X and y must be either exact integers or f while width and height must be either exact non negative integers or f Usually either x and y are both specified or both f similarly for width and height If only one of the elements of such a pair is specified it is ignored Examples x geometry string f 4f 100 200 100x200 x geometry string 2 3 100 200 100x200 2 3 x geometry string 2 3 Hf Hf gt 42 3 Note that the x and y arguments cannot distinguish between 0 and 0 even though these have different meanings in X If either of those arguments is 0 it means 0 in X terminology If you need to distinguish these two cases you must create your own geometry string using Scheme s string and number primitives 290 MIT Scheme Reference 17 9 3 Custom Operations on X Graphics Devices Custom operations are invoked using the procedure graphics operation For example graphics operation device set foreground color blue set background color color name operation on x graphics device set foreground color color name operation on x graphics device set border color color name operation on x graphics device set mouse color color name operation on x graphics device These operations change the colors associated with a window Color name must be a string which is the X serv
362. lled it is best to actually put a breakpoint on entry to signal condition standard error handler condition procedure Called internally by error after it calls signal condition Normally creates creates a new REPL with the prompt error gt but see standard error hook In order to simulate the effect of calling error code may call signal condition directly and then call standard error handler if signal condition returns standard error hook variable This variable controls the behavior of the procedure standard error handler and hence error It is intended to be bound with fluid let and is normally f It may be changed to a procedure of one argument and will then be invoked with standard error hook rebound to f by standard error handler just prior to starting the error REPL It is passed one argument the condition being signalled standard warning handler condition procedure This is the procedure called internally by warn after it calls signal condition The normal behavior of standard warning handler is to print a message but see Chapter 16 Error System 263 standard warning hook More precisely the message is printed to the port returned by notification output port The message is formed by first printing the string Warning to this port and then calling write condition report on condition and the port In order to simulate the effect of calling warn code may call signal condition di rectly and then call standard warning
363. lly match the result is the concatenation of their values by vector append alt pexp parser expression The alt expression attempts to parse each pexp operand in order from left to right The first one that successfully parses produces the result for the entire alt expression Like the alt expression in the matcher language this expression participates in back tracking 214 MIT Scheme Reference pexp parser expression The expression parses zero or more occurrences of pexp The results of the parsed occurrences are concatenated together by vector append to produce the expres sion s result Like the expression in the matcher language this expression participates in back tracking pexp parser expression The expression parses one or more occurrences of pexp It is equivalent to seq pexp pexp pexp parser expression The expression parses zero or one occurrences of pexp It is equivalent to alt pexp seq The next three expressions do not have equivalents in the matcher language Each accepts a single pexp argument which is parsed in the usual way These expressions perform transformations on the returned values of a successful match transform expression pexp parser expression The transform expression performs an arbitrary transformation of the values re turned by parsing pexp Expression is a Scheme expression that must evaluate to a procedure at run time If pexp is successfully parsed the procedur
364. lonum procedure flo acos flonum procedure flo atan flonum procedure flo sqrt fonum procedure flo expt flonum1 flonum2 procedure flo floor flonum procedure flo ceiling flonum procedure flo truncate flonum procedure flo round flonum procedure flo floor gt exact flonum procedure flo ceiling gt exact flonum procedure flo truncate gt exact flonum procedure flo round gt exact flonum procedure These procedures are flonum versions of the corresponding procedures When com piled they do not check the types of their arguments flo atan2 flonuml flonum2 procedure This is the flonum version of atan with two arguments When compiled it does not check the types of its arguments 4 8 Random Numbers MIT Scheme provides a facility for generating pseudo random numbers The current im plementation is a subtract with carry random number generator based on the algorithm from A New Class of Random Number Generators George Marsaglia and Arif Zaman The Annals of Applied Probability Vol 1 No 3 1991 At the time it was implemented this was a good algorithm for general purposes but the state of the art in random number gen eration is constantly changing If necessary the implementation will be updated to use a new algorithm while retaining the same interface The interface described here is very similar to that of Common Lisp random modulus state procedure Modulus must be a positive real number random returns a pseudo random number
365. ls it tail recursively The average time required by this operation is bounded by a constant 11 4 3 Resizing of Hash Tables Normally hash tables automatically resize themselves according to need Because of this the programmer need not be concerned with management of the table s size However Chapter 11 Associations 147 some limited control over the table s size is provided which will be discussed below This discussion involves two concepts usable size and physical size which we will now define The usable size of a hash table is the number of associations that the table can hold at a given time If the number of associations in the table exceeds the usable size the table will automatically grow increasing the usable size to a new value that is sufficient to hold the associations The physical size is an abstract measure of a hash table that specifies how much space is allocated to hold the associations of the table The physical size is always greater than or equal to the usable size The physical size is not interesting in itself it is interesting only for its effect on the performance of the hash table While the average performance of a hash table lookup is bounded by a constant the worst case performance is not For a table containing a given number of associations increasing the physical size of the table decreases the probability that worse than average performance will occur The physical size of a hash table is stat
366. lue but substituting new value for a value that previously caused a failure The corresponding effector takes one argument new value and retries the same computation that triggered the condition with the new value substituted for the failing value The condition may reoccur of course if the new value also induces the condition The code that signals an unassigned variable error can be expected to supply a use value restart this would simply continue the computation with new value instead of Chapter 16 Error System 267 the value of the variable Contrast this with the retry and store value restarts If the retry restart is used it will fail because the variable still has no value The store value restart could be used but it would alter the value of the variable so that future references to the variable would not be detected 16 4 3 Finding and Invoking General Restart Code Restarts are a general mechanism for establishing a protocol between condition signalling and condition handling code The Scheme error system provides packaging for a number of common protocols It also provides lower level hooks that are intended for implementing customized protocols The mechanism used by signalling code with restart and with simple restart is used for both purposes Four additional operations are provided for the use of condition handling code Two operations bound restarts and find restart allow condition handling code to locate
367. mand WM COMMAND Help WM HELP Mouse move WM_MOUSEMOVE Note that this operation does not affect any events that are already in the user event queue Changing the mask only affects what events will be added to the queue in the future read user event operation on os2 graphics device This operation returns the next user event available from the user event queue If there are no events in the queue the operation waits for an event to arrive before returning An event is a vector whose first element is the event type number whose second ele ment is the graphics device that the event refers to and whose remaining elements provide information about the event Here is a table of the possible event types and their vector layout 0 device number type x y flags A button event Number is the button number for example button number O is usually the left mouse button 1 is usually the right button etc Type specifies what occurred O means the button was pressed 1 means the button was released 2 means the button was clicked and 3 means the button was double clicked X and y are the position of the mouse pointer at the time of 300 MIT Scheme Reference the event in units of pels pixels measured from the lower left corner of the client area of the associated window Finally flags specifies what shift keys were pressed at the time of the button event it is a mask word created by combining zero or more of the following flags
368. mat ned ree ted 5 1 2 Scheme COonCepta cie Ded aaa a a ARE E 6 1 2 1 Variable Bindings lsuseeeieee eese 6 1 2 2 Environment Concepts ss esses essen 6 1 2 8 Initial and Current Environments Ls 7 1 2 4 Static Scoping ee eee eee eee Y 1 2 5 True and False 0 00 cece ee eee eese 8 1 2 6 External Representations 00000 8 1 2 7 Disjointness of Types s esses esses esse 9 1 2 8 Storage Model 0 00 cece eee eee eee 9 1 3 Lexical Conventions 00 0 essen 10 1 3 4 Whitespace 0 00 c cece eee eens 10 1 3 2 Delimiters suesseseeeesel eene 10 1 3 9 Identifiers eeni b eed eee ra re sake 10 1 3 4 Uppercase and Lowercase 000000 eee 11 1 3 5 Naming Conventions lesse sese eee 11 1 3 6 Comments ece ninaa ar raaa cine eA ebd a 11 1 8 7 Additional Notations esses esee 11 l4 BEXpressiOHsS 26eeefemd RE Er Rieder poet idus 13 1 4 1 Literal Expressions ssseee enses 13 1 4 2 Variable References 0 00 cece else 13 1 4 3 Special Form Syntax 0 00 ee eee eee eee 13 1 4 4 Procedure Call Syntax 0 0 0 0 14 2 Special Forms sucre RR ates oranana AO 15 2 1 Lambda Expressions sesessseeeeee ne 15 2 2 Lexical Binding 0 0 00 eee eens 17 2 3 Dynamic Binding 0 00 eee 18 ZA DeAWMIONS ct aenea a Dae bcr e
369. matched expression always successfully matches the null string How ever it isn t meant to be used as a matching expression it is used for its effect discard matched causes all of the buffered text prior to this point to be discarded i e it calls discard parser buffer head on the parser buffer Note that discard matched may not be used in certain places in a matcher ex pression The reason for this is that it deliberately discards information needed for Chapter 14 Input Output 211 backtracking so it may not be used in a place where subsequent backtracking will need to back over it As a rule of thumb use discard matched only in the last operand of a seq or alt expression including any seq or alt expressions in which it is indirectly contained In addition to the above primitive expressions there are two convenient abbreviations A character literal e g A is a legal primitive expression and is equivalent to a char expression with that literal as its operand e g char A Likewise a string literal is equivalent to a string expression e g string abc Next there are several combinator expressions These closely correspond to similar com binators in regular expressions Parameters named mexp are arbitrary expressions in the matcher language seq mexp matcher expression This matches each mexp operand in sequence For example seq char set char set alphabetic char set char set numeric match
370. mbers length of bit string i022 tis iler 1 length of bit string defn 1 length of list defn 2 orn rere i length of stream 2 0 66 cesses ee ne ee reii 1 length Of String ceo rcr scans Y RR 1 length of string defn 00 length of vector defn 2 0 04 1 letrec implicit in define lexical binding expression 0 lexical conyentions 4 br ev EY rwr Rt lexical scoping defn 0 0 eee eee eee library system pathname 2 IMITATIONS sec eor ata Resin Pee Peg 3 line style graphics defn issus 2 linking hard of file 00000 2 linking soft of file 0 0 00 2 list defn niet Shee dee SEHE TOSS 1 list index defn o see et 1 list association defn 00 000 1 list converting to stream 0 He list converting to string 04 list converting to vector 000 I list external representation 1 list improper defn 0000s eee eee i literal expression defn ssuueuueue literal and quasiquote ssesesssesss MIT Scheme Reference literal and quote rte 22 literal identifier as 0 02 ee eee 10 loading DELlLs rer tele inden Bad 307 location iimeentecRec I eeeee beR ER eb 9 location of variable
371. me with the same components except a certain number as the version Indeed a pathname with version newest may refer to different files as time passes because the meaning of such a pathname depends on the state of the file system In file systems with such facilities as links multiple file names logical devices and so on two pathnames that look quite different may turn out to address the same file To access a file given a pathname one must do a file system operation such as open input file 224 MIT Scheme Reference Two important operations involving pathnames are parsing and merging Parsing is the conversion of a filename which might be something supplied interactively by the users when asked to supply the name of a file into a pathname object This operation is implementation dependent because the format of filenames is implementation dependent Merging takes a pathname with missing components and supplies values for those compo nents from a source of default values Not all of the components of a pathname need to be specified If a component of a pathname is missing its value is f Before the file system interface can do anything interesting with a file such as opening the file all the missing components of a pathname must be filled in Pathnames with missing components are used internally for various purposes in particular parsing a namestring that does not specify certain components will result in a pathname with missing com
372. ments of vectorl starting with index startl inclusive and ending with endl exclusive into vector2 starting at index start2 inclusive Vectorl start1 and end1 must specify a valid subvector and start2 must be a valid index for vector2 The length of the source subvector must not exceed the length of vector2 minus the index start2 The elements are copied as follows note that this is only important when vectorl and vector2 are eqv subvector move left The copy starts at the left end and moves toward the right from smaller indices to larger Thus if vectorl and vector2 are the same this proce dure moves the elements toward the left inside the vector subvector move right The copy starts at the right end and moves toward the left from larger indices to smaller Thus if vector and vector2 are the same this pro cedure moves the elements toward the right inside the vector sort vector procedure procedure merge sort vector procedure procedure quick sort vector procedure procedure Procedure must be a procedure of two arguments that defines a total ordering on the elements of vector The elements of vector are rearranged so that they are sorted in the order defined by procedure The elements are rearranged in place that is vector is destructively modified so that its elements are in the new order sort returns vector as its value Two sorting algorithms are implemented merge sort and quick sort The pro cedure sort
373. ments that were passed to the entity Both apply hooks and entities satisfy the predicate procedure Each satisfies either compiled procedure compound procedure or primitive procedure depending on its procedure component An apply hook is considered to accept the same number of arguments as its procedure while an entity is considered to accept one less argument than its procedure make apply hook procedure object procedure Returns a newly allocated apply hook with a procedure component of procedure and an extra component of object apply hook object procedure Returns stt if object is an apply hook otherwise returns f apply hook procedure apply hook procedure Returns the procedure component of apply hook set apply hook procedure apply hook procedure procedure Changes the procedure component of apply hook to be procedure Returns an un specified value apply hook extra apply hook procedure Returns the extra component of apply hook set apply hook extra apply hook object procedure Changes the extra component of apply hook to be object Returns an unspecified value make entity procedure object procedure Returns a newly allocated entity with a procedure component of procedure and an extra component of object Chapter 12 Procedures 171 entity object procedure Returns t if object is an entity otherwise returns f entity procedure entity procedure Returns the procedure component of entity set entity procedur
374. mittee and accepts many of their recommendations In some ways this report simplifies and generalizes their proposals in a manner consistent with the purposes of Scheme It is important to distinguish between the mathematical numbers the Scheme numbers that attempt to model them the machine representations used to implement the Scheme numbers and notations used to write numbers This report uses the types number complex real rational and integer to refer to both mathematical numbers and Scheme numbers Machine representations such as fixed point and floating point are referred to by names such as fiznum and flomum 4 1 Numerical types Mathematically numbers may be arranged into a tower of subtypes in which each level is a subset of the level above it number complex real rational integer For example 3 is an integer Therefore 3 is also a rational a real and a complex The same is true of the Scheme numbers that model 3 For Scheme numbers these types are defined by the predicates number complex real rational and integer There is no simple relationship between a number s type and its representation inside a computer Although most implementations of Scheme will offer at least two different representations of 3 these different representations denote the same integer Scheme s numerical operations treat numbers as abstract data as independent of their representation as possible Although an implementation of Scheme ma
375. mum is an exact non negative integer The maximum is either an exact non negative integer or f meaning that the procedure has no maximum number of arguments procedure arity lambda 3 gt 0 0 procedure arity lambda x x XL procedure arity car gt 1 1 procedure arity lambda x x gt 0 sf procedure arity lambda x y x gt 1 f procedure arity lambda x optional y x XL os procedure environment procedure procedure Returns the closing environment of procedure Signals an error if procedure is a primitive procedure or if procedure is a compiled procedure for which the debugging information is unavailable 12 2 Primitive Procedures make primitive procedure name arity procedure Name must be a symbol Arity must be an exact non negative integer 1 f or t if not supplied it defaults to Returns the primitive procedure called name May perform further actions depending on arity Chapter 12 Procedures 167 f If the primitive procedure is not implemented signals an error t If the primitive procedure is not implemented returns f integer If the primitive procedure is implemented signals an error if its arity is not equal to arity If the primitive procedure is not implemented returns an unimplemented primitive procedure object that accepts arity arguments An arity of 1 means it accepts any number of arguments primitive procedure name primitive procedure procedure Re
376. n For example graphics operation device set foreground color blue set background color color name operation on win32 graphics device set foreground color color name operation on win32 graphics device These operations change the colors associated with a window Color name must be of one of the valid color specification forms listed below set background color and set foreground color change the colors to be used when drawing but have no effect on anything drawn prior to their invocation Because changing the background color affects the entire window we recommend calling graphics clear on the window s device afterwards The foreground color affects the drawing of text points lines ellipses and filled polygons Colors are specified in one of three ways An integer This is the Win32 internal RGB value By name A limited number of names are understood by the system Names are strings e g red blue black More names can be registered with the define color operation 294 MIT Scheme Reference RGB Red Green Blue triples A triple is either a vector or list of three integers in the range 0 255 inclusive which specify the intensity of the red green and blue components of the color Thus 0 0 0 is black 0 0 128 is dark blue and 255 255 255 is white If the color is not available in the graphics device then the nearest available color is used instead define color name spec operation on win32 graphics device Def
377. n 1 1 3 7 Additional Notations The following list describes additional notations used in Scheme See Chapter 4 Num bers page 57 for a description of the notations used for numbers m The plus sign minus sign and period are used in numbers and may also occur in an identifier A delimited period not occurring within a number or identifier is used in the notation for pairs and to indicate a rest parameter in a formal parameter list see Section 2 1 Lambda Expressions page 15 12 C t f MIT Scheme Reference Parentheses are used for grouping and to notate lists see Chapter 7 Lists page 105 The double quote delimits strings see Chapter 6 Strings page 87 The backslash is used in the syntax for character constants see Chapter 5 Characters page 77 and as an escape character within string constants see Chapter 6 Strings page 87 The semicolon starts a comment The single quote indicates literal data it suppresses evaluation see Section 2 6 Quoting page 22 The backquote indicates almost constant data see Section 2 6 Quoting page 22 The comma is used in conjunction with the backquote see Section 2 6 Quoting page 22 A comma followed by an at sign is used in conjunction with the backquote see Section 2 6 Quoting page 22 The sharp or pound sign has different uses depending on the character that immediately follows it These character sequences
378. n explicit radix prefix Note The error case can occur only when number is not a complex number or is a complex number with an non rational real or imaginary part Rationale If number is an inexact number represented using flonums and the radix is 10 then the above expression is normally satisfied by a result containing a decimal point The unspecified case allows for infinities NaNs and non flonum representa tions flonum parser fast variable This variable controls the behavior of string gt number when parsing inexact numbers Specifically it allows the user to trade off accuracy against speed When set to its default value t the parser provides maximal accuracy as required by the Scheme standard If set to t the parser uses faster algorithms that will sometimes introduce small errors in the result The errors affect a few of the least significant bits of the result and consequently can be tolerated by many applications flonum unparser cutoff variable This variable controls the action of number string when number is a flonum and consequently controls all printing of flonums The value of this variable is normally a list of three items rounding type One of the following symbols normal relative or absolute The sym bol normal means that the number should be printed with full precision The symbol relative means that the number should be rounded to a specific number of digits The symbol absolute means that the numb
379. n hygienic by design For example the following defines a loop macro that implicitly binds exit to an escape procedure The binding of exit is intended to capture free references to exit in the body of the loop so exit must be left free when the body is closed define syntax loop sc macro transformer lambda exp env let body cdr exp call with current continuation lambda exit let f O map lambda exp make syntactic closure env exit exp body rsc macro transformer expression special form This form is an alternative way to define a syntactic closures macro transformer Its syntax and usage are identical to sc macro transformer except that the roles of the usage environment and transformer environment are reversed Hence RSC stands for Reversed Syntactic Closures In other words the procedure specified by expression 42 MIT Scheme Reference still accepts two arguments but its second argument will be the transformer environ ment rather than the usage environment and the returned expression is closed in the usage environment rather than the transformer environment The advantage of this arrangement is that it allows a simpler definition style in some situations For example here is the push macro from above rewritten in this style define syntax push rsc macro transformer lambda exp env make syntactic closure env SET caddr exp make syntactic closure env
380. n in the clause as the result of the case expression 3 If the result of evaluating key is different from every object and if there s an else clause case evaluates its expressions and returns the result of the last one as the result of the case expression If there s no else clause case returns an unspecified result Programs should not depend on the value of a case expression that has no else clause For example case 2 3 2 3 5 7 prime 14 6 8 9 composite gt composite case car c d a a b b gt unspecified case car c d a e i o ou vowel w y semivowel else consonant gt consonant and expression special form The expressions are evaluated from left to right and the value of the first expression that evaluates to a false value is returned Any remaining expressions are not evalu ated If all the expressions evaluate to true values the value of the last expression is returned If there are no expressions then t is returned and 22 2 1 gt t and 2 2 lt 2 1 gt f and 1 2 c f g gt fg and gt dt or expression special form The expressions are evaluated from left to right and the value of the first expression that evaluates to a true value is returned Any remaining expressions are not eval uated If all expressions evaluate to false values the value of the last expression is returned If there are no expressions
381. n restart passing the specified arguments to it invoke restart is intended for use by condition handling code that understands the protocol implemented by restart and can therefore calculate and pass an appropriate set of arguments If a condition handler needs to interact with a user to gather the arguments for an effector e g if it does not understand the protocol implemented by restart invoke restart interactively should be used instead of invoke restart 268 MIT Scheme Reference invoke restart interactively restart procedure First calls the interactor encapsulated in restart to interactively gather the arguments needed for restart s effector It then calls the effector passing these arguments to it invoke restart interactively is intended for calling interactive restarts those for which restart interactor is not f For convenience invoke restart interactively will call the restart s effector with no arguments if the restart has no interactor this behavior may change in the future 16 4 4 The Named Restart Abstraction A restart object is very simple since it encapsulates only a name effector interactor and description restart object procedure Returns f if and only if object is not a restart restart name restart procedure Returns the name of restart While the Scheme error system uses only symbols and the object for its predefined names programs may use arbitrary objects name equivalence is tested usin
382. n string or substring reverse string and reverse substring return newly allocated strings reverse string and reverse substring modify their argument strings and return an unspecified value reverse string foo bar baz gt reverse substring foo bar baz 4 7 gt let foo foo bar baz reverse string foo foo gt let foo foo bar baz reverse substring foo 4 7 foo gt 6 10 Variable Length Strings Zab rab oof rab zab rab oof foo rab baz MIT Scheme allows the length of a string to be dynamically adjusted in a limited way When a new string is allocated by whatever method it has a specific length At the time of allocation it is also given a maximum length which is guaranteed to be at least as large as the string s length Sometimes the maximum length will be slightly larger than the length but it is a bad idea to count on this Programs should assume that the maximum length is the same as the length at the time of the string s allocation After the string is allocated the operation set string length can be used to alter the string s length to any value between 0 and the string s maximum length inclusive string maximum length string procedure Returns the maximum length of string The following is guaranteed lt string length string string maximum length string The maximum length of a string never changes t Chapter 6 Strings 103 set strin
383. n the same port The only difference is that the very next call to read char or peek char on that input port will return the value returned by the preceding call to peek char In particular a call to peek char on an interactive port will hang waiting for input whenever a call to read char would have hung char ready exists to make it possible for a program to accept characters from interactive ports without getting stuck waiting for input Any input editors associated with such ports must make sure that 186 MIT Scheme Reference read input port procedure Converts external representations of Scheme objects into the objects themselves read returns the next object parsable from input port updating input port to point to the first character past the end of the written representation of the object If an end of file is encountered in the input before any characters are found that can begin an object read returns an end of file object The input port remains open and further attempts to read will also return an end of file object If an end of file is encountered after the beginning of an object s written representation but the written representation is incomplete and therefore not parsable an error is signalled eof object object procedure Returns t if object is an end of file object otherwise returns f read char no hang input port procedure If input port can deliver a character without blocking this procedure acts exactly lik
384. n time procedure Filename must name an existing file while access time and modification time must be valid file times that might have been returned by file access time and file modification time respectively set file times alters the access and modifi cation times of the file specified by filename to the values given by access time and modification time respectively For convenience either of the time arguments may be specified as in this case the corresponding time is not changed set file times returns an unspecified value current file time procedure Returns the current time as an exact non negative integer in the same format used by the above file time procedures This number can be compared to other file times using ordinary arithmetic operations Chapter 15 Operating System Interface 237 file touch filename procedure Touches the file named filename If the file already exists its modification time is set to the current file time and f is returned Otherwise the file is created and t is returned This is an atomic test and set operation so it is useful as a synchronization mechanism file length filename procedure Returns the length in bytes of the file named filename as an exact non negative integer file attributes filename procedure This procedure determines if the file named filename exists and returns information about it if so if the file does not exist it returns f In operating systems that support
385. n32 graphics device This sets the window title to the string name The window is given the name Scheme Graphics at creation set font handle operation on win32 graphics device Sets the font for drawing text Currently not well supported If you can get a Win32 font handle it can be used here copy area source x left source y top width operation on win32 graphics device height destination x left destination y top This operation copies the contents of the rectangle specified by source x left source y top width and height to the rectangle of the same dimensions at destination x left and destination y top 17 11 OS 2 Graphics MIT Scheme supports graphics under the OS 2 Presentation Manager in OS 2 version 2 1 and later The OS 2 graphics device type is implemented as a top level window In addition to the usual operations there are operations to control the size position and colors of a graphics window OS 2 graphics devices support images which are implemented as memory presentation spaces The custom graphics operations defined in this section are invoked using the procedure graphics operation For example graphics operation device set foreground color blue 17 11 1 OS 2 Graphics Type OS 2 graphics devices are created by specifying the symbol os 2 as the graphics device type argument to make graphics device The OS 2 graphics device type is implemented as a top level window and supports color drawing in addition to the sta
386. name is intended for programs and the short name for interactive use Additionally set working directory pathname modifies the value of default pathname defaults by merging the new working directory into it When this procedure is executed in the top level REP loop it changes the working directory of the running Scheme executable set working directory pathname usr morris blisp pathname usr morris blisp set working directory pathname gt pathname usr morris This procedure signals an error if filename does not refer to an existing directory If filename describes a relative rather than absolute pathname this procedure in terprets it as relative to the current working directory before changing the working directory working directory pathname pathname usr morris set working directory pathname foo pathname usr morris foo with working directory pathname filename thunk procedure This procedure temporarily rebinds the current working directory to filename in vokes thunk a procedure of no arguments then restores the previous working di rectory and returns the value yielded by thunk Filename is coerced to a path name using pathname as directory In addition to binding the working directory with working directory pathname also binds the variable default pathname defaults merging the old value of that variable with the new working directory pathname Both bindings are pe
387. nce define list length lambda obj call with current continuation lambda return letrec r lambda obj cond null obj 0 pair obj r cdr obj 1 else return f r obj list length 1 2 3 4 gt 4 list length a b c gt f A common use of call with current continuation is for structured non local exits from loops or procedure bodies but in fact call with current continuation is quite useful for implementing a wide variety of advanced control structures Whenever a Scheme expression is evaluated a continuation exists that wants the result of the expression The continuation represents an entire default future for the computation If the expression is evaluated at top level for example the continuation will take the result print it on the screen prompt for the next input evaluate it and so on forever Most of the time the continuation includes actions specified by user code as in a continuation that will take the result multiply it by the value stored in a local variable add seven and give the answer to the top level continuation to be printed Normally these ubiquitous continuations are hidden behind the scenes and programmers don t think much about them On the rare occasions that you may need to deal explicitly with continuations call with current continuation lets you do so by creating a procedure that acts just like the current continuation continuation object procedure
388. nce of the substring pattern If successful the index to the right of the last character of the matched substring is returned otherwise f is returned substring search backward limits its search to the specified substring of string string search backward searches all of string string search backward rat pirate gt 5 string search backward rat pirate rating 10 substring search backward rat pirate rating 1 8 gt 5 substring search backward rat pirate rating 9 13 gt df string search all pattern string procedure substring search all pattern string start end procedure Pattern must be a string Searches string to find all occurrences of the substring pattern Returns a list of the occurrences each element of the list is an index pointing to the first character of an occurrence substring search all limits its search to the specified substring of string string search all searches all of string string search all rat pirate gt 2 string search all rat pirate rating gt 2 T substring search all rat pirate rating 4 13 gt T substring search all rat pirate rating 9 13 gt 0 substring pattern string procedure Pattern must be a string Searches string to see if it contains the substring pattern Returns t if pattern is a substring of string otherwise returns f substring rat pirate gt t substring rat outrage gt f substring any string gt
389. nd later restored using the fasload procedure This allows a particular random state object to be saved in order to replay a particular pseudo random sequence random state variable This variable holds a data structure a random state object that encodes the internal state of the random number generator that random uses by default A call to random will perform a side effect on this data structure This variable may be changed using set or fluid let to hold a new random state object make random state state procedure This procedure returns a new random state object suitable for use as the value of the variable random state or as the state argument to random If state is not given or 4f make random state returns a copy of the current random number state object the value of the variable random state If state is a random state object a copy of that object is returned If state is stt then a new random state object is returned that has been randomly initialized by some means such as by a time of day clock random state object procedure Returns t if object is a random state object otherwise returns f 76 MIT Scheme Reference Chapter 5 Characters 77 5 Characters Characters are objects that represent printed characters such as letters and digits 5 1 External Representation of Characters Characters are written using the notation character or character name For exam ple a lowercase letter
390. ndard Scheme graphics operations Graphics devices are opened as follows make graphics device os 2 optional width height where width and height specify the size in pixels of the drawing area in the graphics window i e excluding the frame 296 MIT Scheme Reference 17 11 2 Color Operations for OS 2 Graphics These operations control the colors used when drawing on an OS 2 graphics device color operation on os2 graphics device This operation returns stt if the display supports color set background color color name operation on os2 graphics device set foreground color color name operation on os2 graphics device These operations change the colors associated with a window Color name must be one of the valid color specification forms listed below set background color and set foreground color change the colors to be used when drawing but have no effect on anything drawn prior to their invocation Because changing the background color affects the entire window we recommend calling graphics clear on the window s device afterwards The foreground color affects the drawing of text points and lines Colors are specified in one of these ways An integer between 0 and xffffff inclusive This is the OS 2 internal RGB value By name A limited number of names are understood by the system Names are strings e g red blue black More names can be registered with the define color operation RGB Red Green Blue triples
391. nding let variable 1 inside continuation write line variable call with current continuation lambda outside continuation fluid let variable 2 write line variable set variable 3 call with current continuation lambda k set inside continuation k outside continuation t write line variable set inside continuation f write line variable if inside continuation begin set variable 4 inside continuation f Evaluating complicated dynamic binding writes the following on the console Commentary the first two values written are the initial binding of variable and its new binding after the fluid let s body is entered Immediately after they are written variable is set to 3 and then outside continuation is invoked causing us to exit the body At this point 1 is written demonstrating that the original value of variable has been restored because we have left the body Then we set variable to 4 and reenter the body by invoking inside continuation At this point 3 is written indicating that the side effect that previously occurred within the body has been preserved Finally we exit body normally and write 4 demonstrating that the side effect that occurred outside of the body was also preserved 2 4 Definitions define variable expression special form define formals expression expression special form Definitions are valid in some but not all c
392. ne reais Rep e REC Ee ho eR dd 103 apr rnt 105 y MIDI P 106 7 2 Construction of Lists islsesseeseeeeeese eee 108 7 3 Selecting List Components 0 00 eee ee eee 109 7 4 Cutting and Pasting Lists 000 esses eese 110 7 0 Filtering Lists 0 0 cece eee eee eens 112 1 6 Searching Lislsosu ee ebepet epp RE RA BUR i 7 7 Mapping of Lists 00 0 eee eee eee 114 7 8 Reduction of Lists 0 00 cee eee ee eee 115 7 9 Miscellaneous List Operations 002 000 eee 117 B Vectors 94444600 vole ede eens WE YR eur eects 119 8 1 Construction of Vectors 0 00 c eee eee eee 119 8 2 Selecting Vector Components 00000 eee eee 120 8 9 Cutting Vectors uico bg epe bet CREE e bg Rs 121 8 4 Modifying Vectors 000 0 cece cece 121 9 Bit STINS ccc d aene son seep dee enw cee ts 123 9 1 Construction of Bit Strings 0 00 eee 123 9 2 Selecting Bit String Components 204 124 9 3 Cutting and Pasting Bit Strings 124 9 4 Bitwise Operations on Bit Strings 125 9 5 Modification of Bit Strings 00 0 eee 126 9 6 Integer Conversions of Bit Strings 126 10 Miscellaneous Datatypes 127 10 1 Booleans s d den e rede gr reta no nte 127 10 2 Symbolgz 2 a Ebert eia RR Rn Ep ed due a eine 128 10 3 Cell iie eR PELIS ee RW E
393. neralization of car and cdr Path encodes a particular sequence of car and cdr operations which general car cdr executes on object Path is an exact non negative integer that encodes the operations in a bitwise fashion a zero bit represents a cdr operation and a one bit represents a car The bits are executed 108 MIT Scheme Reference LSB to MSB and the most significant one bit rather than being interpreted as an operation signals the end of the sequence For example the following are equivalent general car cdr object b1011 cdr car car object Here is a partial table of path operation equivalents b10 cdr b11 car b100 cddr b101 cdar b110 cadr b111 caar b1000 cdddr tree copy tree procedure This copies an arbitrary tree constructed from pairs copying both the car and cdr elements of every pair This could have been defined by define tree copy tree let loop tree tree if pair tree cons loop car tree loop cdr tree tree 7 2 Construction of Lists list object procedure Returns a list of its arguments list a 3 4 c gt a7c list gt 0 These expressions are equivalent list objl obj2 objN cons objl cons obj2 cons objN O make list k element procedure This procedure returns a newly allocated list of length k whose elements are all element If element is not supplied it defaults to the empty list cons object object procedure con
394. ng 183 with interaction i o port 180 with notification output port 180 with output to binary file 183 333 with outp ut to flle m RR Rd 183 with output to port iiieneei beers 180 with output to string ss 184 with output to truncated string 184 with pointer be bep ms 212 215 with restart civ p d ges 258 263 265 267 with simple restart 263 264 267 with string outp t port oserei iosi ken 184 With timings sgg n done E dam E aang 247 with tr ce ou utp t port 2 292 2 33a 180 with working directory pathname 231 withdraw windowon x graphics device 291 Within continuation 6 26 er n hn 168 WOZd ieess ene ee an Pa E eer saa P mera ER 306 working direCtory s osos lk sene eds 252 working directory pathname 231 WElt6 cede awe edes 8 128 189 194 260 Write Cchar ee i ERR LEG 6 179 188 write charon output port esses 200 write condition report 262 271 WEdt dib e eaa rare rag e ees redes 310 Write line i2 ge E Re ERA RA seed 189 write restart repOrt o c terriii 268 WEItO SUIIBEg l 22 299 99d Cachan 188 191 194 write substring sie as eee ou 188 write substringon output port 200 writ to String s o lg abe Pp XG Rs 184 write utf8 code point 22 2 222 9 ej b 85 writ xml 5 942go bue eo E os dr EE 21
395. ng 126 interactive input ports defn 185 internal definition 2 c nb bROI QepEEendhd 21 internal definition defn 0 20 internal representation for character 80 340 internal representation for inexact number interned symbol defn 000 1 interning of symbols I interpreted procedure type 1 interpreter environment 1 inverse additive of number inverse multiplicative of number inverse of bit string 00 000 1 inverse of boolean object sess il invocation environment of procedure defn ISO 8859 1 character defn iteration expression defn 0 K key of association list element defn 1 Key WOR ig sides pesu ees acces Gale Quad Baga s keyword binding 2 2 eem ev i keyword constructor sesesseeeeeeee keyword constructor defn iussus keyword of special form defn L l as exponent marker in number lambda expression defn 204 lambda list defn 00 00 00 cee eee lambda implicit in define lambda implicit in let scence eee eee latent types defn 0 eee eee eee eee lazy evaluation defn 00 0000 1 least common multiple of nu
396. ng Signals an error if symboll isn t definable in environment1 or if symbol2 is unbound in environment2 Chapter 13 Environments 177 By the same binding we mean that the value cell is shared between the two envi ronments If a value is assigned to symboll in environment1 a subsequent reference to symbol2 in environment2 will see that value and vice versa unbind variable environment symbol procedure If symbol is bound in environment or one of its ancestor environments removes the binding so that subsequent accesses to that symbol behave as if the binding never existed Returns stt if there was a binding prior to the call and f if there wasn t 178 MIT Scheme Reference Chapter 14 Input Output 179 14 Input Output This chapter describes the procedures that are used for input and output 1 0 The chapter first describes ports and how they are manipulated then describes the 1 0 opera tions Finally some low level procedures are described that permit the implementation of custom ports and high performance 1 0 14 1 Ports Scheme uses ports for 1 0 A port which can be treated like any other Scheme object serves as a source or sink for data A port must be open before it can be read from or written to The standard 1 O port console i o port is opened automatically when you start Scheme When you use a file for input or output you need to explicitly open and close a port to the file with procedures described in this c
397. ng This is equivalent to creating a string input port and calling input port gt parser buffer but it runs faster and uses less memory string gt parser buffer string procedure Like substring gt parser buffer but buffers the entire string Chapter 14 Input Output 205 source gt parser buffer source procedure Returns a parser buffer that buffers the characters returned by calling source Source is a procedure of three arguments a string a start index and an end index in other words a substring specifier Each time source is called it writes some characters in the substring and returns the number of characters written When there are no more characters available it returns zero It must not return zero in any other circumstance Parser buffers and parser buffer pointers may be distinguished from other objects parser buffer object procedure Returns itt if object is a parser buffer otherwise returns f parser buffer pointer object procedure Returns t if object is a parser buffer pointer otherwise returns f Characters can be read from a parser buffer much as they can be read from an input port The parser buffer maintains an internal pointer indicating its current position in the input stream Additionally the buffer remembers all characters that were previously read and can look at characters arbitrarily far ahead in the stream It is this buffering capability that facilitates complex matching and backtracking read
398. ng to a subset of the pathname informa tion file namestring returns a string representing just the name type and version components of pathname the result of directory namestring represents just the host device and directory components and host namestring returns a string for just the host portion enough namestring takes another argument defaults It returns an abbreviated namestring that is just sufficient to identify the file named by pathname when con sidered relative to the defaults which defaults to default pathname defaults file namestring usr morris minor van gt minor van directory namestring usr morris minor van usr morris enough namestring usr morris men gt men perhaps file pathname pathname procedure directory pathname pathname procedure enough pathname pathname defaults procedure These procedures return a pathname corresponding to a subset of the pathname in formation file pathname returns a pathname with just the name type and version components of pathname The result of directory pathname is a pathname contain ing the host device and directory components of pathname enough pathname takes another argument defaults It returns an abbreviated path name that is just sufficient to identify the file named by pathname when considered relative to the defaults which defaults to default pathname defaults These procedures are similar to file namestring directory namestring
399. ng2 start2 end2 procedure string string1 string2 procedure string lt string1 string2 procedure string gt string string2 procedure string ci lt string string2 procedure substring ci lt string start1 end1 string2 start2 end2 procedure string ci gt string string2 procedure string ci lt string string2 procedure string ci gt string string2 procedure These procedures compare strings substrings according to the order of the charac ters they contain also see Section 5 2 Comparison of Characters page 79 The arguments are compared using a lexicographic or dictionary order If two strings differ in length but are the same up to the length of the shorter string the shorter string is considered to be less than the longer string string lt cat dog gt t string lt cat DOG gt f string ci lt cat DOG t string gt catkin cat dit shorter is lesser string compare string1 string2 if eq if It if gt procedure string compare ci string string2 if eq if It if gt procedure If eq if It and if gt are procedures of no arguments thunks The two strings are compared if they are equal if eq is applied if string1 is less than string2 if lt is applied else if string is greater than string2 if gt is applied The value of the procedure is the value of the thunk that is applied string compare distinguishes uppercase and lowercase letters string compare ci does not define cheer
400. ngth and are terminated by the empty list 106 MIT Scheme Reference Within literal expressions and representations of objects read by the read procedure the forms datum datum datum and datum denote two element lists whose first elements are the symbols quote quasiquote unquote and unquote splicing respectively The second element in each case is datum This convention is supported so that arbitrary Scheme programs may be represented as lists Among other things this permits the use of the read procedure to parse Scheme programs 7 1 Pairs This section describes the simple operations that are available for constructing and manipulating arbitrary graphs constructed from pairs pair object procedure Returns t if object is a pair otherwise returns f pair a b gt t pair a b c gt dtt pair O gt f pair a b gt f cons objl obj2 procedure Returns a newly allocated pair whose car is obj1 and whose cdr is obj2 The pair is guaranteed to be different in the sense of eqv from every previously existing object cons a gt a cons a b c d gt a bc d cons a b c gt a b c cons a 3 gt a 3 cons a b c gt ab c car pair procedure Returns the contents of the car field of pair Note that it is an error to take the car of the empty list car a b c a car gt Ca b c d gt a car 1 2 gt 1 car 09 Ill
401. nicode map directly to IS0 8859 1 characters which is what character sets contain char set alphabet char set procedure Returns a Unicode alphabet containing the code points that correspond to characters that are members of char set alphabet char set alphabet procedure Returns a character set containing the characters that correspond to 8 bit code points that are members of alphabet Code points outside the 8 bit range are ignored string gt alphabet string procedure Returns a Unicode alphabet containing the code points corresponding to the charac ters in string Equivalent to char set alphabet string gt char set string alphabet gt string alphabet procedure Returns a newly allocated string containing the characters corresponding to the 8 bit code points in alphabet Code points outside the 8 bit range are ignored 8 bit alphabet alphabet procedure Returns t if alphabet contains only 8 bit code points otherwise returns amp f alphabet alphabet procedure Returns a Unicode alphabet that contains each code point that is a member of any of the alphabet arguments alphabet alphabet1 alphabet2 procedure Returns a Unicode alphabet that contains each code point that is a member of alpha bet1 and is not a member of alphabet2 Chapter 6 Strings 87 6 Strings A string is a mutable sequence of characters In the current implementation of MIT Scheme the elements of a string must all satisfy the predicate char a
402. ntaining all of the operations implemented by port type Each element of the list is a list of two elements the name and its associated operation port type operation names port type procedure Returns a newly allocated list whose elements are the names of the operations imple mented by port type port type operation port type symbol procedure Returns the operation named symbol in port type If port type has no such operation returns f 198 MIT Scheme Reference 14 9 2 Constructors and Accessors for Ports The procedures in this section provide means for constructing ports accessing the type of a port and manipulating the state of a port make port port type state procedure Returns a new port with type port type and the given state The port will be an input output or I O port according to port type port type port procedure Returns the port type of port port state port procedure Returns the state component of port set port state port object procedure Changes the state component of port to be object Returns an unspecified value port operation port symbol procedure Equivalent to port type operation port type port symbol port operation names port procedure Equivalent to port type operation names port type port make eof object input port procedure Returns an object that satisfies the predicate eof object This is sometimes useful when building input ports 14 9 3 Input Port Operations This secti
403. ntries equal to element removed These procedures are like delq delv and delete except that they destructively modify list delq uses eq to compare element with the entries in list delv uses eqv and delete uses equal Because the result may not be eq to list it is desirable to do something like set x delete x Chapter 7 Lists 113 define x a b c b delete b x gt a c x gt abcb define x a b c b delete b x gt ac x gt ac Returns correct result delete a x gt c Didn t modify what x points to x gt ac delete member procedure deletor predicate procedure Returns a deletion procedure similar to delv or delete Deletor should be one of the procedures list deletor or list deletor Predicate must be an equivalence predicate The returned procedure accepts exactly two arguments first an object to be deleted and second a list of objects from which it is to be deleted If deletor is list deletor the procedure returns a newly allocated copy of the given list in which all entries equal to the given object have been removed If deletor is list deletor the procedure returns a list consisting of the top level elements of the given list with all entries equal to the given object removed the given list is destructively modified to produce the result In either case predicate is used to compare the given object to the elements of the given list Here are some examples
404. numeric 100 string trim left 4 char set ll string trim but x y is char set x y 6 6 Searching Strings The first few procedures in this section perform string search in which a given string the text is searched to see if it contains another given string the pattern as a proper substring At present these procedures are implemented using a hybrid strategy For short patterns of less than 4 characters the naive string search algorithm is used For longer patterns the Boyer Moore string search algorithm is used string search forward pattern string procedure substring search forward pattern string start end procedure Pattern must be a string Searches string for the leftmost occurrence of the substring pattern lf successful the index of the first character of the matched substring is returned otherwise f is returned substring search forward limits its search to the specified substring of string string search forward searches all of string string search forward rat pirate g P gt 2 string search forward rat pirate rating gt 2 substring search forward rat pirate rating 4 13 gt 7 substring search forward rat pirate rating 9 13 gt f 94 MIT Scheme Reference string search backward pattern string procedure substring search backward pattern string start end procedure Pattern must be a string Searches string for the rightmost occurre
405. ny other value is ignored and the reader uses radix 10 Note that much of the number syntax is invalid for radixes other than 10 The reader detects cases where such invalid syntax is used and signals an error However 188 MIT Scheme Reference problems can still occur when parser radix is set to 16 because syntax that normally denotes symbols can now denote numbers e g abc Because of this it is usually undesirable to set this variable to anything other than the default The default value of this variable is 10 parser canonicalize symbols variable This variable controls how the parser handles case sensitivity of symbols If it is bound to its default value of t symbols read by the parser are converted to lower case before being interned Otherwise symbols are interned without case conversion In general it is a bad idea to use this feature as it doesn t really make Scheme case sensitive and therefore can break features of the Scheme runtime that depend on case insensitive symbols 14 5 Output Procedures Output ports may or may not support buffering of output in which output characters are collected together in a buffer and then sent to the output device all at once Most of the output ports implemented by the runtime system support buffering Sending all of the characters in the buffer to the output device is called flushing the buffer In general output procedures do not flush the buffer of an output port unless
406. o flonum object procedure Returns t if object is a flonum otherwise returns f flo flonum1 flonum2 procedure flo flonuml flonum2 procedure flo gt flonum1 flonum2 procedure These procedures are the standard order and equality predicates on flonums When compiled they do not check the types of their arguments flo zero flonum procedure flo positive flonum procedure flo negative flonum procedure Each of these procedures compares its argument to zero When compiled they do not check the type of their argument flo flonuml flonum2 procedure flo flonum1 flonum2 procedure flo flonuml flonum2 procedure flo flonum1 flonum2 procedure These procedures are the standard arithmetic operations on flonums When compiled they do not check the types of their arguments flo finite flonum procedure The IEEE floating point number specification supports three special numbers posi tive infinity inf negative infinity inf and not a number NaN This predicate returns f if flonum is one of these objects and t if it is any other floating point number flo negate flonum procedure This procedure returns the negation of its argument When compiled it does not check the type of its argument Equivalent to flo 0 flonum 74 MIT Scheme Reference flo abs flonum procedure flo exp flonum procedure flo log flonum procedure flo sin flonum procedure flo cos flonum procedure flo tan flonum procedure flo asin f
407. ocedure 144 modulus of integers 0000200 63 moving of bit string elements 126 moving of string elements 101 moving of vector elements 121 multiple values from procedure 169 multiplication of numbers 62 must be notational convention 4 mutable 2222232 9e odes Dre er RE ERES 9 mutation procedure defn 0 11 Concept Index N name of character 2660 208 2205 eh cde nes 77 Name ot file ca sp utm temp eme eaten 232 name OF symbol 2 Ret RES 129 name of value defn 00 000000 6 name pathname component 223 named lambda defn 0000005 16 named l t dein 22 5 oeste riei roras 27 names XMM i scoop Rp teed aude 217 naming conventions sees eee 11 308 negative infinity inf 000 73 negative number i i2levexacc ua d RR RR 62 nesting of quasiquote expressions 23 newest as pathname component 225 newline character defn sussuueu 78 newline character output to port 189 newline translation 0 00 eee 181 non local exit i 2i en b Re ETE 168 not a number NaN aep eor renias eipa iig iias 73 notation dotted defn 00 105 notational conventions lesse seeee eese 4 null string predicate for
408. ocedure vector cell number promise weak pair char pair string condition 1 2 8 Storage Model This section describes a model that can be used to understand Scheme s use of storage Variables and objects such as pairs vectors and strings implicitly denote locations or sequences of locations A string for example denotes as many locations as there are characters in the string These locations need not correspond to a full machine word A new value may be stored into one of these locations using the string set procedure but the string continues to denote the same locations as before An object fetched from a location by a variable reference or by a procedure such as car vector ref or string ref is equivalent in the sense of eqv to the object last stored in the location before the fetch Every location is marked to show whether it is in use No variable or object ever refers to a location that is not in use Whenever this document speaks of storage being allocated for a variable or object what is meant is that an appropriate number of locations are chosen from the set of locations that are not in use and the chosen locations are marked to indicate that they are now in use before the variable or object is made to denote them In many systems it is desirable for constants i e the values of literal expressions to reside in read only memory To express this it is convenient to imagine that every object that denotes locati
409. ociations in the tree rb tree datum list rb tree procedure Returns a newly allocated list of the datums in rb tree Each element of the list corresponds to one of the associations in rb tree so if the tree contains multiple associations with the same datum so will this list The list is sorted by the keys of the associations even though they do not appear in the result The time required by this operation is proportional to the number of associations in the tree This procedure is equivalent to lambda rb tree map cdr rb tree gt alist rb tree rb tree equal rb tree 1 rb tree 2 datum procedure Compares rb tree 1 and rb tree 2 for equality returning t iff they are equal and otherwise The trees must have been constructed with the same equality and order predicates same in the sense of eq The keys of the trees are compared using the key predicate used to build the trees while the datums of the trees are compared using the equivalence predicate datum The worst case time required by this operation is proportional to the number of associations in the tree rb tree empty rb tree procedure Returns t iff rb tree contains no associations Otherwise returns rb tree size rb tree procedure Returns the number of associations in rb tree an exact non negative integer The av erage and worst case times required by this operation are proportional to the number of associations in the tree Chapter 11 Associations 155
410. odd dep RR ehe 61 81 Zagcadd vaa uds ie rer RAE ados 51 60 61 90 EO Leid surveil id te alsin is Ree Poe eis 25 320 gt Tc 61 HH 61 7 MPH 212 214 4 NP 24 105 IM ENTE 87 hp ok ER 87 NT goss TD RR 87 c MMC urn 87 i MCN MP FEPTEM a Racecar 62 id table alist s esses 142 id table get i 2 idc ed a ebd ebpEr 142 1d table looku p 4 Io o ERREUR Rn 142 id table put eg pepe Pede ndr 142 1d table remove 0 0 0 cece eee ee eee 142 ld table 2o ee ee eee a 142 2 2d get iieiue bee edie EE 143 2d get alist x tances bb dre ee e 143 2d get alist y zeit bisddenerer we Pa does 143 2d p t I dina oet seite eerta edd et E E 142 2d removel liss dew BRERA 9 Idee 143 8 8 bit alphabet i see Rhet 86 abortus rua bigg RE RE Pw 263 266 cp ETPETPMT 63 CCGDIII PDT 22 access condition esse sece nni nia ed 270 271 ACOS e RR o Via eb Ro he bal CER EUR UR RE E 66 activate windowon os2 graphics device 298 alist rb tr e s coe gee repr IER 155 alist wt tree e dv capensis cR PIRE 158 alist cODpy oii eesse dg uu reddes bius 141 alist 2 249 teh diia Fe D i gc on ie 140 allocate host address ss sse 256 alphabet 2 2 ccu Rn REP beer 210 alphabett 2 o Meg ig rr Re EP Rer 86 alphabet tcr PER Eg pedes 86 MIT Scheme Reference alphabet gt char set 2 cee e eee 86 alphabet gt code points suus 85 alphabet gt sStrTin
411. of the constructor is make followed by the name of the structure e g make foo 32 MIT Scheme Reference Otherwise name must be a symbol and a keyword constructor is defined with this symbol as its name If the keyword constructor option is specified the default constructor is not defined Additionally the keyword constructor option may be specified multiple times to define multiple keyword constructors this is usually not done since such constructors would all be equivalent define structure foo keyword constructor make bar a b foo a make bar b 20 a 19 gt 19 type descriptor name structure option This option cannot be used with the type or named options By default structures are implemented as records The name of the structure is defined to hold the type descriptor of the record defined by the structure The type descriptor option specifies a different name to hold the type descriptor define structure foo a b foo record type 18 define structure bar type descriptor bar rtd a b bar Unbound variable bar bar rtd record type 19 conc name name structure option By default the prefix for naming accessors and modifiers is the name of the structure followed by a hyphen The conc name option can be used to specify an alternative If name is not given the prefix is the name of the structure followed by a hyphen the default If name is f the slot names are used directly without prefix
412. of length 4 byte vectors are just character strings that are accessed using vector 8b ref rather than string ref The bytes in an IP address read in the same order as they do when written out get host by name www swiss 022 027 000 020 get host by name host name procedure Looks up the internet host name host name using the DNS returning a vector of IP addresses for the corresponding host or f if there is no such host Usually the returned vector has only one element but if a host has more than one network interface the vector might have more than one element get host by name www swiss 022 027 000 020 get host by address ip address procedure Does a reverse DNS lookup on ip address returning the internet host name corre sponding to that address or f if there is no such host get host by address N022N027N000N020 swissnet ai mit edu canonical host name host name procedure Finds the canonical internet host name for host name For example canonical host name zurich gt zurich ai mit edu canonical host name www swiss swissnet ai mit edu In both examples the default internet domain ai mit edu is added to host name In the second example www swiss is an alias for another computer named swissnet get host name procedure Returns the string that identifies the computer that MIT Scheme is running on Usually this is an unqualified internet host name i e the host name wit
413. of this document 1 1 1 Errors When this manual uses the phrase an error will be signalled it means that Scheme will call error which normally halts execution of the program and prints an error message When this manual uses the phrase it is an error it means that the specified action is not valid in Scheme but the system may or may not signal the error When this manual says that something must be it means that violating the requirement is an error 1 1 2 Examples This manual gives many examples showing the evaluation of expressions The examples have a common format that shows the expression being evaluated on the left hand side an arrow in the middle and the value of the expression written on the right For example 1 2 gt 3 Sometimes the arrow and value will be moved under the expression due to lack of space Occasionally we will not care what the value is in which case both the arrow and the value are omitted If an example shows an evaluation that results in an error an error message is shown prefaced by error 1 foo error Illegal datum An example that shows printed output marks it with 4 Chapter 1 Overview 5 begin write foo bar foo gt bar When this manual indicates that the value returned by some expression is unspecified it means that the expression will evaluate to some object without signalling an error but that pr
414. of two elements the name of the operation a symbol and the procedure that implements it Port type is either f or a port type if it is a port type any operations implemented by port type but not specified in operations will be implemented by the resulting port type Operations need not contain definitions for all of the standard operations the pro cedure will provide defaults for any standard operations that are not defined At a minimum the following operations must be defined for input ports read char and peek char for output ports either write char or write substring 1 0 ports must supply the minimum operations for both input and output If an operation in operations is defined to be f then the corresponding operation in port type is not inherited If read char is defined in operations then any standard input operations defined in port type are ignored Likewise if write char or write substring is defined in operations then any standard output operations defined in port type are ignored This feature allows overriding the standard operations without having to enumerate them port type object procedure input port type object procedure output port type object procedure i o port type object procedure These predicates return t if object is a port type input port type output port type or I O port type respectively Otherwise they return stf port type operations port type procedure Returns a newly allocated list co
415. of two parts I O procedures that read and write UTF 8 characters and an alphabet abstraction which is an efficient implementation of sets of Unicode code points similar to the char set abstraction The basic unit in a Unicode implementation is the code point Chapter 5 Characters 85 unicode code point object procedure Returns t if object is a Unicode code point Code points are implemented as exact non negative integers Code points are further limited by the Unicode standard to be strictly less than x80000000 The next few procedures do 1 0 on code points read utf8 code point port procedure Reads and returns a UTF 8 encoded code point from port Returns an end of file object if there are no more characters available from port Signals an error if the input stream isn t a valid UTF 8 encoding write utf8 code point code point port procedure Writes code point to port in the UTF 8 encoding utf8 string gt code point string procedure Reads and returns a UTF 8 encoded code point from string Equivalent to read utf8 code point string gt input port string code point gt utf8 string code point procedure Returns a newly allocated string containing the UTF 8 encoding of code point Equiv alent to with string output port lambda port write utf8 code point code point port Applications often need to manipulate sets of characters such as the set of alphabetic characters or the set of whitespace characters The
416. of unparser state to be given to the printer when they are needed The procedure generates some output by writing to the output port using the usual output operations and the value yielded by procedure is returned from with current unparser state The port passed to procedure should only be used within the dynamic extent of procedure 14 8 Prompting This section describes procedures that prompt the user for input Why should the programmer use these procedures when it is possible to do prompting using ordinary input and output procedures One reason is that the prompting procedures are more succinct However a second and better reason is that the prompting procedures can be separately customized for each user interface providing more natural interaction The interfaces for Edwin and for GNU Emacs have already been customized in this fashion because Edwin and Emacs are very similar editors their customizations provide very similar behavior 6 Except that if the argument name is a string its external representation is generated by write string Chapter 14 Input Output 195 Each of these procedure accepts an optional argument called port which if given must be an 1 0 port If not given this port defaults to the value of interaction i o port this is initially the console 1 0 port prompt for command expression prompt port procedure Prompts the user for an expression that is to be executed as a command This is the procedure calle
417. ograms should not depend on the value in any way 1 1 3 Entry Format Each description of an MIT Scheme variable special form or procedure begins with one or more header lines in this format template category where category specifies the kind of item variable special form or procedure The form of template is interpreted depending on category Variable Template consists of the variable s name Special Form Template starts with the syntactic keyword of the special form followed by a description of the special form s syntax The description is written using the following conventions Named components are italicized in the printed manual and uppercase in the Info file Noise keywords such as the else keyword in the cond special form are set in a fixed width font in the printed manual in the Info file they are not distinguished Parentheses indicate themselves A horizontal ellipsis is describes repeated components Specifically thing indicates zero or more occurrences of thing while thing thing indicates one or more occurrences of thing Brackets enclose optional components Several special forms e g lambda have an internal component consisting of a series of expressions usually these expressions are evaluated sequentially un der conditions that are specified in the description of the special form This sequence of expressions is commonly referred to as the body of the special form
418. oked and raw mode by the symbol raw Additionally the value f represents no mode it is the terminal mode of a port that is not a terminal An argument called mode must be one of these three values A port argument to any of these procedures may be any port even if that port does not support terminal mode in that case the port is not modified in any way port input terminal mode port procedure Returns the input terminal mode of port port set input terminal mode port mode procedure Changes the input terminal mode of port to be mode Returns an unspecified value port with input terminal mode port mode thunk procedure Thunk must be a procedure of no arguments port with input terminal mode binds the input terminal mode of port to be mode executes thunk restores the input 204 MIT Scheme Reference terminal mode of port to what it was when port with input terminal mode was called and returns the value that was yielded by thunk This binding is performed by dynamic wind which guarantees that the input terminal mode is restored if thunk escapes from its continuation port output terminal mode port procedure Returns the output terminal mode of port port set output terminal mode port mode procedure Changes the output terminal mode of port to be mode Returns an unspecified value port with output terminal mode port mode thunk procedure Thunk must be a procedure of no arguments port with output terminal mode binds the output t
419. on newline is the same as linefeed but this may change in the future so you should not depend on it All of the standard ASCII names for non printing characters are supported NUL BS DLE CAN DEL SOH STX HT LF DC1 DC2 EM SUB char gt name char slashify Returns a string corresponding to the printed representation of char ETX EOT VT FF DC3 DC4 ESC FS ENQ CR NAK GS ACK BEL SO SI SYN ETB RS US procedure This is the character or character name component of the external representation combined with the appropriate bucky bit prefixes char name char name char name char name a space c a control a todd tan Space C a C a Slashify if specified and true says to insert the necessary backslash characters in the result so that read will parse it correctly In other words the following generates the external representation of char If slashify is not specified it defaults to f string append char gt name char t name gt char string Converts a string that names a character into the character specified If string does not name any character name gt char signals an error name gt char name gt char name gt char name gt char Wal space c a control a V V V procedure a Space C a C a Chapter 5 Characters 79 5 2 Comparison of Characters char charl char2 procedure char charl c
420. on t distinguish uppercase and lowercase letters string suffix ous bulbous gt t string suffix any string gt dit 6 8 Regular Expressions MIT Scheme provides support for using regular expressions to search and match strings This manual does not define regular expressions instead see section Syntax of Regular Expressions in The Emacs Editor In addition to providing standard regular expression support MIT Scheme also provides the REXP abstraction This is an alternative way to write regular expressions that is easier to read and understand than the standard notation Regular expressions written in this notation can be translated into the standard notation The regular expression support is a run time loadable option To use it execute load option regular expression once before calling any of the procedures defined here Chapter 6 Strings 97 6 8 1 Regular expression procedures Procedures that perform regular expression match and search accept standardized argu ments Regexp is the regular expression it is a string String is the string being matched or searched Procedures that operate on substrings also accept start and end index arguments with the usual meaning The optional argument case fold says whether the match search is case sensitive if case fold is f it is case sensitive otherwise it is case insensitive The optional argument syntax table is a character syntax table that defines the cha
421. on describes the standard operations on input ports Following that some useful custom operations are described read char input port operation on input port Removes the next character available from input port and returns it If input port has no more characters and will never have any e g at the end of an input file this operation returns an end of file object If input port has no more characters but will eventually have some more e g a terminal where nothing has been typed recently and it is in non blocking mode f is returned otherwise the operation hangs until input is available peek char input port operation on input port Reads the next character available from input port and returns it The character is not removed from input port and a subsequent attempt to read from the port will get that character again In other respects this operation behaves like read char Chapter 14 Input Output 199 discard char input port operation on input port Discards the next character available from input port and returns an unspecified value In other respects this operation behaves like read char char ready input port k operation on input port char ready returns t if at least one character is available to be read from input port If no characters are available the operation waits up to k milliseconds before returning amp f returning immediately if any characters become available while it is waiting read string input port char set
422. on destructive manner by adding new entries to the front of the alist alist object procedure Returns t if object is an association list including the empty list otherwise returns f Any object satisfying this predicate also satisfies list assq object alist procedure assv object alist procedure assoc object alist procedure These procedures find the first pair in alist whose car field is object and return that pair the returned pair is always an element of alist not one of the pairs from which alist is composed If no pair in alist has object as its car f n b not the empty list is returned assq uses eq to compare object with the car fields of the pairs in alist while assv uses eqv and assoc uses equa17 define e a 1 b 2 c 3 assq a e gt a 1 assq b e gt b 2 assq d e gt f assq list a a b c tf assoc list a a c Cad assq 5 2 3 5 7 11 13 unspecified assv 5 2 3 5 7 11 13 5 7 association procedure predicate selector procedure Returns an association procedure that is similar to assv except that selector a pro cedure of one argument is used to select the key from the association and predicate an equivalence predicate is used to compare the key to the given item This can be used to make association lists whose elements are say vectors instead of pairs also see Section 7 6 Searching Lists pag
423. on identically to flush output Chapter 14 Input Output 201 output port write char output port char procedure output port write substring output port string start end procedure output port fresh line output port procedure output port flush output output port procedure output port discretionary flush output output port procedure Each of these procedures invokes the respective operation on output port For exam ple the following are equivalent output port write char output port char Coutput port operation output port write char output port char output port write string output port string procedure Writes string to output port Equivalent to output port write substring output port string 0 string length string The following custom operations are generally useful buffered output chars output port operation on output port Returns the number of unwritten characters that are stored in output port s buffer This will always be less than or equal to the buffer s size output buffer size output port operation on output port Returns the maximum number of characters that output port s buffer can hold set output buffer size output port size operation on output port Resizes output port s buffer so that it can hold at most size characters Characters in the buffer are discarded Size must be an exact non negative integer x size output port operation on output port Returns an exact positive integer that is the width of o
424. on os2 graphics device 298 measure interval i sr eee dd pes 247 nemnber ooedeeeenbra4heda ex wn ERES 114 member procedure s esee eee eee 114 MOM uot tinto Rp ISP Tn RSS 114 nel dcop imemetivdtiincdilicies DUPLI E 114 merge pathnames sssi 181 227 merge sort idee sak 9c d dd db eR Ende Lf merge sort acc eas tes erri df eee ge a 122 microcode id operating system 254 microcode id operating system name 254 microcode id operating system variant 254 IDinaz2o cri Ride a Faeroe Gc stu hrsg habs 62 minimize windowon os2 graphics device 298 modulo iiissenz6Afbeeeue e 10 dd paa tef YES 63 month long string se m bee 246 month max daysS iz cele eb rere 241 month short string i see e nae 246 move windowon win32 graphics device 295 move windowon x graphics device 291 mu ffle warning i pes 259 263 266 328 N name chabfu srseeniberee esee APER ae bead 78 MAMOG MEET ms 33 named lambda 2 2 29 err hh 16 20 27 NaN 222icke 2epP ebeeeesttewese tide sees AE 73 nearest repl environment 176 negativef amp c celc9 e 4e 4 dae EU EE HE Ree PEE 62 nowlinG l boy ieee ueber e erbe waa Be ae 189 be EE E ee 127 MING ee pote lemsesiesioeed waa err EE RES 110 NO1SC 25h bbin EE E espe educi 213 HD 127 not chat ene EEE queres EPEFOS RS 210 not char 632 uae ee er tee ee dee a eae XE 210 n
425. one local decoded time gt 5 time zone object procedure Returns stt if object is an exact number between 24 and 24 inclusive that when multiplied by 3600 is an integer time zone 5 gt t time zone 11 2 gt t time zone 11 7 gt f month max days month procedure Returns the maximum number of days possible in month Month must be an exact integer between 1 and 12 inclusive month max days 2 29 month max days 3 31 month max days 4 30 242 MIT Scheme Reference 15 5 3 File Time As stated above file time is operating system dependent As of this writing two formats are used For unix and Windows systems file time is the number of seconds since midnight January 1 1970 UTC the standard unix time convention OS 2 represents file time as a 32 bit unsigned integer in which the time components are broken down into unsigned bit fields The components are always stated in local time The fields from MSB to LSB are 7 bits representing the year relative to 1900 4 bits representing the month numbered 1 to 12 5 bits representing the day of the month numbered 1 to 31 5 bits representing the hour of the day numbered 0 to 23 6 bits representing the minute numbered 0 to 59 5 bits representing the second This field is unusual in that it counts units of two seconds so it is a number between 0 and 29 representing second counts corresponding to 0 through 58 The following procedu
426. one during the static phase The default rehash size of a newly constructed hash table is 2 0 Warning The use of an exact positive integer for a rehash size is almost always unde sirable this option is provided solely for compatibility with the Common Lisp hash table mechanism The reason for this has to do with the time penalty for resizing the hash table The time needed to resize a hash table is proportional to the number of associations in the table This resizing cost is amortized across the insertions required to fill the table to the point where it needs to grow again If the table grows by an amount proportional to the number of associations then the cost of resizing and the increase in size are both proportional to the number of associations so the amortized cost of an insertion operation is still bounded by a constant However if the table grows by a constant amount this is not true the amortized cost of an insertion is not bounded by a constant Thus using a constant rehash size means that the average cost of an insertion increases proportionally to the number of associations in the hash table The rehash threshold is a real number between zero exclusive and one inclusive that specifies the ratio between a hash table s usable size and its physical size Decreasing the rehash threshold decreases the probability of worse than average insertion deletion and lookup times but increases the physical size of the table for a given usab
427. ons A predicate is a procedure that always returns a boolean value t or By convention predicates usually have names that end in A mutation procedure is a procedure that alters a data structure By convention mu tation procedures usually have names that end in 1 3 6 Comments The beginning of a comment is indicated with a semicolon Scheme ignores everything on a line in which a semicolon appears from the semicolon until the end of the line The entire comment including the newline character that terminates it is treated as whitespace An alternative form of comment sometimes called an extended comment begins with the characters and ends with the characters This alternative form is an MIT Scheme extension As with ordinary comments all of the characters in an extended com ment including the leading and trailing are treated as whitespace Comments of this form may extend over multiple lines and additionally may be nested unlike the comments of the programming language C which have a similar syntax This is a comment about the FACT procedure Scheme ignores all of this comment The FACT procedure computes the factorial of a non negative integer amp This is an extended comment Such comments are useful for commenting out code fragments 3 define fact lambda n if n 0 This is another comment 1 Base case return 1 n fact
428. ons is identical fix zero fixnum fix fixnum 0 Similarly fix positive and fix negative produce code identical to equivalent expressions using fix gt and fix lt fix fixnum fixnum procedure fix fixnum fixnum procedure fix fixnum fixnum procedure fix quotient fixnum fixnum procedure fix remainder fixnum fixnum procedure fix gcd fixnum fixnum procedure fix 1 fixnum procedure fix 1 fixnum procedure These procedures are the standard arithmetic operations on fixnums When compiled they do not check the types of their arguments Furthermore they do not check to see if the result can be encoded as a fixnum If the result is too large to be encoded as a fixnum a malformed object is returned with potentially disastrous effect on the garbage collector fix divide fixnum fixnum procedure This procedure is like integer divide except that its arguments and its results must be fixnums It should be used in conjunction with integer divide quotient and integer divide remainder 72 MIT Scheme Reference The following are bitwise logical operations on fixnums fix not fixnum procedure This returns the bitwise logical inverse of its argument When compiled it does not check the type of its argument fix not 0 gt 1 fix not 1 gt 0 fix not 1 gt 2 fix not 34 gt 33 fix and fixnum fixnum procedure This returns the bitwise logical and of its arguments When compiled it does not check the types of its a
429. ons is associated with a flag telling whether that object is mutable or immutable The constants and the strings returned by symbol gt string are then the im mutable objects while all objects created by other procedures are mutable It is an error to attempt to store a new value into a location that is denoted by an immutable object Note that the MIT Scheme compiler takes advantage of this property to share constants but that these constants are not immutable Instead two constants that are equal may be eq in compiled code 10 MIT Scheme Reference 1 3 Lexical Conventions This section describes Scheme s lexical conventions 1 3 1 Whitespace Whitespace characters are spaces newlines tabs and page breaks Whitespace is used to improve the readability of your programs and to separate tokens from each other when necessary A token is an indivisible lexical unit such as an identifier or number White space is otherwise insignificant Whitespace may occur between any two tokens but not within a token Whitespace may also occur inside a string where it is significant 1 3 2 Delimiters All whitespace characters are delimiters In addition the following characters act as delimiters Cees o Finally these next characters act as delimiters despite the fact that Scheme does not define any special meaning for them L J 4 f For example if the value of the variable name is max list Hi name 1 2 gt Hi max 3
430. ontexts where expressions are allowed Definitions may only occur at the top level of a program and at the beginning of a lambda body that is the body of a lambda let let letrec fluid let or procedure define expression A definition that occurs at the top level of a program is called a top level definition and a definition that occurs at the beginning of a body is called an internal definition Chapter 2 Special Forms 21 In the second form of define called procedure define the component formals is identical to the component of the same name in a named lambda expression In fact these two expressions are equivalent define namel name2 expression expression define namel named lambda namel name2 expression expression 2 4 1 Top Level Definitions A top level definition define variable expression has essentially the same effect as this assignment expression if variable is bound set variable expression If variable is not bound however define binds variable to a new location in the current environment before performing the assignment it is an error to perform a set on an unbound variable If you omit expression the variable becomes unassigned an attempt to reference such a variable is an error define add3 lambda x x 3 gt unspecified add3 3 gt 6 define first car unspecified first 1 2 gt 1 define bar unspecified bar Unassigned variable 2
431. ontinuation that encapsulates the state of the computation in which the condition occurred This continuation is used for analyzing the computation to learn more about the context in which the condition occurred It is not intended to provide a mechanism for continuing the computation that mechanism is provided by restarts 16 5 1 Generating Operations on Conditions Scheme provides four procedures that take a condition type as input and produce oper ations on the corresponding condition object These are reminiscent of the operations on record types that produce record operators see Section 10 4 Records page 132 Given a condition type it is possible to generate a constructor for instances of the type using condition constructor an accessor to extract the contents of a field in instances of the type using condition accessor a predicate to test for instances of the type using condition predicate and a procedure to create and signal an instance of the type using condition signaller Notice that the creation of a condition object is distinct from signalling an occurrence of the condition Condition objects are first class they may be created and never signalled or they may be signalled more than once Further notice that there are no procedures for modifying conditions once created a condition cannot be altered condition constructor condition type field names procedure Returns a constructor procedure that takes as arguments value
432. or initial offset 3 a b c make foo 1 2 3 gt HU 0O O 123 The essential differences between MIT Scheme s define structure and Common Lisp s defstruct are The default constructor procedure takes positional arguments in the same order as specified in the definition of the structure A keyword constructor may be specified by giving the option keyword constructor BOA constructors are described using Scheme lambda lists Since there is nothing corresponding to amp aux in Scheme lambda lists this functionality is not implemented By default no copier procedure is defined The side effect procedure corresponding to the accessor foo is given the name set foo Keywords are ordinary symbols use foo instead of foo The option values false nil true and t are treated as if the appropriate boolean constant had been specified instead The print function option is named print procedure Its argument is a procedure of two arguments the unparser state and the structure instance rather than three as in Common Lisp By default named structures are tagged with a unique object of some kind In Common Lisp the structures are tagged with symbols This depends on the Common Lisp package system to help generate unique tags MIT Scheme has no such way to generate unique symbols The named option may optionally take an argument which is normally the name of a variable any expression may be used but it is evaluated whenever
433. or The restriction is necessary because Scheme passes arguments by value rather than by name In the most common uses of letrec all the inits are lambda or delay expressions and the restriction is satisfied automatically 2 3 Dynamic Binding fluid let variable init expression expression special form The inits are evaluated in the current environment in some unspecified order the current values of the variables are saved the results are assigned to the variables the expressions are evaluated sequentially in the current environment the variables are restored to their original values and the value of the last expression is returned Chapter 2 Special Forms 19 The syntax of this special form is similar to that of let but fluid let temporarily rebinds existing variables Unlike let fluid let creates no new bindings instead it assigns the value of each init to the binding determined by the rules of lexical scoping of its corresponding variable MIT Scheme allows any of the inits to be omitted in which case the corresponding variables are temporarily unassigned An error of type condition type unbound variable is signalled if any of the vari ables are unbound However because fluid let operates by means of side effects it is valid for any variable to be unassigned when the form is entered Here is an example showing the difference between fluid let and let First see how let affects the binding of a variable def
434. or the number of values returned For example map string gt symbol Finally as in the matcher language we have sexp and with pointer to support em bedding Scheme code in the parser sexp expression parser expression The sexp expression allows arbitrary Scheme code to be embedded inside a parser The expression operand must evaluate to a parser procedure at run time the proce dure is called to parse the parser buffer This is the parser language equivalent of the sexp expression in the matcher language The case in which expression is a symbol is so common that it has an abbreviation sexp symbol may be abbreviated as just symbol with pointer identifier pexp parser expression The with pointer expression fetches the parser buffer s internal pointer using get parser buffer pointer binds it to identifier and then parses the pattern specified by pexp Identifier must be a symbol This is the parser language equivalent of the with pointer expression in the matcher language 14 11 3 Parser language Macros The parser and matcher languages provide a macro facility so that common patterns can be abstracted The macro facility allows new expression types to be independently defined in the two languages The macros are defined in heirarchically organized tables so that different applications can have private macro bindings define matcher macro formals expression special form define parser macro formals expression s
435. otification output port 180 262 nt file mode archive 004 236 nt file mode compressed 236 nt file mode directory 236 nt file mode hidden sese 236 nt file mode normal lesse 236 nt file mode read only 235 nt file mode system 000 236 nt file mode temporary 236 NUD fs 2 her vata ded lees 109 110 136 number string eem read ahs Gack ROUES 68 number wt type louer ere e Sede 158 number i du odedle eu beue Sas 60 numerat r 2i 2i56ergpeG a Pe beled ERE Reed 64 O object hash sede Gad ee deba a bue are aues 152 object hashed 24 cenae RERSRRE en 152 object unhash odere e eR EL dS 152 t 2 62 open binary i o file 0 182 open binary input file e n 182 open binary output file 182 open dib c ed Iv Seeded eee s IE 310 open i o f110 re ERE RESP 182 open input fileo 42 2 be aee Tu PES 182 open output fil 2 d b RE ds 182 open tcp server socket sss 253 open tcp stream socket s 253 OM ites ined cog ANA Be RNa Upper ed 26 127 oS hosthame oves ete la wed eee bee 256 os2 file mode archived 235 os2 file mode directory 235 os2 file mode hidden 235 os2 file mode read only 235 os2 file
436. our rights under this License However parties who have received copies or rights from you under this License will not have their licenses terminated so long as such parties remain in full compliance 10 FUTURE REVISIONS OF THIS LICENSE The Free Software Foundation may publish new revised versions of the GNU Free Documentation License from time to time Such new versions will be similar in spirit to the present version but may differ in detail to address new problems or concerns See http www gnu org copyleft Each version of the License is given a distinguishing version number If the Document specifies that a particular numbered version of this License or any later version applies to it you have the option of following the terms and conditions either of that specified version or of any later version that has been published not as a draft by the Free Software Foundation If the Document does not specify a version number of this License you may choose any version ever published not as a draft by the Free Software Foundation ADDENDUM How to use this License for your documents To use this License in a document you have written include a copy of the License in the document and put the following copyright and license notices just after the title page Copyright C year your name Permission is granted to copy distribute and or modify this document under the terms of the GNU Free Documentation License Version 1 1 or any
437. p ipee ttd XC hee ra bee ies 98 remaindef 2 ese ep rp LER E 63 64 renam file Rid s Rr du eee ae 232 resize windowon win32 graphics device 295 resize windowon x graphics device 291 resource 1d n gu dee Rr eb etx 306 330 restart effectof nre e rads 268 restart interactor esses e sess 268 restart name eek ERRARE 268 rOStart oLglnafem ebele ieima Saale tones 268 restore windowon os2 graphics device 298 TOUry orena tat ee eee SR ars 263 266 TOOVAT O ooa rna eee eB As added MM 117 reverse 265 s 20 Medan iiy nrp EDANE aa a at Ly Tyers Stri eoio eene cede rekes ed 102 TEVERSE StEING 2 opis its de rentre nee eet 102 TEVETSE SUDSELING ss ace cs ede eee ee RU end 102 revers substring lcsesclna den eee Ss 102 4 17 EE 100 TOXP hibited ieee becker eee Reka ates 100 TEXP gt LVELERP eoc oeri sudan ieee 99 rexp alternatives o2 2 2 99 3g a 100 rexp any chlar isigssbeseebeLitg beprteree tet 99 rexp case fold 122 n RARI Res 101 rexp compile sss based ede ee tae eee hte ae 99 rexp grou p seerzekgucdg hime npe 100 rexp line end ago gu rec PE 99 rexp line start c s3e be E eh 99 rexp not Syntax char s iiec pn 100 rexp not word char 45 vb ee dead 100 rexp not word edge iiass nate eds eser 99 rexp optional i1 3 ei Rin peers 101 rexp sSequence inericdbeiewepea Bead hil 100 rexp string end iiiii 24 wb am esie 99 rexp string St rt s
438. pair object procedure Returns t if object is a pair whose cdr contains a promise Otherwise returns f This could have been defined by define stream pair object and pair object promise cdr object stream car stream procedure stream first stream procedure Returns the first element in stream stream car is equivalent to car stream first is a synonym for stream car stream cdr stream procedure stream rest stream procedure Returns the first tail of stream Equivalent to force cdr stream stream rest is a synonym for stream cdr stream null stream procedure Returns t if stream is the end of stream marker otherwise returns f This is equivalent to nu11 but should be used whenever testing for the end of a stream stream length stream procedure Returns the number of elements in stream If stream has an infinite number of elements this procedure will not terminate Note that this procedure forces all of the promises that comprise stream stream ref stream k procedure Returns the element of stream that is indexed by k that is the kth element K must be an exact non negative integer strictly less than the length of stream stream head stream k procedure Returns the first k elements of stream as a list K must be an exact non negative integer strictly less than the length of stream stream tail stream k procedure Returns the tail of stream that is indexed by k that is the kth tail This is equivalent to perform
439. parser buffer char buffer procedure Returns the next character in buffer advancing the internal pointer past that char acter If there are no more characters available returns f and leaves the internal pointer unchanged peek parser buffer char buffer procedure Returns the next character in buffer or f if no characters are available Leaves the internal pointer unchanged parser buffer ref buffer index procedure Returns a character in buffer Index is a non negative integer specifying the character to be returned If index is zero returns the next available character if it is one returns the character after that and so on If index specifies a position after the last character in buffer returns 4f Leaves the internal pointer unchanged The internal pointer of a parser buffer can be read or written get parser buffer pointer buffer procedure Returns a parser buffer pointer object corresponding to the internal pointer of buffer set parser buffer pointer buffer pointer procedure Sets the internal pointer of buffer to the position specified by pointer Pointer must have been returned from a previous call of get parser buffer pointer on buffer Additionally if some of buffer s characters have been discarded by discard parser buffer head pointer must be outside the range that was discarded 206 MIT Scheme Reference get parser buffer tail buffer pointer procedure Returns a newly allocated string consisting of all of the characte
440. pecial form These special forms are used to define macros in the matcher and parser language respectively Formals is like the formals list of a define special form and expression is a Scheme expression If formals is a list or improper list of symbols the first symbol in the list is the name of the macro and the remaining symbols are interpreted as the formals of a lambda expression A lambda expression is formed by combining the latter formals with the expression and this lambda expression when evaluated becomes the expander The defined macro accepts the same number of operands as the expander A macro instance is expanded by applying the expander to the list of operands the result of the application is interpreted as a replacement expression for the macro instance If formals is a symbol it is the name of the macro In this case the expander is a procedure of no arguments whose body is expression When the formals symbol appears by itself as an expression in the language the expander is called with no arguments and the result is interpreted as a replacement expression for the symbol 216 MIT Scheme Reference define matcher expander identifier expander procedure define parser expander identifier expander procedure These procedures provide a procedural interface to the macro definition mechanism Identifier must be a symbol and expander must be an expander procedure as defined above Instances of the define matcher macro and d
441. pecified gt 3 gt unspecified gt 5 Variable may be an access expression see Chapter 13 Environments page 173 This allows you to assign variables in an arbitrary environment For example define x let y 0 the environment define y a y gt a access y x gt 0 set access y x 1 unspecified y gt a access y x gt 1 2 6 Quoting This section describes the expressions that are used to modify or prevent the evaluation of objects quote datum special form quote datum evaluates to datum Datum may be any external representation of a Scheme object see Section 1 2 6 External Representations page 8 Use quote to include literal constants in Scheme code quote a gt a quote a b c gt abc quote 1 2 12 quote datum may be abbreviated as datum The two notations are equivalent in all respects Chapter 2 Special Forms a a b c oe 1 2 gt quote a a V V V 23 a a b c 1 2 quote a quote a Numeric constants string constants character constants and boolean constants eval uate to themselves so they don t need to be quoted 2 abc abc 145932 145932 dt dt a a V V VV VE quasiquote template abc abc 145932 145932 t t a a special form Backquote or quasiquote expressions are useful for constructing a list or vector structure when most but not all of the desire
442. ponents Any component of a pathname may be the symbol unspecific meaning that the com ponent simply does not exist for file systems in which such a value makes no sense For example unix Windows and OS 2 file systems usually do not support version numbers so the version component for such a host might be unspecific In addition to f and unspecific the components of a pathname may take on the following meaningful values host An implementation defined type which may be tested for using the host pred icate device On systems that support this component Windows and OS 2 it may be specified as a string containing a single alphabetic character for which the alphabetic case is ignored directory A non empty list which represents a directory path a sequence of directories each of which has a name in the previous directory the last of which is the directory specified by the entire path Each element in such a path specifies the name of the directory relative to the directory specified by the elements to its left The first element of the list is either the symbol absolute or the symbol relative If the first element in the list is the symbol absolute then the directory component and subsequently the pathname is absolute the first component in the sequence is to be found at the root of the file system If the directory is relative then the first component is to be found in some as yet unspecified directory typically this i
443. procedure Takes a filename referring to an output file to be created and returns an output port capable of writing characters to a new file by that name If the file cannot be opened an error of type condition type file operation error is signalled The optional argument append is an MIT Scheme extension If append is given and not f the file is opened in append mode In this mode the contents of the file are not overwritten instead any characters written to the file are appended to the end of the existing contents If the file does not exist append mode creates the file and writes to it in the normal way open i o file filename procedure Takes a filename referring to an existing file and returns an 1 O port capable of both reading and writing the file If the file cannot be opened an error of type condition type file operation error is signalled This procedure is often used to open special files For example under unix this procedure can be used to open terminal device files PTY device files and named pipes open binary input file filename procedure open binary output file filename append procedure open binary i o file filename procedure These procedures open files in binary mode In all other respects they are identical to open input file open output file and open i o file respectively close all open files procedure This procedure closes all file ports that are open at the time that it is called and returns an unsp
444. pt port procedure Prompts the user for confirmation The result yielded by this procedure is a boolean The prompt string is formed by appending the string Cy or n to prompt unless prompt already ends in a space or is the null string The default behavior of this procedure is to print a fresh line a newline and the prompt string flush the output buffer then read a character in raw mode If the character is y Y or space the procedure returns t If the character is n N or rubout the procedure returns Otherwise the prompt is repeated Under Edwin or Emacs the confirmation is read in the minibuffer 14 9 Port Primitives This section describes the low level operations that can be used to build and manipulate 1 O ports The purpose of these operations is twofold to allow programmers to construct new kinds of 1 0 ports and to provide faster 1 O operations than those supplied by the standard high level procedures The latter is useful because the standard 1 0 operations provide defaulting and error checking and sometimes other features which are often unnecessary This interface provides the means to bypass such features thus improving performance The abstract model of an 1 0 port as implemented here is a combination of a set of named operations and a state The state is an arbitrary object the meaning of which is determined by the operations The operations are defined by a mapping from names to procedur
445. pth int palette procedure hpalette Return type dib Calls the CreateDIB entry of DIBUTILS DLL Creates a DIB of width by height pixels and depth bits of colour information The style parameter determines how the bitmap is stored I have only ever used BI_RGB If depth lt 8 then the palette determines the DIB s colour table crop bitmap bm hbitmap left int top int right int bottom int procedure Return type hbitmap Calls the CropBitmap entry of DIBUTILS DLL Returns a new bitmap containing the image from a region of the original dib set pixels unaligned dib pixels string procedure Return type bool Calls the DIBSetPixelsUnaligned entry of DIBUTILS DLL Stuffs bytes from pixels into the bitmap There are no alignment constraints on pixels the usual way of doing this is to use the SetDIBits function which requires that every scan line of the bitmap is 32 bit word aligned even if the scan lines are not a multiple of 4 bytes long doing this 312 MIT Scheme Reference 18 3 2 Other parts of the DIB Utilities implementation The DIBUTILS DLL library is an ordinary DLL See the standard Microsoft Windows documentation on how to create DLLs Look at the code in the WIN32 DIBUTILS directory of the Scheme source Please note e For the foreign function interface to find the procedures they must be declared as exports in the DEF definition file e To load the DLL file use the find modu
446. r example writing output to a file port can signal an error if the disk containing the file is full that error would be signalled as a port error The port field contains the associated port condition type derived port error port condition condition type This is a concrete type that is signalled when port errors occur The port field contains the port associated with the error and the condition field contains a condition object that describes the error in more detail Usually the condition field contains a condition of type condition type system call error error derived port port condition procedure This procedure signals a condition of type condition type derived port error The port and condition fields of the condition are filled in from the corresponding arguments to the procedure condition type variable error location environment condition type This is an abstract type It indicates that an error associated with a variable has occurred The location field contains the name of the variable and the environment field contains the environment in which the variable was referenced condition type unbound variable location environment condition type This type is generated when a program attempts to access or modify a variable that is not bound The location field contains the name of the variable and the environment field contains the environment in which the reference occurred too Unbound variable foo To continue call RESTART wit
447. racter syntax such as which characters are legal word constituents This feature is primarily for Edwin so character syntax tables will not be documented here Supplying f for or omitting syntax table will select the default character syntax equivalent to Edwin s fundamental mode re string match regexp string case fold syntax table procedure re substring match regexp string start end case fold syntax table procedure These procedures match regexp against the respective string or substring returning 4f for no match or a set of match registers see below if the match succeeds Here is an example showing how to extract the matched substring let r re substring match regexp string start end and r substring string start re match end index 0 r re string search forward regexp string case fold syntax table procedure re substring search forward regexp string start end case fold procedure syntax table Searches string for the leftmost substring matching regexp Returns a set of match registers see below if the search is successful or f if it is unsuccessful re substring search forward limits its search to the specified substring of string re string search forward searches all of string re string search backward regexp string case fold syntax table procedure re substring search backward regexp string start end case fold procedure syntax table Searches string for the rightmost substring matching
448. re generated by the Pre sentation Manager and put in the message queue of a graphics device window Chapter 17 Graphics read button 299 operation on os2 graphics device This operation waits for the user to push a mouse button inside the client area of the graphics device window It then returns four values see Section 12 3 Continuations page 167 which are the button number the x and y coordinates of the mouse pointer at the time the button was pressed in pels pixels relative to the lower left hand corner of the client area and the graphics device that the mouse pointer was over at the time the button was pressed Note that this operation only works when button events are selected which is the default select user events mask operation on os2 graphics device This operation sets the event selection mask for the graphics device to mask The event selection mask is an exact non negative integer that specifies which types of incoming events are to be saved in the user event queue for later retrieval by the read user event operation The mask is specified by setting the bits corresponding to the event types that you are interested in as follows Number Mask AONoaonFWNRO tal e pa o Ko E ad N o e Description Button press release Close close the window WM CLOSE Focus change WM_SETFOCUS Key press release WM CHAR Paint WM PAINT Size change WM SIZE Visibility change WM SHOW Com
449. re of one argument Applies predicate to each element of list in order from left to right If predicate is true for any element of list the value yielded by predicate is immediately returned as the value of there exists predicate will not be applied to the remaining elements of list If predicate returns f for all of the elements of list then amp f is returned Chapter 7 Lists 117 for all list predicate procedure Predicate must be a procedure of one argument Applies predicate to each element of list in order from left to right If predicate returns f for any element of list is immediately returned as the value of for a117 predicate will not be applied to the remaining elements of list If predicate is true for all of the elements of list then t is returned 7 9 Miscellaneous List Operations circular list object procedure make circular list k element procedure These procedures are like list and make list respectively except that the returned lists are circular circular list could have been defined like this define circular list objects append objects objects reverse list procedure Returns a newly allocated list consisting of the top level elements of list in reverse order reverse a b c gt cba reverse a b c d e f gt Ce d boa reverse list procedure Returns a list consisting of the top level elements of list in reverse order reverse is like reverse except that
450. re vector procedure Procedure must be a procedure of one argument vector map applies procedure element wise to the elements of vector and returns a newly allocated vector of the results in order from left to right The dynamic order in which procedure is applied to the elements of vector is unspecified vector map cadr a b d e g h gt be h vector map lambda n expt n n 1 2 3 4 gt 1 4 27 256 vector map 5 7 9 gt 5 7 9 8 2 Selecting Vector Components vector object procedure Returns t if object is a vector otherwise returns f vector length vector procedure Returns the number of elements in vector vector ref vector k procedure Returns the contents of element k of vector K must be a valid index of vector vector ref 1 1235 8 13 21 5 8 vector set vector k object procedure Stores object in element k of vector and returns an unspecified value K must be a valid index of vector let vec vector 0 2 2 2 2 Anna vector set vec 1 Sue Sue vec gt 0 Sue Sue Anna Chapter 8 Vectors vector first vector vector second vector vector third vector vector fourth vector vector fifth vector vector sixth vector vector seventh vector vector eighth vector 121 procedure procedure procedure procedure procedure procedure procedure procedure These procedures access the first several elements of vector in the obvious way It i
451. record type is xml document which represents a complete XML document Each record type type has the following associated bindings type rtd is a variable bound to the record type descriptor for type The record type descriptor may be used as a specializer in SOS method definitions which greatly simplifies code to dispatch on these types type is a predicate for records of type type It accepts one argument which can be any object and returns stt if the object is a record of this type or f otherwise make type is a constructor for records of type type It accepts one argument for each field of type in the same order that they are written in the type description and returns a newly allocated record of that type type field is an accessor procedure for the field field in records of type type It accepts one argument which must be a record of that type and returns the contents of the corresponding field in the record set type field is a modifier procedure for the field field in records of type type It accepts two arguments the first must be a record of that type and the second is a new value for the corresponding field The record s field is modified to have the new value xml document declaration misc 1 dtd misc 2 root misc 3 record type The xml document record is the top level record representing a complete XML doc ument Declaration is either an xml declaration object or 4f Dtd is either an xml dtd object or 4f Root is an
452. rect rad idin ee ae Rd 234 file writeable c2 9 sre eas 234 fQill 6IPCl6n5 35222 ee aub 290 fill circleon x graphics device 290 fill polygOH 2 BGcoe c Re DR een 294 fill polygonon win32 graphics device 294 find coloron os2 graphics device 296 find coloron win32 graphics device 294 find m tching item 4 102929 o9 n d ns 113 fznd modul 2 253224 2 20 2 PR CRAP Red 307 find restarte 2 0 MER AR Eae 263 267 fXTSU I13 29 01 de kee ie eo PIE E Eg 110 fXxi holoslb2aduce emesddaapues erqe d xd S dette TL PERS Piss ore Ade eae at a A ba aa EROR a detiene rail EDS 2202 CR Pan Sox piel end S 71 IE MSCS HUA Pr fail fuxi Pi nadehe Gh I aue abe oa d audes 71 EEX TKS 225 seed ere e ao alee qd ee be qus 71 EDI cil CR 71 BIS d d MP 71 abc Ee T och M PT 71 PRAM MH 72 fiz and a 2a xm eee ated ul D di pd ee Site ar 72 fiz divide tiis pin r A hale dans nace Oe eus F fxzx fuixnum 2 erue Sele Bee a aia rill fiz ged neige ed am needed dices uu ludos 71 hp RR CPC 72 fixinegativet v4 eee eee eee tee 71 PLEX NOG eee m T2 aae o A E E E EEE 12 fiz positiy 222 nbs etedee v e bee RES ra fax quOblOnt iccefne8eb e pir EGRE ease bie 71 fix remainder tel ee bI pear rs 71 XX XORl1 2 2749 4n E E EEE es gor andre denna os 72 fiz zero cerea lb e deed eme inb acean ares 71 ROO PLI T5 T LO aat pu nz Ed eal eU d e o e E dodo T3 il 0g d eee ed que aae aee iaa Rl er
453. ree implementation is a run time loadable option To use weight balanced trees execute load option wt tree once before calling any of the procedures defined here 11 7 1 Construction of Weight Balanced Trees Binary trees require there to be a total order on the keys used to arrange the elements in the tree Weight balanced trees are organized by types where the type is an object encapsulating the ordering relation Creating a tree is a two stage process First a tree type must be created from the predicate that gives the ordering The tree type is then used for making trees either empty or singleton trees or trees from other aggregate structures like association lists Once created a tree knows its type and the type is used to test compatibility between trees in operations taking two trees Usually a small number of tree types are created at the beginning of a program and used many times throughout the program s execution make wt tree type key lt procedure This procedure creates and returns a new tree type based on the ordering predicate key Key must be a total ordering having the property that for all key values a b and c key lt a a gt df and key lt a b key lt b a gt f if and key lt a b key lt b c key lt a c t gt dit Two key values are assumed to be equal if neither is less than the other by key lt Each call to make wt tree type returns a distinct value and trees
454. rences to that object are eliminated the object will be reclaimed Subsequently calling unhash with the hash number of the now reclaimed object will signal an error define x cons 0 0 unspecified hash x gt 77 eqv hash x hash x gt dit define x 0 unspecified gc flip force a garbage collection unhash 77 object hashed object table procedure This predicate is true if object has an associated hash number Otherwise it is false valid hash number k table procedure This predicate is true if k is the hash number associated with some object Otherwise it is false The following two procedures provide a lower level interface to the object hashing mech anism object hash object table insert procedure object hash is like hash except that it accepts an additional optional argument insert If insert is supplied and is f object hash will return an integer for object only if there is already an association in the table otherwise it will return f If insert is not supplied or is not f object hash always returns an integer creating an association in the table if necessary object hash additionally treats f differently than does hash Calling object hash with f as its argument will return an integer that when passed to unhash will signal an error rather than returning amp f Likewise valid hash number will return f for this integer object unhash k table procedure object unhash is
455. res generate their results in file time format file access time file access time direct file access time indirect file modification time file modification time direct file modification time indirect file attributes access time file attributes modification time file attributes change time Additionally set file times accepts its time arguments in file time format 15 5 4 Time Format Conversion universal time gt local decoded time universal time universal time gt global decoded time universal time The procedures described in this section convert times from one format to another Converts an argument in universal time format to decoded time format The result is in the local time zone or UTC respectively pp universal time gt local decoded time get universal time decoded time 21 second 23 minute 57 hour 17 4 day 29 month 4 4 year 1999 4 day of week 3 daylight savings time 1 zone 5 procedure procedure Chapter 15 Operating System Interface 243 pp universal time gt global decoded time get universal time decoded time 22 second 27 minute 57 hour 21 4 day 29 month 4 4 year 1999 4 day of week 3 daylight savings time 0 zone 0 universal time gt file time universal time procedure Converts an argument in universal time format to file time format universal time gt file time get universal time 925422988
456. result must be represented with at least as much precision as is used to express any of the inexact arguments to that operation It is desirable but not required for potentially inexact operations such as sqrt when applied to exact arguments to produce exact answers whenever possible for example the square root of an exact 4 ought to be an exact 2 If however an exact number is operated upon so as to produce an inexact result as by sqrt and if the result is represented as a flonum then the most precise flonum format available must be used but if the result is represented in some other way then the representation must have at least as much precision as the most precise flonum format available Although Scheme allows a variety of written notations for numbers any particular im plementation may support only some of them For example an implementation in which all numbers are real need not support the rectangular and polar notations for complex num bers If an implementation encounters an exact numerical constant that it cannot represent as an exact number then it may either report a violation of an implementation restriction or it may silently represent the constant by an inexact number MIT Scheme implements all of the written notations for numbers 60 MIT Scheme Reference 4 4 Syntax of numerical constants A number may be written in binary octal decimal or hexadecimal by the use of a radix prefix The radix prefixes are b
457. rformed in exactly the same way as dynamic binding of a variable see Section 2 3 Dynamic Binding page 18 232 MIT Scheme Reference 15 3 File Manipulation This section describes procedures that manipulate files and directories Any of these procedures can signal a number of errors for many reasons The specifics of these errors are much too operating system dependent to document here However if such an error is signalled by one of these procedures it will be of type condition type file operation error file exists filename procedure file exists direct filename procedure file exists indirect filename procedure These procedures return t if filename is an existing file or directory otherwise they return 4f In operating systems that support symbolic links if the file is a symbolic link file exists direct tests for the existence of the link while file exists indirect and file exists test for the existence of the file pointed to by the link copy file source filename target filename procedure Makes a copy of the file named by source filename The copy is performed by creating a new file called target filename and filling it with the same data as source filename rename file source filename target filename procedure Changes the name of source filename to be target filename In the unix implementa tion this will not rename across file systems delete file filename procedure Deletes the file named filename delete file
458. rguments fix and x43 x0f gt 3 fix and x43 xf0 gt x40 fix andc fixnum fixnum procedure Returns the bitwise logical and of the first argument with the bitwise logical inverse of the second argument When compiled it does not check the types of its arguments fix andc x43 x0f gt x40 fix andc x43 xf0 gt 8 fix or fixnum fixnum procedure This returns the bitwise logical inclusive or of its arguments When compiled it does not check the types of its arguments fix or x40 3 gt x43 fix or x41 3 gt x43 fix xor fixnum fixnum procedure This returns the bitwise logical exclusive or of its arguments When compiled it does not check the types of its arguments fix xor x40 3 gt x43 fix xor x41 3 gt x42 fix lsh fixnuml fixnum2 procedure This procedure returns the result of logically shifting fixnuml1 by fixnum2 bits If fixnum2 is positive fixnuml1 is shifted left if negative it is shifted right When compiled it does not check the types of its arguments nor the validity of its result fix lsh 1 10 gt x400 fix lsh x432 10 gt 1 fix lsh 1 3 gt 8 fix lsh 128 4 gt x3FFFFS8 Chapter 4 Numbers 73 4 7 2 Flonum Operations A flonum is an inexact real number that is implemented as a floating point number In MIT Scheme all inexact real numbers are flonums For this reason constants such as 0 and 2 3 are guaranteed to be flonums fl
459. rguments that were passed to the procedure 1 0 Division by zero signalled by To continue call RESTART with an option number RESTART 1 gt Return to read eval print level 1 error divide by zero operator operands procedure This procedure signals a condition of type condition type divide by zero The operator and operands fields of the condition are filled in from the corresponding arguments to the procedure condition type floating point overflow operator operands condition type This type is generated when a program performs an arithmetic operation that results in a floating point overflow The operator field contains the procedure that imple ments the operation or a symbol naming the procedure and the operands field contains a list of the arguments that were passed to the procedure condition type floating point underflow operator operands condition type This type is generated when a program performs an arithmetic operation that results in a floating point underflow The operator field contains the procedure that im plements the operation or a symbol naming the procedure and the operands field contains a list of the arguments that were passed to the procedure Chapter 16 Error System 279 condition type primitive procedure error operator condition type operands This is an abstract type It indicates that an error was generated by a primitive procedure call Primitive procedures are distinguished from ordinary p
460. rguments that were passed to the procedure Chapter 16 Error System 275 car 3 4 The procedure car has been called with 2 arguments it requires exactly 1 argument To continue call RESTART with an option number RESTART 1 gt Return to read eval print level 1 error wrong number of arguments datum type operands procedure This procedure signals a condition of type condition type wrong number of arguments The datum type and operands fields of the condition are filled in from the corresponding arguments to the procedure condition type datum out of range datum condition type This type indicates the class of errors in which a program discovers an object that is of the correct type but is otherwise out of range Most often this type indicates that an index to some data structure is outside of the range of indices for that structure The datum field contains the offending object error datum out of range 3 error The object 3 is not in the correct range To continue call RESTART with an option number RESTART 1 gt Return to read eval print level 1 error datum out of range datum procedure This procedure signals a condition of type condition type datum out of range The datum field of the condition is filled in from the corresponding argument to the procedure condition type bad range argument datum operator condition type operand This type indicates that a procedure was passed an argument that
461. rimitive procedure 166 type predicate for procedure 165 type predicate for promise 134 type predicate for record 133 type predicate for record type 133 type predicate for stream pair 136 type predicate for string 0 88 344 type predicate for symbol 129 type predicate for top level environment 176 type predicate for vector 000005 120 type predicate for weak pair 137 type conditlonc eLeeetensiekee ce mer 258 type of condition lesse eese 271 type of procedure 0 eee eee 165 type pathname component 223 types latent defn 0 0 000 3 types manifest defn 0 0 0000008 3 types Windows cece eee ee eee 304 U unassigned binding 00005 173 unassigned variable 0 22005 13 unassigned variable defn 000 6 unassigned variable and assignment 22 unassigned variable and definition 21 unassigned variable and dynamic bindings 19 unassigned variable and named let 27 unbound variable 2 2 ee etes 13 unbound variable defn 0200 6 Unicode iet uer ache MF p MR 84 uninterned symbol defn suuueu 128 universal time 4 Trace ec 3 4 Boe eS 238 unpars
462. ring procedure substring upcase string start end procedure string upcase returns a newly allocated copy of string in which all lowercase letters are changed to uppercase string upcase is the destructive version of string 92 MIT Scheme Reference upcase it alters string and returns an unspecified value substring upcase de structively changes the case of the specified part of string 6 5 Cutting and Pasting Strings string append string procedure Returns a newly allocated string made from the concatenation of the given strings With no arguments string append returns the empty string string append UM string append x ace Hen xacex string append nu nn n wi eq str string append str gt f newly allocated substring string start end procedure Returns a newly allocated string formed from the characters of string beginning with index start inclusive and ending with end exclusive substring O O n substring arduous 2 5 duo substring arduous 2 8 error 8 not in correct range define string copy s substring s O string length s string head string end procedure Returns a newly allocated copy of the initial substring of string up to but excluding end It could have been defined by define string head string end substring string 0 end string tail string start procedure Returns a newly allocated copy of the final substring of string sta
463. rked computer normally provides several different services such as telnet or FTP Each service is associated with a unique port number for example the www service is associated with port 80 The service argument specifies the port number either as a string or directly as an exact non negative integer Port strings are decoded by the operating system using a table for example on unix the table is in etc services Usually you will use a port string rather than a number open tcp stream socket host name service buffer size procedure line translation open tcp stream socket opens a connection to the host specified by host name Host name is looked up using the ordinary lookup rules for your computer The connection is established to the service specified by service The returned value is an I O port to which you can read and write characters using ordinary Scheme 1 0 procedures such as read char and write char Buffer size specifies the size of the read and write buffers used by the port if this is unspecified or the buffers will hold 4096 bytes Line translation specifies how end of line characters will be translated when reading or writing to the socket If this is unspecified or f then lines will be terminated by CR LF which is the standard for most internet protocols Otherwise it must be a string which specifies the line ending character sequence to use When you wish to close the connection just use close port A
464. rminal or from another program Non interactive input ports read input from a time independent source such as an ordinary file or a character string All optional arguments called input port if not supplied default to the current input port read char input port procedure Returns the next character available from input port updating input port to point to the following character If no more characters are available an end of file object is returned In MIT Scheme if input port is an interactive input port and no characters are immediately available read char will hang waiting for input even if the port is in non blocking mode peek char input port procedure Returns the next character available from input port without updating input port to point to the following character If no more characters are available an end of file object is returned In MIT Scheme if input port is an interactive input port and no characters are immediately available peek char will hang waiting for input even if the port is in non blocking mode char ready input port procedure Returns t if a character is ready on input port and returns f otherwise If char ready returns t then the next read char operation on input port is guaranteed not to hang If input port is a file port at end of file then char ready returns stt The value returned by a call to peek char is the same as the value that would have been returned by a call to read char o
465. rocedure or primitive procedure 166 MIT Scheme Reference compiled procedure object procedure Returns t if object is a compiled procedure otherwise returns amp f compound procedure object procedure Returns stt if object is a compound i e interpreted procedure otherwise returns f primitive procedure object procedure Returns t if object is a primitive procedure otherwise returns f The following two procedures test the arity of a procedure that is the number of arguments that the procedure accepts The results of the test may be less restrictive than the effect of calling the procedure In other words these procedures may indicate that the procedure will accept a given number of arguments but if you call the procedure it may signal a condition type wrong number of arguments error This is because these procedures examine the apparent arity of a procedure For example here is a procedure that appears to accept any number of arguments but when called will signal an error if the number of arguments is not one lambda arguments apply car arguments procedure arity valid procedure k procedure Returns t if procedure accepts k arguments otherwise returns f procedure arity procedure procedure Returns a description of the number of arguments that procedure accepts The result is a newly allocated pair whose car field is the minimum number of arguments and whose cdr field is the maximum number of arguments The mini
466. rocedure Returns t if host1 and host2 denote the same pathname host otherwise returns f init file pathname host procedure Returns a pathname for the user s initialization file on host The host argument defaults to the value of local host If the initialization file does not exist this procedure returns f Under unix the init file is called scheme init under Windows and OS 2 the init file is called scheme ini In either case it is located in the user s home directory which is computed by user homedir pathname user homedir pathname host procedure Returns a pathname for the user s home directory on host The host argument defaults to the value of local host The concept of a home directory is itself somewhat implementation dependent but it should be the place where the user keeps personal files such as initialization files and mail 230 MIT Scheme Reference Under unix the user s home directory is specified by the HOME environment variable If this variable is undefined the user name is computed using the getlogin system call or if that fails the getuid system call The resulting user name is passed to the getpwnam system call to obtain the home directory Under OS 2 several heuristics are tried to find the user s home directory First if the environment variable HOME is defined that is the home directory If HOME is undefined but the USERDIR and USER environment variables are defined and the dir
467. rocedure and a comparison predicate and returns a new form The first argument the input form is the form in which the macro keyword occurred The second argument to a transformation procedure is a renaming procedure that takes the representation of an identifier as its argument and returns the representa tion of a fresh identifier that occurs nowhere else in the program For example the transformation procedure for a simplified version of the let macro might be written as 48 MIT Scheme Reference lambda exp rename compare let vars map car cadr exp inits map cadr cadr exp body cddr exp lambda vars body inits This would not be hygienic however A hygienic let macro must rename the identifier lambda to protect it from being captured by a local binding The renaming effectively creates an fresh alias for lambda one that cannot be captured by any subsequent binding lambda exp rename compare let vars map car cadr exp inits map cadr cadr exp body cddr exp C rename lambda vars body inits The expression returned by the transformation procedure will be expanded in the syntactic environment obtained from the syntactic environment of the macro appli cation by binding any fresh identifiers generated by the renaming procedure to the denotations of the original identifiers in the syntactic environment in which the macro was defined This means that a renamed identifier w
468. rocedures in that they are not written in Scheme but instead in the underlying language of the Scheme implementation The operator field contains the procedure that implements the operation or a symbol naming the procedure and the operands field contains a list of the arguments that were passed to the procedure condition type system call error operator operands condition type system call error type This is the most common condition type generated by primitive procedures A con dition of this type indicates that the primitive made a system call to the operating system and that the system call signalled an error The system call error is reflected back to Scheme as a condition of this type except that many common system call errors are automatically translated by the Scheme implementation into more useful forms for example a system call error that occurs while trying to delete a file will be translated into a condition of type condition type file operation error The operator field contains the procedure that implements the operation or a symbol naming the procedure and the operands field contains a list of the arguments that were passed to the procedure The system call and error type fields contain symbols that describe the specific system call that was being made and the error that occurred respectively these symbols are completely operating system dependent condition type control error condition type This is an abstract type It descr
469. rom a WM_HELP message 9 device x y hit test flags The mouse was moved X and y specify the position of the mouse hit test contains the hit test information and flags specifies the modifier keys that were pressed at the time discard events operation on os2 graphics device This operation discards any events that are in the user event queue This is sometimes useful when you want to prompt the user for some input and don t want to consider any previous input Chapter 17 Graphics 301 17 11 5 Miscellaneous Operations for OS 2 Graphics These operations allow you to change the font used for drawing text in a graphics device window take a snapshot of a graphics device window and return it as an image object and draw multiple lines efficiently set font font name operation on os2 graphics device This operation sets the font used for drawing text in the graphics device window Font name is a string describing the font this string is in the form lt point size gt lt family name gt for example 10 Courier You may specify any fixed pitch font family in any point size that is supported for that font family This includes both image fonts and outline fonts capture image x left y bottom x right y top operation on os2 graphics device This operation creates and returns an image that contains part of the client area of the graphics device window The portion of the client area that is selected is specified by the four coordinat
470. ror is used to signal simple errors specifying a message and some irritant objects see Section 16 1 Condition Signalling page 258 Errors are usually handled by stopping the computation and putting the user in an error REPL warn is used to signal warnings see Section 16 1 Condition Signalling page 258 Warnings are usually handled by printing a message on the console and contin uing the computation normally ignore errors is used to suppress the normal handling of errors within a given dynamic extent see Section 16 3 Condition Handling page 261 Any error that occurs within the extent is trapped returning immediately to the caller of ignore errors More demanding applications require more powerful facilities To give a concrete exam ple suppose you want floating point division to return a very large number whenever the denominator is zero This behavior can be implemented using the error system The Scheme arithmetic system can signal many different kinds of errors including floating point divide by zero In our example we would like to handle this particular condition specially allowing the system to handle other arithmetic errors in its usual way The error system supports this kind of application by providing mechanisms for dis tinguishing different types of error conditions and for specifying where control should be transferred should a given condition arise In this example there is a specific object that represents
471. rs other than argument type errors environment assignable environment symbol procedure Symbol must be bound in environment or one of its ancestor environments Returns t if the binding may be modified by side effect environment assign environment symbol object procedure Symbol must be bound in environment or one of its ancestor environments and must be assignable Modifies the binding to have object as its value and returns an unspecified result environment definable environment symbol procedure Returns t if symbol is definable in environment and otherwise At present this is false for environments generated by application of compiled procedures and true for all other environments Chapter 13 Environments 175 environment define environment symbol object procedure Defines symbol to be bound to object in environment and returns an unspecified value Signals an error if symbol isn t definable in environment environment define macro environment symbol transformer procedure Defines symbol to be a keyword bound to transformer in environment and returns an unspecified value Signals an error if symbol isn t definable in environment The type of transformer is defined by the syntax engine and is not checked by this procedure If the type is incorrect this will subsequently signal an error during syntax expansion eval expression environment procedure Evaluates expression a list structure representation sometimes called
472. rs in buffer that fall between pointer and buffer s internal pointer Pointer must have been returned from a previous call of get parser buffer pointer on buffer Additionally if some of buffer s characters have been discarded by discard parser buffer head pointer must be outside the range that was discarded discard parser buffer head buffer procedure Discards all characters in buffer that have already been read in other words all characters prior to the internal pointer After this operation has completed it is no longer possible to move the internal pointer backwards past the current position by calling set parser buffer pointer The next rather large set of procedures does conditional matching against the contents of a parser buffer All matching is performed relative to the buffer s internal pointer so the first character to be matched against is the next character that would be returned by peek parser buffer char The returned value is always t for a successful match and otherwise For procedures whose names do not end in no advance a successful match also moves the internal pointer of the buffer forward to the end of the matched text otherwise the internal pointer is unchanged match parser buffer char buffer char procedure match parser buffer char ci buffer char procedure match parser buffer not char buffer char procedure match parser buffer not char ci buffer char procedure match parser buffer char no advance buffer ch
473. rsal time gt global time string 243 universal time gt local decoded time 242 universal time gt local time string 243 unparser set tagged pair method 193 unparser set tagged vector method 193 unquotGe iuc canes E LLIR Servus n 24 105 unquote splicing 3g rr ies 24 105 unsigned integer gt bit string 126 use pty suilggneenkhe iQereotnpseeeadae ta 252 USS VaLUCS es iiy wei tbe E TY eR 263 266 user homedir pathname 229 user initial environment 7 175 176 USCRS2201 1 22229 P eeldlbusdectid ere ees 307 UShOFt eleieitenstub rc ea deeded ed dade ee 306 Binding Index y valid hash number lues 152 Val eS c sese RUE ERR adr EG pP TES 170 213 VeCLODL olczeseseern 9e PAR e usw pO EDD rers 119 vector 2li1St i nsl p boo eebeenegsdhise 109 119 v ctor 9b fill i z 25 pneri drug 103 vector 8b find next char 103 vector 8b find next char Cci 103 vector 8b find previous char 103 vector 8b find previous char ci 103 v ctor 8b ref 21 2 29 4 reo renere 103 v ctor 8b set 4 v2ds2lso e dre raa 103 vector binary search esses 121 vector copys atcha pete amia re Era E 119 vector eighth ioo emere E EnD EET E 121 vector fifth 28 cs eee Sed pe PES quit 121 V Cctor fllk oeoa hiner edd EDE 121 Vector first 4 059 23 suu Coreia de eta 120 v ctor fourth 2i
474. rsal time this representation is operating system depen dent This format is produced by all of the file attribute procedures for example file modification time and file attributes The fourth representation the time string is an external representation for time This format is defined by RFC 822 Standard for the format of ARPA Internet text messages with the modification that years are represented as four digit numbers rather than two digit numbers This format is the standard format for Internet email and numerous other network protocols Within this section argument variables named universal time decoded time file time and time string are respectively required to be of the corresponding format 15 5 1 Universal Time get universal time procedure Return the current time in universal format get universal time 3131453078 epoch variable epoch is the representation of midnight January 1 1970 UTC in universal time for mat epoch 2208988800 15 5 2 Decoded Time Objects representing standard time components such as seconds and minutes are re quired to be exact non negative integers Seconds and minutes must be inclusively between 0 and 59 hours between 0 and 23 days between 1 and 31 months between 1 and 12 years are represented in four digit form in which 1999 is represented as 1999 not 99 local decoded time procedure Return the current time in decoded format The decoded time is represented in the loc
475. rted by invoking an escape procedure that returns from with output to truncated string The value of this procedure is a pair the car of the pair is t if thunk attempted to write more than k characters and sf otherwise The cdr of the pair is a newly allocated string containing the accumulated output This procedure is helpful for displaying circular lists as shown in this example define inf list inf with output to truncated string 40 lambda write inf gt f inf set cdr inf inf with output to truncated string 40 lambda write inf gt t inf inf inf inf inf inf inf inf inf inf write to string object k procedure Writes object to a string output port and returns the resulting newly allocated string If k is supplied and not f this procedure is equivalent to Chapter 14 Input Output 185 with output to truncated string k lambda write object otherwise it is equivalent to with output to string lambda O write object 14 4 Input Procedures This section describes the procedures that read input Input procedures can read either from the current input port or from a given port Remember that to read from a file you must first open a port to the file Input ports can be divided into two types called interactive and non interactive Interac tive input ports are ports that read input from a source that is time dependent for example a port that reads input from a te
476. rting at index start and going to the end of string It could have been defined by define string tail string start substring string start string length string string tail uncommon 2 gt common string pad left string k char procedure string pad right string k char procedure These procedures return a newly allocated string created by padding string out to length k using char If char is not given it defaults to space If k is less than the length of string the resulting string is a truncated form of string string pad left adds padding characters or truncates from the beginning of the string lowest indices while string pad right does so at the end of the string highest indices Chapter 6 Strings 93 string pad left hello 4 gt ello string pad left hello 8 gt hello string pad left hello 8 gt xxkhello string pad right hello 4 gt hell string pad right hello 8 gt hello string trim string char set procedure string trim left string char set procedure string trim right string char set procedure Returns a newly allocated string created by removing all characters that are not in char set from string trim both ends of string string trim left the be ginning of string or string trim right the end of string Char set defaults to char set not whitespace string trim in the end in the end string trim gt string trim 100th char set
477. s one of obj1 and obj2 is t but the other is 4f objl and obj2 are symbols but string symbol gt string objl symbol gt string obj2 gt f one of obj1 and obj2 is an exact number but the other is an inexact number objl and obj2 are numbers for which the procedure returns sf objl and obj2 are characters for which the char procedure returns f one of obj1 and obj2 is the empty list but the other is not objl and obj2 are procedures that would behave differently return a different value or have different side effects for some arguments objl and obj2 are pairs vectors strings bit strings records cells or weak pairs that denote distinct locations Some examples MIT Scheme Reference eqv a a gt dit eqv a b gt f eqv 2 2 gt t eqv O O gt dtt eqv 100000000 100000000 gt dit eqv cons 1 2 cons 1 2 gt f eqv lambda 1 lambda 2 gt f eqv 4f nil gt f let p lambda x x eqv p p gt dt The following examples illustrate cases in which the above rules do not fully specify the behavior of eqv All that can be said about such cases is that the value returned by eqv must be a boolean eqv unspecified eqv 0 10 unspecified eqv lambda x x lambda x x unspecified eqv lambda x x lambda y y unspecified The next set of examples shows the use of eqv with procedures that have local s
478. s The usual rules for sentences should be followed the first word of the sentence should be capitalized and the sentence should be terminated by a period The message should not contain extraneous whitespace such as line breaks or indentation The error system provides a simple formatting language that allows the programmer to have some control over the printing of error messages This formatting language will probably be redesigned in a future release Error messages typically consist of a string describing the error followed by some irritant objects T he string is printed using display and the irritants are printed using write typ ically with a space between each irritant To allow simple formatting we introduce a noise object printed using display The irritant list may contain ordinary objects interspersed with noise objects Each noise object is printed using display with no extra whitespace while each normal object is printed using write prefixed by a single space character Here is an example define error within procedure message irritant procedure error message irritant error irritant noise within procedure procedure error irritant noise This would format as follows error within procedure Bad widget widget 32 invert widget error Bad widget widget 32 within procedure invert widget Here are the operations supporting error messages Chapter 16 Error System 261 format
479. s an error if the implicit index of one of these procedurs is not a valid index of vector vector binary search vector key lt unwrap key key procedure Searches vector for an element with a key matching key returning the element if one is found or f if none The search operation takes time proportional to the logarithm of the length of vector Unwrap key must be a procedure that maps each element of vector to a key Key lt must be a procedure that implements a total ordering on the keys of the elements define translate number vector binary search 1 i 2 ii 3 iii 6 vi lt car number translate 2 gt 2 ii translate 4 gt F 8 3 Cutting Vectors subvector vector start end procedure Returns a newly allocated vector that contains the elements of vector between index start inclusive and end exclusive vector head vector end Equivalent to subvector vector O end vector tail vector start Equivalent to subvector vector start vector length vector 8 4 Modifying Vectors vector fill vector object subvector fill vector start end object procedure procedure procedure procedure Stores object in every element of the vector subvector and returns an unspecified value 122 MIT Scheme Reference subvector move left vectorl startl end1 vector2 start2 procedure subvector move right vectorl start1 end1 vector2 start2 procedure Destructively copies the ele
480. s and con trolling the output buffer for devices that perform buffering Additionally devices may support custom operations such as control of colors There are some constraints on the arguments to the procedures described in this chapter Any argument named graphics device must be a graphics device object that was returned from a call to make graphics device Any argument that is a coordinate must be either an exact integer or an inexact real 17 1 Opening and Closing of Graphics Devices graphics type available graphics device type procedure This predicate returns t if the graphics system named by the symbol graphics device type is implemented by the Scheme system Otherwise it returns f in which case it is an error to attempt to make a graphics device using graphics device type enumerate graphics types procedure This procedure returns a list of symbols which are the names of all the graphics device types that are supported by the Scheme system The result is useful in deciding what additional arguments to supply to make graphics device as each device type typically has a unique way of specifying the initial size shape and other attributes make graphics device graphics device type object procedure This operation creates and returns a graphics device object Graphics device type is a symbol naming a graphics device type and both the number and the meaning of the remaining arguments is determined by that type see the descrip
481. s is similar to list except that cons conses together the last two arguments rather than consing the last argument with the empty list If the last argument is not a list the result is an improper list If the last argument is a list the result is a list consisting of the initial arguments and all of the items in the final argument If there is only one argument the result is the argument Note that path is restricted to a machine dependent range usually the size of a machine word On many machines this means that the maximum length of path will be 30 operations 32 bits less the sign bit and the end of sequence bit Chapter 7 Lists 109 cons a b c gt ab c cons a b c d gt abcd cons a a These expressions are equivalent cons objl obj2 objN 1 objN cons objl cons obj2 cons objN 1 objN list copy list procedure Returns a newly allocated copy of list This copies each of the pairs comprising list This could have been defined by define list copy list if null list et cons car list list copy cdr list vector gt list vector procedure subvector gt list vector start end procedure vector list returns a newly allocated list of the elements of vector subvector gt list returns a newly allocated list of the elements of the given subvector The inverse of vector gt list is list gt vector vector list dah dah didah dah dah did
482. s which specify that one type is a kind of another type If two types are linked this way one is considered to be a specialization of the other or vice versa the second is a generalization 258 MIT Scheme Reference of the first In our example all of the errors associated with opening an input file would be specializations of the condition type cannot open input file The taxonomy of condition types permits any condition type to have no more than one immediate generalization Thus the condition types form a forest set of trees While users can create new trees the standard taxonomy see Section 16 7 Taxonomy page 272 is rooted at condition type serious condition condition type warning condition type simple condition and condition type breakpoint users are encouraged to add new subtypes to these condition types rather than create new trees in the forest To summarize the error system provides facilities for the following tasks The sections that follow will describe these facilities in more detail Signalling a condition A condition may be signalled in a number of different ways Simple errors may be signalled without explicitly defining a condition type using error The signal condition procedure provides the most general signalling mechanism Handling a condition The programmer can dynamically specify handlers for particular condition types or for classes of condition types by means of the bind condition hand
483. s an example here is how you can open a connection to a web server open tcp stream socket web mit edu www Next we will treat setting up a TCP server which is slightly more complicated Creating a server is a two part process First you must open a server socket which causes the operating system to listen to the network on a port that you specify Once the server socket is opened the operating system will allow clients to connect to your computer on that port In the second step of the process you accept the connection which completes the con nection initiated by the client and allows you to communicate with the client Accepting a connection does not affect the server socket it continues to listen for additional client connections You can have multiple client connections to the same server socket open si multaneously open tcp server socket service address procedure This procedure opens a server socket that listens for connections to service the socket will continue to listen until you close it The returned value is a server socket object An error is signalled if another process is already listening on the service Additionally ports whose number is less than 1024 are privileged on many operating systems and cannot be used by non privileged processes if service specifies such a port and you do not have administrative privileges an error may be signalled 254 MIT Scheme Reference The optional argument address specifie
484. s character set abstraction is used to represent groups of characters such as the letters or digits Character sets may contain only ISO 8859 1 characters in the future this may be changed to allow the full range of characters There is no meaningful external representation for character sets use char set members to examine their contents There is at present no specific equivalence predicate for char acter sets use equal for this purpose char set object procedure Returns t if object is a character set otherwise returns f Chapter 5 Characters 83 char set upper case variable char set lower case variable char set alphabetic variable char set numeric variable char set alphanumeric variable char set whitespace variable char set not whitespace variable char set graphic variable char set not graphic variable char set standard variable These variables contain predefined character sets To see the contents of one of these sets use char set members Alphabetic characters are the 52 upper and lower case letters Numeric characters are the 10 decimal digits Alphanumeric characters are those in the union of these two sets Whitespace characters are space tab page linefeed and return Graphic characters are the printing characters and space Standard characters are the printing characters space and newline These are the printing characters 1 R eE 0123456789 35 lt gt 7 ABCDEFGHIJKLMNOPQ
485. s expression representation of a Scheme expression in environment You rarely need eval in ordinary programs it is useful mostly for evaluating expressions that have been cre ated on the fly by a program eval is relatively expensive because it must convert expression to an internal form before it is executed define foo list 1 2 eval foo the environment gt 3 13 2 Environment Variables The user initial environment is where the top level read eval print REP loop evaluates expressions and binds definitions It is a child of system global environment which is where all of the Scheme system definitions are bound All of the bindings in system global environment are available when the current environment is user initial environment However any new bindings that you create in the REP loop with define forms or by loading files containing define forms occur in user initial environment system global environment variable The variable system global environment is bound to the distinguished environment that s the ancestor of most other environments except for those created by make root top level environment It is the parent environment of user initial environment Primitives system procedures and most syntactic keywords are bound and sometimes closed in this environment user initial environment variable The variable user initial environment is bound to the default environment in which typed expressions are eval
486. s for the character code and bucky bits respectively The character code and bucky bits are always exact non negative integers and are strictly less than the value of their respective limit variable char gt integer char procedure integer gt char k procedure char gt integer returns the character code representation for char integer gt char returns the character whose character code representation is k In MIT Scheme if char ascii char is true then eqv char gt ascii char char gt integer char However this behavior is not required by the Scheme standard and code that depends on it is not portable to other implementations These procedures implement order isomorphisms between the set of characters under the char lt ordering and some subset of the integers under the lt ordering That is if char lt ab gt tt and lt x y gt t and x and y are in the range of char gt integer then lt char gt integer a char integer b gt dit char lt integer gt char x integer gt char y gt t Note If the argument to char gt integer or integer gt char is a constant the com piler will constant fold the call replacing it with the corresponding result This is a very useful way to denote unusual character constants or ASCII codes char integer limit variable The range of char gt integer is defined to be the exact non negative integers that are less than the value of this variable e
487. s for the fields specified in field names and creates a condition of type condition type Field names must be a list of symbols that is a subset of the field names in condition type The constructor procedure returned by condition constructor has signature lambda continuation restarts field values where the field names correspond to the field values The constructor argument restarts is described in Section 16 4 Restarts page 263 Conditions created by the constructor procedure have f for the values of all fields other than those specified by field names For example the following procedure make simple warning constructs a condition of type condition type simple warning given a continuation where the condition occurred a description of the restarts to be made available a warning message and a list of irritants that caused the warning define make simple warning condition constructor condition type simple warning message irritants condition accessor condition type field name procedure Returns a procedure that takes as input a condition object of type condition type and extracts the contents of the specified field name condition accessor sig nals error bad range argument if the field name isn t one of the named fields of condition type the returned procedure will signal error wrong type argument if 270 MIT Scheme Reference passed an object other than a condition of type condition type or one of its special
488. s generated and signalled the arguments are used to generate the values of the fields for this condition type they are passed as the field plist argument to make condition In the most common case however reason is neither a condition nor a condition type but rather a string or symbol In this case a condition of type condition type simple error is created with the message field containing the reason and the irritants field containing the arguments warn reason argument procedure When a condition is not severe enough to warrant intervention it is appropriate to signal the condition with warn rather than error As with error warn first calls signal condition the condition that is signalled is chosen exactly as in error except that a condition of type condition type simple warning is signalled if reason is neither a condition nor a condition type If the condition is not handled warn calls the procedure standard warning handler which normally prints a warning message and continues the computation by returning from warn warn establishes a restart named muffle warning before calling signal condition This allows a signal handler to prevent the generation of the warning message by calling muffle warning The value of a call to warn is unspecified signal condition condition procedure This is the fundamental operation for signalling a condition The precise operation of signal condition depends on the condition type of which condition is an
489. s later specified to be the current working directory Aside from absolute and relative which may only appear as the first element of the list each subsequent element in the list is either a string which is a literal component the symbol wild meaningful only when used in conjunction with the directory reader or the symbol up meaning the next directory is the parent of the previous one up corresponds to the file in unix and PC file systems The following note does not refer to any file system currently supported by MIT Scheme but is included for completeness In file systems that do not have hierarchical structure a specified directory component will always be a This description is adapted from Common Lisp The Language second edition section 23 1 1 Chapter 15 Operating System Interface 225 name type version make pathname host device directory name type version list whose first element is absolute If the system does not support directories other than a single global directory the list will have no other elements If the system supports flat directories i e a global set of directories with no subdirectories then the list will contain a second element which is either a string or wild In other words a non hierarchical file system is treated as if it were hierarchical but the hierarchical features are unused This representation is somewhat inconvenient for such file systems but it d
490. s ries ewe done E EAEE AS 238 discard charon input port 199 discard charson input port 199 discard eventson os2 graphics device 300 323 discard matched uses 210 213 discard parser buffer head 206 discretionary flush output 188 discretionary flush outputon output port E dais asa T TETEE EET 200 digplayes ao ede penis eg a alee 179 189 260 c 5 286 54 eiren aa e 7 27 28 draW arC akede iaie eid RP ues 290 draw arcon x graphics device 290 draw ClrCl6 6a aee EP as PN ddan 290 draw circleon x graphics device 290 draw ellipseon win32 graphics device 294 draw imageon graphics device 287 draw lineson os2 graphics device 301 draw subimageon graphics device 287 dynamiC Wind cec d Pe e i EE 168 E eighth inairis i69 eqed Mee eee eda 110 el86 4 09352 rike tendr ud Fase EY ERE IIO M 5 25 encapsulate dorrneme oa ld PRI Parte de 214 end of inpl t 525 ten old ehem ise ues 210 enough namestring lesse esse 228 enough pathname se lesse ss 228 entity okb akoste e iie 9e Diae RI uds 171 entity procedure dcucse edd aa ceeds 171 entity Sac cin date teed gh Qe ERE ae oda es 171 enumerate graphics types 281 enyironment eg ee ede Spends ssid os 251 enyironment assign i ol ee n reden 174 environment assignable
491. s somewhat clumsy for that purpose We recommend that you use with timings instead because it is more convenient and has lower overhead 248 MIT Scheme Reference measure interval t lambda start time let v hairy computation lambda end time write end time start time newline v 15 7 Subprocesses MIT Scheme provides the ability to run and control subprocesses This support is divided into two parts a low level set of primitives that maps onto the underlying operating system s process control primitives and a high level set of procedures for starting a subprocess and running it to completion in a single call Subprocesses that are run in the latter fashion are referred to as synchronous because they are started and stopped in synchrony with a Scheme procedure call This chapter documents Scheme s high level synchronous subprocess support The low level support is not documented but is available for those who are willing to read the source code Synchronous subprocess support is a run time loadable option To use it execute load option synchronous subprocess once before calling it 15 7 1 Subprocess Procedures There are two commands for running synchronous subprocesses under Scheme run shell command is very simple to use provides access to all shell features and is to be preferred in most situations run synchronous subprocess allows direct execution of a program and precise control of
492. s tedious The problem is that the abstraction isn t closely matched to the way that people think about syntactic structures In this sec tion we introduce a higher level mechanism that greatly simplifies the implementation of a parser The parser language described here allows the programmer to write BNF like specifi cations that are translated into efficient Scheme code at compile time The language is declarative but it can be freely mixed with Scheme code this allows the parsing of gram mars that aren t conveniently described in the language The language also provides backtracking For example this expression matches any sequence of alphanumeric characters followed by a single alphabetic character 208 MIT Scheme Reference Catcher seq char set char set alphanumeric char set char set alphabetic The way that this works is that the matcher matches alphanumeric characters in the input stream until it finds a non alphanumeric character It then tries to match an alphabetic character which of course fails At this point if it matched at least one alphanumeric char acter it backtracks the last matched alphanumeric is unmatched and it again attempts to match an alphabetic character The backtracking can be arbitrarily deep the matcher will continue to back up until it finds a way to match the remainder of the expression So far this sounds a lot like regular expression matching see Section 6 8 Regular Ex pres
493. s the IP address on which the socket will listen If this argument is not supplied or is given as f then the socket listens on all IP addresses for this machine This is equivalent to passing the result of calling host address any tcp server connection accept server socket block peer address procedure Checks to see if a client has connected to server socket If so an 1 O port is returned The returned port can be read and written using ordinary Scheme 1 0 procedures such as read char and write char The argument block says what to do if no client has connected at the time of the call If f it says to return immediately with two values of f Otherwise the call waits until a client connects The argument peer address is either f or an IP address as allocated by allocate host address If it is an IP address the address is modified to be the address of the client making the connection Note that closing the port returned by this procedure does not affect server socket it just closes the particular client connection that was opened by the call To close server socket use close tcp server socket close tcp server socket server socket procedure Closes the server socket server socket l he operating system will cease listening for network connections to that service Client connections to server socket that have already been accepted will not be affected 15 9 Miscellaneous OS Facilities This section contains assorted operating
494. s the cached value Otherwise an error is signalled force and delay are mainly intended for programs written in functional style The following examples should not be considered to illustrate good programming style but they illustrate the property that the value of a promise is computed at most once define count 0 define p delay begin set count count 1 x 3 define x 5 count gt 0 p gt promise 54 force p 15 p promise 54 count gt 1 force p gt 15 count gt 1 Here is a possible implementation of delay and force We define the expression delay expression to have the same meaning as the procedure call make promise lambda expression where make promise is defined as follows Chapter 10 Miscellaneous Datatypes 135 define make promise lambda proc let already run f result f lambda cond not already run set result proc set already run t result Promises are implemented here as procedures of no arguments and force simply calls its argument define force lambda promise promise Various extensions to this semantics of delay and force are supported in some imple mentations none of these are currently supported in MIT Scheme e Calling force on an object that is not a promise may simply return the object e It may be the case that there is no means by which a promise can be operationally distinguished from its forced v
495. s the end of the text being matched This is equivalent to the construct rexp word edge procedure Returns a REXP that matches the start or end of a word This is equivalent to the b construct rexp not word edge procedure Returns a REXP that matches anywhere that is not the start or end of a word This is equivalent to the B construct rexp word start procedure Returns a REXP that matches the start of a word This is equivalent to the lt construct rexp word end procedure Returns a REXP that matches the end of a word This is equivalent to the gt construct rexp word char procedure Returns a REXP that matches any word constituent character This is equivalent to the w construct 100 MIT Scheme Reference rexp not word char procedure Returns a REXP that matches any character that isn t a word constituent This is equivalent to the W construct The next two procedures accept a syntax type argument specifying the syntax class to be matched against This argument is a symbol selected from the following list Each symbol is followed by the equivalent character used in standard regular expression notation whitespace space character punctuation word w symbol _ open close quote string delimiter math delimiter escape X char quote comment start lt comment end gt rexp syntax char syntax type procedure Returns a REXP that matches any character of type syntax type T
496. s the graphics device window The window disappears from the desktop but still appears in the window list Depending on how you have con figured your desktop the window may appear as an icon either on the desktop or in the minimized window viewer maximize window operation on os2 graphics device This operation maximizes the graphics device window This causes the window to fill the entire desktop restore window operation on os2 graphics device This operation restores the graphics device window to its normal state If the window is hidden or minimized it is shown again at its former position on the desktop If the window is maximized it is returned to its normal size activate window operation on os2 graphics device This operation makes the graphics device window be the active window This causes the window to be put in front of all other windows on the desktop highlights its frame and gives it the keyboard focus deactivate window operation on os2 graphics device This operation deactivates the graphics device window if it was active otherwise it has no effect This causes some other window to be chosen to be active in its place set window title title operation on os2 graphics device This operation changes the text that appears in the graphics device window s title bar The new text is given by title which must be a string 17 11 4 Event Operations for OS 2 Graphics These operations allow you to read some of the events that a
497. s to the process of calling a procedure Unlike some other dialects of Lisp Scheme always evaluates the operator expression and the operand expressions with the same evaluation rules and the order of evaluation is unspecified 3 4 gt 7 Gf 3 4 gt 12 A number of procedures are available as the values of variables in the initial environment for example the addition and multiplication procedures in the above examples are the values of the variables and New procedures are created by evaluating lambda expressions If the operator is a syntactic keyword then the expression is not treated as a procedure call it is a special form Chapter 2 Special Forms 15 2 Special Forms A special form is an expression that follows special evaluation rules This chapter de scribes the basic Scheme special forms 2 1 Lambda Expressions lambda formals expression expression special form A lambda expression evaluates to a procedure The environment in effect when the lambda expression is evaluated is remembered as part of the procedure it is called the closing environment When the procedure is later called with some arguments the closing environment is extended by binding the variables in the formal parameter list to fresh locations and the locations are filled with the arguments according to rules about to be given The new environment created by this process is referred to as the invocation environment Once the in
498. s true if and only if x round x complex 3 4i gt t complex 3 gt t real 3 gt t real 2 5 0 0i gt dit real e1e10 gt dit rational 6 10 gt t rational 6 3 gt t integer 3 0i gt t integer 3 0 gt t integer 8 4 gt dtt Note The behavior of these type predicates on inexact numbers is unreliable since any inaccuracy may affect the result exact z procedure inexact z procedure These numerical predicates provide tests for the exactness of a quantity For any Scheme number precisely one of these predicates is true exact integer object procedure exact nonnegative integer object procedure exact rational object procedure These procedures test for some very common types of numbers These tests could be written in terms of simpler predicates but are more efficient 717223 procedure lt xl x2 x3 procedure gt xl x2 x3 procedure lt xl x2 x3 procedure gt xl x2x3 procedure These procedures return t if their arguments are respectively equal monotonically increasing monotonically decreasing monotonically nondecreasing or monotonically nonincreasing These predicates are transitive Note that the traditional implementations of these predicates in Lisp like languages are not transitive Note While it is not an error to compare inexact numbers using these predicates the results may be unreliable because a small inaccuracy may affect
499. scii if someone ports MIT Scheme to a non ASCII operating system this requirement will change A string is written as a sequence of characters enclosed within double quotes To include a double quote inside a string precede the double quote with a backslash escape it as in The word recursion has many meanings The printed representation of this string is The word recursion has many meanings To include a backslash inside a string precede it with another backslash for example Use Control q to quit The printed representation of this string is Use Control q to quit The effect of a backslash that doesn t precede a double quote or backslash is unspecified in standard Scheme but MIT Scheme specifies the effect for three other characters Nt Nn and Mf These escape sequences are respectively translated into the following characters tab newline and page Finally a backslash followed by exactly three octal digits is translated into the character whose ISO 8859 1 code is those digits If a string literal is continued from one line to another the string will contain the newline character newline at the line break Standard Scheme does not specify what appears in a string literal at a line break The length of a string is the number of characters that it contains This number is an exact non negative integer that is established when the string is created but see Section 6 10 Variable Length Strings page
500. se procedures produce a real result from a real argument Chapter 4 Numbers 67 sqrt z procedure Returns the principal square root of z The result will have either positive real part or zero real part and non negative imaginary part expt z1 z2 procedure Returns z1 raised to the power z2 27 e log z 0 is defined to be equal to 1 make rectangular x1 x2 procedure make polar x3 x4 procedure real part z procedure imag part z procedure magnitude z procedure angle z procedure conjugate z procedure Suppose x1 x2 x3 and x4 are real numbers and z is a complex number such that z i Tzi 4 0774 Then make rectangular and make polar return z real part returns xl imag part returns x2 magnitude returns x3 and angle returns x4 In the case of angle whose value is not uniquely determined by the preceding rule the value returned will be the one in the range minus pi exclusive to pi inclusive conjugate returns the complex conjugate of z exact gt inexact z procedure inexact gt exact z procedure exact gt inexact returns an inexact representation of z The value returned is the in exact number that is numerically closest to the argument If an exact argument has no reasonably close inexact equivalent then a violation of an implementation restriction may be reported MIT Scheme signals an error of type condition type bad range argument in this case inexact gt exact returns an exact representation of z The v
501. set trace output port esses 181 set window nameon win32 graphics device 295 set window positionon os2 graphics device 207 set window sizeon os2 graphics device 297 set window titleon os2 graphics device 298 set working directory pathname 231 set xml attlist definitions 219 set xml attlist name 219 set xml lelement content type 219 set xml element name 219 Sset xml lentity name ocolos 220 Set xml lentity value c 9 220 set xml notation id us 220 set xml notation name 220 set xml declaration encoding 218 set xml declaration standalone 218 set xml declaration version 218 set xml document declaration 218 set xml document dtd 004 218 Binding Index set xml document misc 1 218 set xml document misc 2 218 set xml document misc 3 218 set xml document root s 218 set xml dtd external 219 set xml dtd internal 219 Set xml dtd ro6t 4 2 21 5 nbs be Pu bna 219 set xml element attributes 218 set xml element contents 218 set xml element name 218 set xml external id id 220 set xml external id uri 220
502. sh on n to get back the original object Note that this printed representation can only be recognized by the Scheme program in which it was generated because these hash numbers are different for each invocation of Scheme 14 6 Format The procedure format is very useful for producing nicely formatted text producing good looking messages and so on MIT Scheme s implementation of format is similar to that of Common Lisp except that Common Lisp defines many more directives format is a run time loadable option To use it execute load option format once before calling it format destination control string argument procedure Writes the characters of control string to destination except that a tilde intro duces a format directive The character after the tilde possibly preceded by prefix parameters and modifiers specifies what kind of formatting is desired Most direc tives use one or more arguments to create their output the typical directive puts the next argument into the output formatted in some special way It is an error if no argument remains for a directive requiring an argument but it is not an error if one or more arguments remain unprocessed by a directive The output is sent to destination If destination is f a string is created that contains the output this string is returned as the value of the call to format In all other cases format returns an unspecified value If destination is t the output is
503. signed for calling C procedures that use C data types rather than Scheme data objects Thus it is not possible to write and call a C procedure that returns for example a Scheme list The object returned will always be an integer which may represent the address of a C data structure Warning It is extremely dangerous to try to pass Scheme callback procedures to C procedures It is only possible by passing integer handles rather than the actual procedures 304 MIT Scheme Reference and even so if a garbage collection occurs during the execution of the callback procedure objects in Scheme s heap will have moved Thus in a foreign procedure that has a callback and a string after calling the callback the string value may no longer be valid Playing this game requires a profound knowledge of the implementation The interface to the FFI has two main components a language for declaring the types of values passed to and returned from the foreign procedures and a form for declaring foreign procedures 18 2 1 Windows Types Foreign types are designed to represent a correspondence between a Scheme data type that is used to represent an object within the Scheme world and a C data type that represents the data object in the C world Thus we cannot manipulate true C objects in Scheme nor can we manipulate Scheme objects in C Each foreign type has four aspects that together ensure that the correspondence between the Scheme and C objects is ma
504. sion floating point numbers have 17 digits of precision This three element list may be abbreviated in two ways First the symbol normal may be used which is equivalent to the list normal 0 normal Second the third element of the list format type may be omitted in which case it defaults to normal The default value for flonum unparser cutoff is normal If it is bound to a value different from those described here number gt string issues a warning and acts as though the value had been normal Some examples of flonum unparser cutoff number gt string 4 atan 1 1 3 141592653589793 fluid let flonum unparser cutoff relative 5 number gt string 4 atan 1 1 3 1416 fluid let flonum unparser cutoff relative 5 number gt string 4000 atan 1 1 3141 6 fluid let flonum unparser cutoff relative 5 scientific number gt string 4000 atan 1 1 3 1416e3 fluid let flonum unparser cutoff relative 5 scientific number string 40000 atan 1 1 3 1416e4 fluid let flonum unparser cutoff relative 5 engineering number gt string 40000 atan 1 1 gt 31 416e3 fluid let flonum unparser cutoff absolute 5 70 MIT Scheme Reference number gt string 4 atan 1 1 gt 3 14159 fluid let flonum unparser cutoff absolute 5 number gt string 4000 atan 1 1 gt 3141 59265 fluid let flonum unparser
505. sions page 96 However there are some important differences e The parser language uses a Scheme like syntax that is easier to read and write than regular expression notation e The language provides macros so that common syntactic constructs can be abstracted e The language mixes easily with Scheme code allowing the full power of Scheme to be applied to program around limitations in the parser language e The language provides expressive facilities for converting syntax into parsed structure It also makes it easy to convert parsed strings into meaningful objects e g numbers e The language is compiled into machine language regular expressions are usually inter preted Here is an example that shows off several of the features of the parser language The example is a parser for XML start tags parser with pointer p seq wen parse name parse attribute list alt match gt match gt sexp lambda b error string append Unterminated start tag at parser buffer position string p This shows that the basic description of a start tag is very similar to its BNF Non terminal symbols parse name and parse attribute list do most of the work and the noise strings lt and gt are the syntactic markers delimiting the form There are two alternate endings for start tags and if the parser doesn t find either of the endings the Scheme code wrapped in sexp is run to signal an error The error proce
506. sitive integer Under Windows and OS 2 this is always 1 238 MIT Scheme Reference The following additional accessors are defined under unix file attributes uid attributes procedure The user id of the file s owner an exact non negative integer file attributes gid attributes procedure The group id of the file s group an exact non negative integer file attributes inode number attributes procedure The inode number of the file an exact non negative integer The following additional accessor is defined under OS 2 and Windows file attributes modes attributes procedure The attribute bits of the file This is an exact non negative integer containing the file s attribute bits exactly as specified by the operating system s API The following additional accessor is defined under OS 2 file attributes allocated length attributes procedure The allocated length of the file which can be larger than the length of the file due to fixed length allocation units 15 4 Directory Reader directory read directory sort procedure Directory must be an object that can be converted into a pathname by pathname The directory specified by directory is read and the contents of the directory is returned as a newly allocated list of absolute pathnames The result is sorted according to the usual sorting conventions for directories unless sort is specified as f If directory has name type or version components the returned list con
507. soci ated procedures in dib scm in the Win32 system source is an example of how to use the foreign function interface to access and manipulate non Scheme objects dib windows type In the C world a DIB is a handle to a piece of memory containing the bits that represent information about the image and the pixels of the image The handle is a machine word sized piece of data which may be thought of as a 32 bit integer The handle may be null i e zero indicating that there is no block of memory describing the DIB The null value is usually returned by C functions that are supposed to create a DIB but failed for some reason like the memory could not be allocated or a file could not be opened In the Scheme world a DIB is a structure containing information about the bitmap specifically the integer that represents the handle We also include f in the dib windows type to mirror the null handle error value 310 MIT Scheme Reference define dib result lambda handle if handle 0 f make dib handle define dib arg lambda dib if dib cell contents dib handle dib 0 define windows type dib lambda thing or dib thing eq thing f dib arg dib result 18 3 1 DIB procedures The following procedures have typed parameters using the same convention as windows procedure open dib filename string procedure Return type dib Calls the OpenDIB entry of DIBUTILS DLL If the return value is no
508. ssion expression special form Bindings should have the form Ckeyword transformer spec Each keyword is an identifier each transformer spec is a a macro transformer ex pression and the body is a sequence of one or more expressions It is an error for a keyword to appear more than once in the list of keywords being bound The expressions are expanded in the syntactic environment obtained by extending the syntactic environment of the let syntax expression with macros whose keywords are the keywords bound to the specified transformers Each binding of a keyword has the expressions as its region 36 MIT Scheme Reference let syntax when syntax rules when test stmti stmt2 if test begin stmti stmt2 let if t when if set if now if gt now let x outer let syntax m syntax rules m x let x inner m outer letrec syntax bindings expression expression special form The syntax of letrec syntax is the same as for let syntax The expressions are expanded in the syntactic environment obtained by extending the syntactic environment of the letrec syntax expression with macros whose keywords are the keywords bound to the specified transformers Each binding of a keyword has the bindings as well as the expressions within its region so the transformers can transcribe expressions into uses of the macros introduced by the letrec syntax expression letrec
509. st images may use large amounts of memory Images are reclaimed by the garbage collector but they may be implemented using memory outside of Scheme s heap If an image is reclaimed before being destroyed the implementation might not deallocate that non heap memory which can cause a subsequent call to create image to fail because it is unable to allocate enough memory image height image procedure Returns the height of the image in device coordinates image width image procedure Returns the width of the image in device coordinates 288 MIT Scheme Reference image fill from byte vector image bytes procedure The contents of image are set in a device dependent way using one byte per pixel from bytes a string Pixels are filled row by row from the top of the image to the bottom with each row being filled from left to right There must be at least image height image image width image bytes in bytes 17 9 X Graphics MIT Scheme supports graphics in the X window system version 11 Arbitrary numbers of displays may be opened and arbitrary numbers of graphics windows may be created for each display A variety of operations is available to manipulate various aspects of the windows to control their size position colors and mapping The X graphics device type supports images which are implemented as Xlib XImage objects X display window and image objects are automatically closed if they are reclaimed by the garbage collector 17
510. start procedure end These procedures match the specified substring against buffer s contents The ci procedures do case insensitive matching match utf8 char in alphabet buffer alphabet procedure This procedure treats buffer s contents as UTF 8 encoded Unicode characters and matches the next such character against alphabet which must be a Unicode alphabet see Section 5 7 Unicode page 84 UTF 8 represents characters with 1 to 6 bytes so a successful match can move the internal pointer forward by as many as 6 bytes The remaining procedures provide information that can be used to identify locations in a parser buffer s stream parser buffer position string pointer procedure Returns a string describing the location of pointer in terms of its character and line indexes This resulting string is meant to be presented to an end user in order to direct their attention to a feature in the input stream In this string the indexes are presented as one based numbers Pointer may alternatively be a parser buffer in which case it is equivalent to having specified the buffer s internal pointer parser buffer pointer index pointer procedure parser buffer pointer line pointer procedure Returns the character or line index respectively of pointer Both indexes are zero based 14 11 Parser Language Although it is possible to write parsers using the parser buffer abstraction see Sec tion 14 10 Parser Buffers page 204 it i
511. statically scoped language Types are latent Scheme has latent types as opposed to manifest types which means that Scheme associates types with values or objects rather than with variables Other languages with latent types also referred to as weakly typed or dynamically typed languages include APL Snobol and other dialects of Lisp Languages with manifest types sometimes referred to as strongly typed or statically typed languages include Algol 60 Pascal and C Objects have unlimited extent All objects created during a Scheme computation including procedures and continuations have unlimited extent no Scheme object is ever destroyed The system doesn t run out of memory because the garbage collector reclaims the storage occupied by an object when the object cannot possibly be needed by a future computation Other languages in which most objects have unlimited extent include APL and other Lisp dialects Proper tail recursion Scheme is properly tail recursive which means that iterative computation can occur in constant space even if the iterative computation is described by a syn tactically recursive procedure With a tail recursive implementation you can express iteration using the ordinary procedure call mechanics special iteration expressions are provided only for syntactic convenience Procedures are objects Scheme procedures are objects which means that you can create them dy namically store them in data structures ret
512. sted below will always return an exact integer result provided all their arguments are exact integers and the mathematically expected result is representable as an exact integer within the implementation gcd modulo imag part numerator inexact exact quotient abs lcm rationalize angle magnitude real part ceiling make polar remainder denominator make rectangular round expt max truncate floor min Implementations are encouraged but not required to support exact integers and exact rationals of practically unlimited size and precision and to implement the above procedures and the procedure in such a way that they always return exact results when given exact arguments If one of these procedures is unable to deliver an exact result when given exact arguments then it may either report a violation of an implementation restriction or it may silently coerce its result to an inexact number Such a coercion may cause an error later An implementation may use floating point and other approximate representation strate gies for inexact numbers This report recommends but does not require that the IEEE 32 bit and 64 bit floating point standards be followed by implementations that use flonum representations and that implementations using other representations should match or ex ceed the precision achievable using these floating point standards In particular implementations that use flonum representations must follow these rules A flonum
513. stination 9 NOT source XOR destination 10 NOT destination 11 source OR NOT destination 12 NOT source 13 NOT source OR destination 14 NOT source OR NOT destination 15 ONE use foreground color The line style an exact integer in the range 0 to 7 inclusive determines which parts of a line are drawn in the foreground color and which in the background color The default line style solid draws the entire line in the foreground color Alternatively the dash style alternates between foreground and background colors to generate a dashed line This capability is useful for plotting several things on the same graph Chapter 17 Graphics 285 Here is a table showing the name and approximate pattern of the different styles A 1 in the pattern represents a foreground pixel while a represents a background pixel Note that the precise output for each style will vary from device to device The only style that is guaranteed to be the same for every device is solid Style Name Pattern 0 solid 1111111111111111 1 dash ot a tt sss2 2 dot 1 1 1 1 1 1 1 1 3 dash dot 1111111111111 1 4 dash dot dot 11111111111 1 1 5 long dash 11111111111 6 center dash 111111111111 11 Y center dash dash 111111111 11 11 graphics bind drawing mode graphics device drawing mode thunk procedure graphics bind line style graphics device line style thunk procedure These procedures bind the drawing mode or line
514. syntax my or syntax rules my or df my or e e ay or el e2 let temp e1 if temp temp my or e2 let x f Cy 7 temp 8 let odd if even my or x let temp if y y gt T let syntax bindings expression expression special form The syntax of let syntax is the same as a for let syntax The expressions are expanded in the syntactic environment obtained by extending the syntactic environment of the letrec syntax expression with macros whose keywords are the keywords bound to the specified transformers Each binding of a keyword has the subsequent bindings as well as the expressions within its region Thus Chapter 2 Special Forms 37 let syntax a syntax rules b syntax rules a is equivalent to let syntax a syntax rules let syntax b syntax rules define syntax keyword transformer spec special form Keyword is an identifier and transformer spec is a macro transformer expression The syntactic environment is extended by binding the keyword to the specified trans former The region of the binding introduced by define syntax is the entire block in which it appears However the keyword may only be used after it has been defined MIT Scheme permits define syntax to appear both at top level and within lambda bodies The Revised 4 Report permits only top level uses of define syntax When compiling a program a top level instance
515. system facilities that don t fit into other cate gories microcode id operating system variable microcode id operating system name variable microcode id operating system is bound to a symbol that specifies the type of operating system that Scheme is running under There are three possible values unix os 2 or nt microcode id operating system name is a string containing the same name as microcode id operating system the latter is created by interning the former as a symbol microcode id operating system variant variable This variable is a string that identifies the particular variant of the operating system that Scheme is running under Here are some of the possible values Chapter 15 Operating System Interface 255 GNU Linux FreeBSD HP UX Sun0s OS 2 2 1 OS 2 4 0 Microsoft Windows NT 4 0 Build 1381 Service Pack 3 Microsoft Windows 98 Build 410 For Windows systems it is recommended that you match on the prefix of this string and ignore the Build suffix This is because the suffix may contain information about service packs or fixes while the prefix will be constant for a particular version of Windows The next few procedures provide access to the domain name service DNS which main tains associations between internet host names such as www swiss ai mit edu and IP addresses such as 18 23 0 16 In MIT Scheme we represent an internet host name as a string and an IP address as a byte vector
516. t f then the file filename was found successfully opened and the contents were suitable for loading into memory as a device independent bitmap write dib filename string dib dib procedure Return type bool Calls the WriteDIB entry of DIBUTILS DLL Returns stt if the file filename could be opened and written to After this operation the file contains the bitmap data in a standard format that is understood by open dib and various system utilities like the bitmap editor Any problems resulting in failure are signalled by a f return value bitmap from dib dib dib palette hpalette procedure Return type hbitmap Calls the BitmapFromDib entry of DIBUTILS DLL The returned value is a device dependent bitmap The colours from the DIB are matched against colors in palette dib from bitmap bitmap hbitmap style dword bits word palette procedure hpalette Return type dib Returns a DIB containing the same image as the device dependent bitmap bitmap Style determines the kind of DIB e g compression style Calls the DibFromBitmap entry of DIBUTILS DLL dib blt dest hdc x int y int w int h int src dib src x int procedure src y int raster op long Return type bool Calls the DibBlt entry of DIBUTILS DLL Similar to the Win32 API BitBlt call but draws a DIB rather than a piece of another device context Chapter 18 Win32 Package Reference 311 Draws the dib on device context hdc at position x y
517. t which may be any object is printed as if by display mincolA inserts spaces on the right if necessary to make the width at least mincol columns The 6 modifier causes the spaces to be inserted on the left rather than the right The next argument which may be any object is printed as if by write mincolS inserts spaces on the right if necessary to make the width at least mincol columns The 6 modifier causes the spaces to be inserted on the left rather than the right This outputs a newline character n outputs n newlines No ar gument is used Simply putting a newline in control string would work but is often used because it makes the control string look nicer in the middle of a program This outputs a tilde n outputs n tildes Tilde immediately followed by a newline ignores the newline and any following non newline whitespace characters With an the newline is left in place but any following whitespace is ignored This directive is typically used when control string is too long to fit nicely into one line of the program define type clash error procedure arg spec actual format t Procedure S requires its A argument to be of type S but it was called with an argument of type 8 procedure arg spec actual type clash error vector ref first integer vector prints Procedure vector ref requires its first argument to be of type integer but it was called with an argument of typ
518. t Strings bit string zero bit string procedure Returns stt if bit string contains only 0 bits otherwise returns f bit string bit string 1 bit string 2 procedure Compares the two bit string arguments and returns t if they are the same length and contain the same bits otherwise returns f bit string not bit string procedure Returns a newly allocated bit string that is the bitwise logical negation of bit string bit string movec target bit string bit string procedure The destructive version of bit string not The arguments target bit string and bit string must be bit strings of the same length The bitwise logical negation of bit string is computed and the result placed in target bit string The value of this procedure is unspecified bit string and bit string 1 bit string 2 procedure Returns a newly allocated bit string that is the bitwise logical and of the arguments The arguments must be bit strings of identical length bit string andc bit string 1 bit string 2 procedure Returns a newly allocated bit string that is the bitwise logical and of bit string 1 with the bitwise logical negation of bit string 2 The arguments must be bit strings of identical length bit string or bit string 1 bit string 2 procedure Returns a newly allocated bit string that is the bitwise logical inclusive or of the arguments The arguments must be bit strings of identical length bit string xor bit string 1 bit string 2 procedure Returns
519. t accept sym bols as arguments will always accept either interned or uninterned symbols and do not distinguish the two symbol object procedure Returns stt if object is a symbol otherwise returns f symbol foo gt t symbol car a b gt t symbol bar gt df symbol string symbol procedure Returns the name of symbol as a string If symbol was returned by string gt symbol the value of this procedure will be identical in the sense of string to the string that was passed to string gt symbol It is an error to apply mutation procedures such as string set to strings returned by this procedure symbol gt string flying fish flying fish symbol gt string Martin gt martin symbol gt string string gt symbol Malvina Malvina Note that two distinct uninterned symbols can have the same name intern string procedure Returns the interned symbol whose name is string Converts string to the standard alphabetic case before generating the symbol This is the preferred way to create interned symbols as it guarantees the following independent of which case the imple mentation uses for symbols names eq bitBlt intern bitBlt gt itt The user should take care that string obeys the rules for identifiers see Section 1 3 3 Identifiers page 10 otherwise the resulting symbol cannot be read as itself intern soft string procedure Returns the interned symbol whose name is s
520. t answers or even malformed objects that confuse the garbage collector 4 7 1 Fixnum Operations A fixnum is an exact integer that is small enough to fit in a machine word In MIT Scheme fixnums are typically 24 or 26 bits depending on the machine it is reasonable to assume that fixnums are at least 24 bits Fixnums are signed they are encoded using 2 s complement All exact integers that are small enough to be encoded as fixnums are always encoded as fixnums in other words any exact integer that is not a fixnum is too big to be encoded as such For this reason small constants such as 0 or 1 are guaranteed to be fixnums Chapter 4 Numbers 71 fix fixnum object procedure Returns t if object is a fixnum otherwise returns f Here is an expression that determines the largest fixnum let loop m 1 if fix fixnum n loop n 2 n 1 A similar expression determines the smallest fixnum fix fixnum fixnum procedure fix fixnum fixnum procedure fix fixnum fixnum procedure fix lt fixnum fixnum procedure fix gt fixnum fixnum procedure These are the standard order and equality predicates on fixnums When compiled they do not check the types of their arguments fix zero fixnum procedure fix positive fixnum procedure fix negative fixnum procedure These procedures compare their argument to zero When compiled they do not check the type of their argument The code produced by the following expressi
521. t appears in the window s title bar window position operation on os2 graphics device This operation returns the position of the graphics device window on the desktop The position is returned as two values see Section 12 3 Continuations page 167 which are the x and y coordinates of the position These coordinates are in units of pels pixels and measure the distance between the lower left hand corner of the desktop and the lower left hand corner of the graphics device window s frame set window position x y operation on os2 graphics device The graphics device window is moved to the screen position specified by x and y The coordinates x and y are in units of pels pixels and measure the distance between the lower left hand corner of the desktop and the lower left hand corner of the graphics device window s frame window size operation on os2 graphics device This operation returns the size of the client area of the graphics device window The client area is the part of the window that you draw on it does not include the window frame title bar etc The size is returned as two values see Section 12 3 Continuations page 167 which are the width and height of the client area in units of pels pixels set window size width height operation on os2 graphics device This operation sets the size of the client area of the graphics device window to the specified width and height which are in units of pels pixels The client area is the
522. t considered a pattern variable or literal identifier Identifiers that appear in literals are interpreted as literal identifiers to be matched against corresponding subforms of the input A subform in the input matches a literal identifier if and only if it is an identifier and either both its occurrence in the macro expression and its occurrence in the macro definition have the same lexical binding or the two identifiers are equal and both have no lexical binding A subpattern followed by can match zero or more elements of the input It is an error for to appear in literals Within a pattern the identifier must follow the last element of a nonempty sequence of subpatterns More formally an input form F matches a pattern P if and only if e P is a non literal identifier or e Pisa literal identifier and F is an identifier with the same binding or e Pisa list P 1 Pn and F isa list of n forms that match P 1 through P_n respectively or Chapter 2 Special Forms 39 e P is an improper list P 1 P 2 P_n P n 1 and F is a list or improper list of n or more forms that match P 1 through P_n respectively and whose nth cdr matches P_n 1 or e P is of the form P 1 P_n P_n 1 ellipsis where ellipsis is the identifier and F is a proper list of at least n forms the first n of which match P 1 through P_n respectively and each remaining element of F matches P_n 1 or e Pisa datum and F is equal to P in the sense
523. t handler 16 5 2 Condition Abstraction The condition data type is abstracted through a predicate condition and a set of accessor procedures condition object procedure Returns f if and only if object is not a condition condition type condition procedure Returns the condition type of which condition is an instance condition error condition procedure Returns t if the condition is an instance of condition type condition type error or a specialization of it otherwise condition restarts condition procedure Returns the list of restarts specified when condition was created condition continuation condition procedure Returns the continuation specified when condition was created This is provided for inspecting the state of the system when the condition occurred not for continuing or restarting the computation Chapter 16 Error System 271 write condition report condition port procedure Writes a description of condition to port using the reporter function from the condi tion type associated with condition See also condition report string 16 5 3 Simple Operations on Condition Instances The simple procedures described in this section are built on top of the more detailed abstraction of condition objects described above While these procedures are sometimes easier to use they are often less efficient make condition condition type continuation restarts field plist procedure Create a new condition object as an instanc
524. t is a special object of its own type it is not a pair it has no elements and its length is zero The most general notation external representation for Scheme pairs is the dotted notation cl c2 where c1 is the value of the car field and c2 is the value of the cdr field For example 4 5 is a pair whose car is 4 and whose cdr is 5 Note that 4 5 is the external representation of a pair not an expression that evaluates to a pair A more streamlined notation can be used for lists the elements of the list are simply enclosed in parentheses and separated by spaces The empty list is written For example the following are equivalent notations for a list of symbols abcde a b c d e ODM Whether a given pair is a list depends upon what is stored in the cdr field When the set cdr procedure is used an object can be a list one moment and not the next define x list a b c define y x y gt abc list y gt t set cdr x 4 gt unspecified x gt a 4 eqv x y gt t y gt a 4 list y gt df set cdr x x unspecified list y gt df A chain of pairs that doesn t end in the empty list is called an improper list Note that an improper list is not a list The list and dotted notations can be combined to represent improper lists as the following equivalent notations show abc d a b c d 1 The above definitions imply that all lists have finite le
525. t is unspecified here but can be converted to and from seconds by supplied procedures A count in ticks is represented as an exact integer At present each tick is one millisecond but this may change in the future process time clock procedure Returns the amount of process time in ticks that has elapsed since Scheme was started Process time is measured by the operating system and is time during which the Scheme process is computing It does not include time in system calls but depending on the operating system it may include time used by subprocesses process time clock 21290 real time clock procedure Returns the amount of real time in ticks that has elapsed since Scheme was started Real time is the time measured by an ordinary clock real time clock 33474836 internal time ticks gt seconds ticks procedure Returns the number of seconds corresponding to ticks The result is always a real number Chapter 15 Operating System Interface 247 internal time ticks gt seconds 21290 gt 21 29 internal time ticks gt seconds 33474836 33474 836 internal time seconds gt ticks seconds procedure Returns the number of ticks corresponding to seconds Seconds must be a real num ber internal time seconds gt ticks 20 88 20880 internal time seconds gt ticks 20 83 20830 system clock procedure Returns the amount of process time in seconds that has elapsed since Scheme was started Roughly equivalent to internal tim
526. t port s buffer so that it can hold at most size characters Characters in the buffer are discarded Size must be an exact non negative integer 14 9 4 Output Port Operations This section describes the standard operations on output ports Following that some useful custom operations are described write char output port char operation on output port Writes char to output port and returns an unspecified value write substring output port string start end operation on output port Writes the substring specified by string start and end to output port and returns an unspecified value Equivalent to writing the characters of the substring one by one to output port but is implemented very efficiently fresh line output port operation on output port Most output ports are able to tell whether or not they are at the beginning of a line of output If output port is such a port end of line is written to the port only if the port is not already at the beginning of a line If output port is not such a port and end of line is unconditionally written to the port Returns an unspecified value flush output output port operation on output port If output port is buffered this causes its buffer to be written out Otherwise it has no effect Returns an unspecified value discretionary flush output output port operation on output port Normally this operation does nothing However ports that support discretionary output flushing implement this operati
527. t procedure guarantee input port object procedure guarantee output port object procedure guarantee i o port object procedure These procedures check the type of object signalling an error of type condition type wrong type argument if it is not a port input port output port or I O port respectively Otherwise they return object The next five procedures return the runtime system s standard ports All of the standard ports are dynamically bound by the REP loop this means that when a new REP loop is started for example by an error each of these ports is dynamically bound to the 1 O port of the REP loop When the REP loop exits the ports revert to their original values current input port procedure Returns the current input port This is the default port used by many input proce dures Initially current input port returns the value of console i o port current output port procedure Returns the current output port This is the default port used by many output procedures Initially current output port returns the value of console i o port notification output port procedure Returns an output port suitable for generating notifications that is messages to the user that supply interesting information about the execution of a program For example the load procedure writes messages to this port informing the user that a file is being loaded Initially notification output port returns the value of console i o port trace output port pro
528. t starts with a syntactic keyword is a special form Each special form has its own syntax which is described later in the manual Note that syntactic keywords and variable bindings share the same namespace A local variable binding may shadow a syntactic keyword and a local syntactic keyword definition may shadow a variable binding The following list contains all of the syntactic keywords that are defined when MIT Scheme is initialized access and begin case cond cons stream declare default object define define integrable define structure define syntax delay do er macro transformer 14 MIT Scheme Reference fluid let if lambda let let let syntax let syntax letrec letrec syntax local declare named lambda non hygienic macro transformer or quasiquote quote rsc macro transformer sc macro transformer set syntax rules the environment 1 4 4 Procedure Call Syntax operator operand A procedure call is written by simply enclosing in parentheses expressions for the proce dure to be called the operator and the arguments to be passed to it the operands The operator and operand expressions are evaluated and the resulting procedure is passed the resulting arguments See Section 2 1 Lambda Expressions page 15 for a more complete description of this Another name for the procedure call expression is combination This word is more specific in that it always refers to the expression procedure call sometimes refer
529. t states esineet ase sean hes REES 198 POLC CY PS ices Ghee ka ig ee ewan SR ds 198 port with input blocking mode 202 port with input terminal mode 203 port with output blocking mode 203 port with output terminal mode 204 joo MN DE 179 positive 2 x eite IURE aE seas 62 jM C 190 predicate 12 RR eee edt vr Russ 30 predicate char set sees eee eee 84 primitive procedure name 167 primitive procedure c 0 0 e ivs 166 prznt proced re 40S P Ert Bee NY 31 procedure arityc ocl6 me eR RI pede TEPS 166 procedure arity valid c ke beeen 166 procedure environment s 166 procedure 2 smile ense debet 165 process time cCloCk i bee eR 246 promise forced zc e Me eee 8 134 promise value exe hesmieleec se ebek ek 134 D EONLSO7 22 24 2 donee d vate a de 134 prompt for command char 195 prompt for command expression 195 prompt for confirmation 196 prompt for evaluated expression 196 prompt for expression sss 195 p PEE 231 Q quasiquote Izd ESE eee es 23 105 GUT CK SOT Gs susie ate qid iuuenes duode iy g ick sort 1 4 decker a tae ted 122 QUOT Ci c ros A E E ated educa m aD DE ku a 22 105 quotient 22295 aae A 63 64 R raise windowon os2 graphics device 298 random isie ness PE T4 random state 2 49 ees eee Ras 75
530. t the following operations create image width height operation on graphics device Images are created using the create image graphics operation specifying the width and height of the image in device coordinates pixels graphics operation device create image 200 100 The initial contents of an image are unspecified create image is a graphics operation rather than a procedure because the kind of image returned depends on the kind of graphics device used and the options specified in its creation The image may be used freely with other graphics devices created with the same attributes but the effects of using an image with a graphics device with different attributes for example different colors is undefined Under X the image is display dependent draw image x y image operation on graphics device The image is copied into the graphics device at the specified position draw subimage x y image im x im y w h operation on graphics device Part of the image is copied into the graphics device at the specified x y position The part of the image that is copied is the rectangular region at im x and im y and of width w and height h These four numbers are given in device coordinates pixels image object procedure Returns stt if object is an image otherwise returns f image destroy image procedure This procedure destroys image returning storage to the system Programs should destroy images after they have been used because even mode
531. tains only those pathnames whose name type and version components match those of directory wild or f as one of these components means match anything The OS 2 and Windows implementations support globbing in which the charac ters and are interpreted to mean match anything and match any character respectively This globbing is supported only in the file part of directory 15 5 Date and Time MIT Scheme provides a simple set of procedures for manipulating date and time infor mation There are four time representations each of which serves a different purpose Each representation may be converted to any of the others The primary time representation universal time is an exact non negative integer count ing the number of seconds that have elapsed since midnight January 1 1900 UTC UTC stands for Coordinated Universal Time and is the modern name for Greenwich Mean Time This format is produced by get universal time and decoded time universal time Chapter 15 Operating System Interface 239 The second representation decoded time is a record structure in which the time is broken down into components such as month minute etc Decoded time is always relative to a particular time zone which is a component of the structure This format is produced by global decoded time and local decoded time The third representation file time is an exact non negative integer that is larger for increasing time Unlike unive
532. tate gen counter must return a distinct procedure every time since each procedure has its own internal counter gen loser however returns equivalent procedures each time since the local state does not affect the value or side effects of the procedures define gen counter lambda let n 0 lambda set n n 1 n let g gen counter eqv g g dt eqv gen counter gen counter gt df define gen loser lambda let n 0 lambda set n n 10 27 let g gen loser eqv g g gt dt eqv gen loser gen loser gt unspecified Chapter 3 Equivalence Predicates 53 letrec f lambda if eqv f g both f g lambda O if eqv f g both g eqv f g unspecified letrec f lambda O if eqv f g f both g lambda O if eqv f g g both eqv f g gt Hf Objects of distinct types must never be regarded as the same object Since it is an error to modify constant objects those returned by literal expressions the implementation may share structure between constants where appropriate Thus the value of eqv on constants is sometimes unspecified let x a eqv x x gt dit eqv a a gt unspecified eqv a a unspecified eqv b cdr a b unspecified Rationale The above definition of eqv allows implementations latitude in their treatment of procedures and liter
533. tation for the character The representation is expanded in order to allow for the use of UTF 16 in the future make char code bucky bits Builds a character from code and bucky bits Both code and bucky bits must be exact non negative integers in the appropriate range Use char code and char bits to extract the code and bucky bits from the character If 0 is specified for bucky bits make char produces an ordinary character otherwise the appropriate bits are turned on as follows 1 2 4 8 16 For example make char make char make char make char char bits char 97 0 97 1 97 2 97 3 procedure Meta Control Super Hyper Top gt a gt M a gt C a gt C M a procedure Returns the exact integer representation of char s bucky bits For example Note that the Control bucky bit is different from the ASCII control key This means that SOH ASCII ctrl A is different from C A In fact the Control bucky bit is completely orthogonal to the ASCII control key making possible such characters as C SOH Chapter 5 Characters 81 char bits a gt 0 char bits m a gt 1 char bits c a gt 2 char bits c m a gt 3 char code char procedure Returns the character code of char an exact integer For example char code a gt 97 char code c a gt 97 char code limit variable char bits limit variable These variables define the exclusive upper limit
534. te blocking modes for input and for output If an input port is in blocking mode attempting to read from it when no input is available will cause Scheme to block i e suspend itself until input is available If an input port is in non blocking mode attempting to read from it when no input is available will cause the reading procedure to return immediately indicating the lack of input in some way exactly how this situation is indicated is separately specified for each procedure or operation An output port in blocking mode will block if the output device is not ready to accept output In non blocking mode it will return immediately after performing as much output as the device will allow again each procedure or operation reports this situation in its own way Interactive ports are initially in blocking mode this can be changed at any time with the procedures defined in this section These procedures represent blocking mode by the symbol blocking and non blocking mode by the symbol nonblocking An argument called mode must be one of these symbols A port argument to any of these procedures may be any port even if that port does not support blocking mode in that case the port is not modified in any way port input blocking mode port procedure Returns the input blocking mode of port port set input blocking mode port mode procedure Changes the input blocking mode of port to be mode Returns an unspecified value port with
535. te nl n2 procedure integer round n1 n2 procedure These procedures combine integer division with rounding For example the following are equivalent 64 MIT Scheme Reference integer floor nl n2 floor n1 n2 However the former is faster and does not produce an intermediate result Note that integer truncate is the same as quotient integer divide n1 n2 procedure integer divide quotient qr procedure integer divide remainder qr procedure integer divide is equivalent to performing both quotient and remainder at once The result of integer divide is an object with two components the procedures integer divide quotient and integer divide remainder select those components These procedures are useful when both the quotient and remainder are needed often computing both of these numbers simultaneously is much faster than computing them separately For example the following are equivalent lambda n d cons quotient n d remainder n d lambda n d let qr integer divide n d cons integer divide quotient qr integer divide remainder qr gcd nl procedure lem n1 procedure These procedures return the greatest common divisor or least common multiple of their arguments The result is always non negative gcd 32 36 gt 4 gcd gt 0 lcm 32 36 gt 288 lcm 32 0 36 288 0 inexact lcm gt 1 numerator q procedure denominator q procedure These procedures return the numerator or
536. teger char convert return value f cannot be passed by reference unchecked windows type The type which is not checked and undergoes only the basic conversion from a Scheme integer to a C integer or from a Scheme string to a C pointer to the first byte of the string Returned unchecked values are returned as integers bool windows type Scheme booleans are analogous to C integers 0 and 1 Windows type bool have been defined as define windows type bool boolean lambda x if x 1 0 lambda x if eq x 0 f t f char windows type Scheme characters are converted into C objects of type char which are indistinguish able from small integers 306 MIT Scheme Reference int windows type uint windows type long windows type ulong windows type short windows type ushort windows type word windows type byte windows type Various integer types that are passed without conversion string windows type A string that is passed as a C pointer of type char to the first character in the string char windows type A string or f The string is passed as a pointer to characters The string is correctly null terminated f is passed as the null pointer This is an example where there is a more complex mapping between C objects and Scheme objects C s char type is represented as one of two Scheme types depending on its value This allows us us to distinguish between the C string pointer that points to the empty sequence of characters and
537. teger is operating system dependent Under unix it is the least significant 12 bits of the st mode element of the struct stat structure Under OS 2 and Windows it is the file attribute bits which are described below If filename does not name an existing file is returned set file modes filename modes procedure Filename must name an existing file Modes must be an exact non negative integer that could have been returned by a call to file modes set file modes modifies the file s permissions to be those encoded by modes 0s2 file mode read only variable 0s2 file mode hidden variable os2 file mode system variable os2 file mode directory variable os2 file mode archived variable The values of these variables are the mode bits that comprise the value returned by file modes under OS 2 These bits are small integers that are combined by adding to form a complete set of modes The integer zero represents a set of modes in which none of these bits are set 236 MIT Scheme Reference nt file mode read only variable nt file mode hidden variable nt file mode system variable nt file mode directory variable nt file mode archive variable nt file mode normal variable nt file mode temporary variable nt file mode compressed variable The values of these variables are the mode bits that comprise the value returned by file modes under Windows These bits are small integers that are combined by adding to form a complete set of modes
538. tend to long 600000000000000 4 5 Numerical operations See Section 1 1 3 Entry Format page 5 for a summary of the naming conventions used to specify restrictions on the types of arguments to numerical routines The examples used in this section assume that any numerical constant written using an exact notation is indeed represented as an exact number Some examples also assume that certain numerical constants written using an inexact notation can be represented without loss of accuracy the inexact constants were chosen so that this is likely to be true in implementations that use flonums to represent inexact numbers number object procedure complex object procedure real object procedure rational object procedure integer object procedure These numerical type predicates can be applied to any kind of argument including non numbers They return t if the object is of the named type and otherwise they return 4f In general if a type predicate is true of a number then all higher type predicates are also true of that number Consequently if a type predicate is false of a number then all lower type predicates are also false of that number In MIT Scheme the rational procedure is the same as real and the complex procedure is the same as number Chapter 4 Numbers 61 If z is an inexact complex number then real z is true if and only if zero imag part z is true If x is an inexact real number then integer x i
539. text field is the body of the instructions a string xml uninterpreted text record type Some documents contain entity references that can t be expanded by the parser perhaps because the document requires an external DTD Such references are left un interpreted in the output by wrapping them in xml uninterpreted records In some situations for example when they are embedded in attribute values the surrounding text is also included in the xml uninterpreted record The text field contains the uninterpreted XML text a string xml dtd root external internal record type The xm1 dtd record represents a document type declaration The root field is an XML name for the root element of the document External is either an xml external id record or sf Internal is a list of DTD element records e g xml element xml lattlist etc The remaining record types are valid only within a DTD xml element name content type record type The xml element record represents an element type declaration Name is the XML name of the type being declared a symbol Content type describes the type and can have several different values as follows e The XML names EMPTY and ANY correspond to the XML keywords of the same name e A list MIX type corresponds to the GtPCDATA type syntax xml attlist name definitions record type The xml attlist record represents an attribute list declaration Name is the XML name of the
540. th gt 0 string length The length 10 string null string procedure Returns stt if string has zero length otherwise returns amp f string null gt dit string null Hi gt df string ref string k procedure Returns character k of string K must be a valid index of string string ref Hello 1 gt e string ref Hello 5 5 not in correct range string set string k char procedure Stores char in element k of string and returns an unspecified value K must be a valid index of string and char must satisfy the predicate char ascii define str Dog unspecified string set str 0 L unspecified str gt Log string set str 3 t 3 not in correct range 6 3 Comparison of Strings string stringl string2 procedure substring stringl start end string2 start end procedure string ci string string2 procedure substring ci string start end string2 start end procedure Returns t if the two strings substrings are the same length and contain the same characters in the same relative positions otherwise returns 4f string ci and substring ci don t distinguish uppercase and lowercase letters but string and substring do string PIE PIE gt t string PIE pie gt df string ci PIE pie gt t substring Alamo 1 3 cola 2 4 dtt compares la MIT Scheme Reference string lt string1 string2 procedure substring lt string start1 end1 stri
541. that exists a new operating system to which Scheme was ported might use a format different from any of its predecessors Therefore MIT Scheme provides two ways to represent file names filenames also called namestrings which are strings in the implementation dependent form customary for the file system and pathnames which are special abstract data objects that represent file names in an implementation independent way Procedures are provided to convert between these two representations and all manipulations of files can be expressed in machine independent terms by using pathnames 222 MIT Scheme Reference In order to allow MIT Scheme programs to operate in a network environment that may have more than one kind of file system the pathname facility allows a file name to specify which file system is to be used In this context each file system is called a host in keeping with the usual networking terminology Note that the examples given in this section are specific to unix pathnames Pathnames for other operating systems have different external representations 15 1 1 Filenames and Pathnames Pathname objects are usually created by parsing filenames character strings into com ponent parts MIT Scheme provides operations that convert filenames into pathnames and vice versa pathname object procedure Returns a pathname that is the equivalent of object Object must be a pathname or a string If object is a pathname it is return
542. the floating point divide by zero condition type and it is possible to dynami cally specify an arbitrary Scheme procedure to be executed when a condition of that type is signalled This procedure then finds the stack frame containing the call to the division operator and returns the appropriate value from that frame Another useful kind of behavior is the ability to specify uniform handling for related classes of conditions For example it might be desirable when opening a file for input to gracefully handle a variety of different conditions associated with the file system One such condition might be that the file does not exist in which case the program will try some other action perhaps opening a different file instead Another related condition is that the file exists but is read protected so it cannot be opened for input If these or any other related conditions occur the program would like to skip this operation and move on to something else At the same time errors unrelated to the file system should be treated in their usual way For example calling car on the argument 3 should signal an error Or perhaps the name given for the file is syntactically incorrect a condition that probably wants to be handled differently from the case of the file not existing To facilitate the handling of classes of conditions the error system taxonomically orga nizes all condition types The types are related to one another by taxonomical link
543. the buffer is full However the standard output procedures described in this section perform what is called discretionary flushing of the buffer Discretionary output flushing works as follows After a procedure performs its output writing characters to the output buffer it checks to see if the port implements an operation called discretionary flush output If so then that operation is invoked to flush the buffer At present only the console port defines discretionary flush output this is used to guarantee that output to the console appears immediately after it is written without requiring calls to flush output All optional arguments called output port if not supplied default to the current output port write char char output port procedure Writes char the character itself not a written representation of the character to output port performs discretionary output flushing and returns an unspecified value write string string output port procedure Writes string to output port performs discretionary output flushing and returns an unspecified value l his is equivalent to writing the contents of string one character at a time using write char except that it is usually much faster write substring string start end output port procedure Writes the substring defined by string start and end to output port performs dis cretionary output flushing and returns an unspecified value This is equivalent to writing the contents of
544. the identifier being left free Chapter 2 Special Forms 43 define syntax leti sc macro transformer lambda exp env let id cadr exp init caddr exp exp cadddr exp lambda id make syntactic closure env list id exp make syntactic closure env init leti is a simplified version of let that only binds a single identifier and whose body consists of a single expression When the body expression is syntactically closed in its original syntactic environment the identifier that is to be bound by let1 must be left free so that it can be properly captured by the lambda in the output form In most situations the free names argument to make syntactic closure is the empty list In those cases the more succinct close syntax can be used close syntax form environment procedure Environment must be a syntactic environment and form must be a form Returns a new syntactic closure of form in environment with no free names Entirely equivalent to make syntactic closure environment form To obtain a syntactic environment other than the usage environment use capture syntactic environment capture syntactic environment procedure procedure capture syntactic environment returns a form that will when transformed call procedure on the current syntactic environment Procedure should compute and return a new form to be transformed in that same syntactic environment in place of the form An example wi
545. the result this is especially true of and zero When in doubt consult a numerical analyst 62 MIT Scheme Reference zero z procedure positive x procedure negative x procedure odd x procedure even x procedure These numerical predicates test a number for a particular property returning t or See note above regarding inexact numbers max xl x2 procedure min xl x2 procedure These procedures return the maximum or minimum of their arguments max 3 4 gt 4 exact max 3 9 4 gt 4 0 inexact Note If any argument is inexact then the result will also be inexact unless the procedure can prove that the inaccuracy is not large enough to affect the result which is possible only in unusual implementations If min or max is used to compare numbers of mixed exactness and the numerical value of the result cannot be represented as an inexact number without loss of accuracy then the procedure may report a violation of an implementation restriction z1 procedure uP PM procedure These procedures return the sum or product of their arguments 3 4 gt 7 3 3 gt 0 4 4 C gt 1 zlz2 procedure f z122 procedure With two or more arguments these procedures return the difference or quotient of their arguments associating to the left With one argument however they return the additive or multiplicative inverse of their argument 34 gt 1 3 4 5 gt 6 3
546. the tag name is needed If used structure instances will be tagged with that variable s value The variable must be defined when define structure is evaluated The type option is restricted to the values vector and list The include option is not implemented 2 11 Macros This section is largely taken from the Revised 4 Report on the Algorithmic Language Scheme The section on Syntactic Closures is derived from a document written by Chris Hanson The section on Explicit Renaming is derived from a document written by William Clinger Scheme programs can define and use new derived expression types called macros Program defined expression types have the syntax keyword datum where keyword is an identifier that uniquely determines the expression type This identifier is called the syntactic keyword or simply keyword of the macro The number of the datums and their syntax depends on the expression type Chapter 2 Special Forms 35 Each instance of a macro is called a use of the macro The set of rules that specifies how a use of a macro is transcribed into a more primitive expression is called the transformer of the macro MIT Scheme also supports anonymous syntactic keywords This means that it s not necessary to binding a macro transformer to a syntactic keyword before it is used Instead any macro transformer expression can appear as the first element of a form and the form will be expanded by the transformer
547. this procedure refers to ASCII rather than ISO 8859 1 predicate gt char set predicate procedure Predicate must be a procedure of one argument predicate gt char set creates and returns a character set consisting of the IsO 8859 1 characters for which predicate is true char set difference char set1 char set2 procedure Returns a character set consisting of the characters that are in char set1 but aren t in char set2 char set intersection char set procedure Returns a character set consisting of the characters that are in all of the char sets char set union char set procedure Returns a character set consisting of the characters that are in at least one o the char sets char set invert char set procedure Returns a character set consisting of the ISO 8859 1 characters that are not in char set 5 7 Unicode MIT Scheme provides rudimentary support for Unicode characters In an ideal world Unicode would be the base character set for MIT Scheme but this implementation predates the invention of Unicode And converting an application of this size is a considerable undertaking So for the time being the base character set is I80 8859 1 and Unicode support is grafted on This Unicode support was implemented as a part of the XML parser see Section 14 12 XML Parser page 217 implementation XML uses Unicode as its base character set and any XML implementation must support Unicode The Unicode implementation consists
548. tion is an MIT Scheme extension Chapter 1 Overview 13 i These character sequences introduce a notation used to show circular structures in printed output or to denote them in input The notation works much like that in Common Lisp and is an MIT Scheme extension 1 4 Expressions A Scheme expression is a construct that returns a value An expression may be a literal a variable reference a special form or a procedure call 1 4 1 Literal Expressions Literal constants may be written by using an external representation of the data In general the external representation must be quoted see Section 2 6 Quoting page 22 but some external representations can be used without quotation abc gt abc 145932 gt 145932 t gt t a gt a The external representation of numeric constants string constants character constants and boolean constants evaluate to the constants themselves Symbols pairs lists and vectors require quoting 1 4 2 Variable References An expression consisting of an identifier see Section 1 3 3 Identifiers page 10 is a variable reference the identifier is the name of the variable being referenced The value of the variable reference is the value stored in the location to which the variable is bound An error is signalled if the referenced variable is unbound or unassigned define x 28 x gt 28 1 4 3 Special Form Syntax keyword component A parenthesized expression tha
549. tion of each de vice type for details graphics device type must satisfy graphics type available Graphics device type may also be f in which case the graphics device type is cho sen by the system from what is available This allows completely portable graphics programs to be written provided no custom graphics operations are used When graphics device type is f no further arguments may be given each graphics device type will use some sensible defaults If more control is required then the program should use one of the two procedures above to dispatch on the available types This procedure opens and initializes the device which remains valid until explicitly closed by the procedure graphics close Depending on the implementation of the graphics device if this object is reclaimed by the garbage collector the graphics device may remain open or it may be automatically closed While a graphics device remains open the resources associated with it are not released 282 MIT Scheme Reference graphics close graphics device procedure Closes graphics device releasing its resources Subsequently it is an error to use graphics device 17 2 Coordinates for Graphics Each graphics device has two different coordinate systems associated with it device coordinates and virtual coordinates Device coordinates are generally defined by low level characteristics of the device itself and often cannot be changed Most device coordinate systems are define
550. tion of the newly created restart it must either be a procedure of one argument a port or a string Effector is a procedure which will be called when the restart is invoked by invoke restart Interactor specifies the arguments that are to be passed to effector when it is invoked interactively it may be either a procedure of no arguments or f If interactor is f this restart is not meant to be invoked interactively The value returned by with restart is the value returned by thunk Should the restart be invoked by a condition handler however the effector will not return back to the handler that invoked it Instead the effector should call a continuation created before the condition signalling process began and with restart will therefore not return in the normal manner define by george thunk This code handles conditions that arise while executing thunk by invoking the GEORGE restart passing 1 and 2 to the restart s effector code bind condition handler All conditions lambda condition invoke restart find restart george 1 2 thunk define can george thunk This code provides a way of handling errors the GEORGE restart In order to GEORGE you must supply two values lambda call with current continuation lambda kappa with restart george Name This restart is named george Reporter lambda a b Effector kappa list george a b values Interactor thunk
551. to SUIDBS Lose bore tte zo RUM Ee 183 id ntiler use cito hes ete X brin aerea 40 identifier defn 5 cse uere e ge 10 identity Additive iscsi enel mb Ra 62 identity multiplicative 00000 62 images Graphics i2 ceo ee Ep DR Rede 287 imiiutables i dois eee ese Dy DE ER 9 implementation restriction 58 implicit begin nesnessee tpe m erpres 2T improper list defun ee 105 index of bit string defn 123 index of list defn 0 0005 110 index of string defn reme 8T index of subvector defn 0 119 index of vector defn 0 00 119 inheritance of environment bindings defn 6 initial environment defn 0 04 7 initial size of hash table 147 PUC aieka eemrbveL5sp T PG M De REESE 179 input fOPM siritinercbx eed cae sede eae as 41 input form to MacrO 0 eee eee 47 input operations x e gere irer edd 185 input port operations lesse esee 198 input port console eee eee 181 input port current defn 06 179 Input port file verdict eI erret 181 input port siring 2 2 2 f Rr REPRE S 183 insensitivity to case in programs defn D installed as pathname component 225 instance of condition defn 268 integer division 5 22 e REREGGG gue deeds 63 integer converting to bit stri
552. tring Converts string to the standard alphabetic case before generating the symbol If no such interned symbol exists returns sf This is exactly like intern except that it will not create an interned symbol but only returns symbols that already exist string gt symbol string procedure Returns the interned symbol whose name is string Although you can use this proce dure to create symbols with names containing special characters or lowercase letters it s usually a bad idea to create such symbols because they cannot be read as them selves See symbol gt string 130 MIT Scheme Reference eq mISSISSIppi mississippi gt dit string gt symbol mISSISSIppi the symbol with the name mISSISSIppi eq bitBlt string gt symbol bitBlt gt sf eq JollyWog string gt symbol symbol gt string JollyWog gt dtt string K Harper M D symbol gt string string gt symbol K Harper M D gt dit string gt uninterned symbol string procedure Returns a newly allocated uninterned symbol whose name is string It is unimportant what case or characters are used in string Note this is the fastest way to make a symbol generate uninterned symbol object procedure Returns a newly allocated uninterned symbol that is guaranteed to be different from any other object The symbol s name consists of a prefix string followed by the exact non negative integer value of an internal counter The counter is
553. tring procedure substring lower case string start end procedure These procedures return stt if all the letters in the string substring are of the correct case otherwise they return amp f The string substring must contain at least one letter or the procedures return f map string upper case A art Art ART gt Hf t f f Ht string capitalize string procedure string capitalize string procedure substring capitalize string start end procedure string capitalize returns a newly allocated copy of string in which the first alpha betic character is uppercase and the remaining alphabetic characters are lowercase For example abcDEF becomes Abcdef string capitalize is the destructive version of string capitalize it alters string and returns an unspecified value substring capitalize destructively capitalizes the specified part of string string downcase string procedure string downcase string procedure substring downcase string start end procedure string downcase returns a newly allocated copy of string in which all uppercase letters are changed to lowercase string downcase is the destructive version of string downcase it alters string and returns an unspecified value substring downcase destructively changes the case of the specified part of string define str ABCDEFG unspecified substring downcase str 3 5 unspecified str ABCdeFG string upcase string procedure string upcase st
554. turns the name of primitive procedure a symbol primitive procedure name car gt car implemented primitive procedure primitive procedure procedure Returns t if primitive procedure is implemented otherwise returns f Useful be cause the code that implements a particular primitive procedure is not necessarily linked into the executable Scheme program 12 3 Continuations call with current continuation procedure procedure Procedure must be a procedure of one argument Packages up the current continua tion see below as an escape procedure and passes it as an argument to procedure The escape procedure is a Scheme procedure of one argument that if it is later passed a value will ignore whatever continuation is in effect at that later time and will give the value instead to the continuation that was in effect when the escape procedure was created The escape procedure created by call with current continuation has unlimited extent just like any other procedure in Scheme It may be stored in variables or data structures and may be called as many times as desired The following examples show only the most common uses of this procedure If all real programs were as simple as these examples there would be no need for a procedure with the power of call with current continuation call with current continuation lambda exit for each lambda x if negative x exit x 54 0 37 3 245 19 t gt 3 168 MIT Scheme Refere
555. uated by the top level REP loop Although all bindings in system global environment are visible to the REP loop definitions that are typed at or loaded by the REP loop occur in the user initial environment This is partly a safety measure if you enter a definition that happens to have the same name as a critical system procedure your definition will be visible only to the procedures you define in the user initial environment the MIT Scheme system procedures which are defined in system global environment will continue to see the original definition 176 MIT Scheme Reference 13 3 REPL Environment nearest repl environment procedure Returns the current REP loop environment i e the current environment of the closest enclosing REP loop When Scheme first starts up this is the same as user initial environment ge environment procedure Changes the current REP loop environment to environment Environment can be either an environment or a procedure object If it s a procedure the environment in which that procedure was closed is the new environment 13 4 Top level Environments The operations in this section manipulate top level environments as opposed to envi ronments created by the application of procedures For historical reasons top level envi ronments are referred to as interpreter environments the environment special form Returns the current environment This form may only be evaluated in a top level environment An error
556. uld have been written define wt tree min tree wt tree index tree 0 define wt tree min datum tree wt tree index datum tree 0 define wt tree min pair tree wt tree index pair tree 0 wt tree delete min wt tree procedure Returns a new tree containing all of the associations in wt tree except the association with the least key under the wt tree s ordering relation An error is signalled if the tree is empty The average and worst case times required by this operation are proportional to the logarithm of the number of associations in the tree This operation is equivalent to wt tree delete wt tree wt tree min wt tree wt tree delete min wt tree procedure Removes the association with the least key under the wt tree s ordering relation An error is signalled if the tree is empty The average and worst case times required by this operation are proportional to the logarithm of the number of associations in the tree This operation is equivalent to wt tree delete wt tree wt tree min wt tree 164 MIT Scheme Reference Chapter 12 Procedures 165 12 Procedures Procedures are created by evaluating lambda expressions see Section 2 1 Lambda Ex pressions page 15 the lambda may either be explicit or may be implicit as in a procedure define see Section 2 4 Definitions page 20 Also there are special built in procedures called primitive procedures such as car these procedures are not written in Scheme but in
557. unspecified The symbol field name must be a member of the list of field names in the call to make record type that created the type represented by record type Chapter 10 Miscellaneous Datatypes 133 record object procedure Returns t if object is a record of any type and f otherwise Note that record may be true of any Scheme value of course if it returns t for some particular value then record type descriptor is applicable to that value and returns an appropriate descriptor record type descriptor record procedure Returns the record type descriptor representing the type of record That is for ex ample if the returned descriptor were passed to record predicate the resulting predicate would return t when passed record Note that it is not necessarily the case that the returned descriptor is the one that was passed to record constructor in the call that created the constructor procedure that created record record type object procedure Returns stt if object is a record type descriptor otherwise returns f record type name record type procedure Returns the type name associated with the type represented by record type The returned value is eqv to the type name argument given in the call to make record type that created the type represented by record type record type field names record type procedure Returns a list of the symbols naming the fields in members of the type represented by record type The returned value is equal
558. ure defn 2 20 defining foreign procedures 307 defining foreign types 04 304 detinitioti 2 cet devrppeRP RR Serv P ug ed HR 20 definition internal 7222 2 enm EO Pr RERet is 21 definition internal defn susuuu 20 definition top level 00 22 eee ee 2l definition top level defn issue 20 deletion of alist element 140 deletion of file 1 24 ce cane sb ner oe 232 deletion of list element 112 delimiter in programs defn 10 device coordinates graphics defn 282 device pathname component 223 difference of numbers 000 62 directive format defn 0 000 191 directory path defn seseris em ee tmt 224 directory converting pathname to 229 directory current working defn 230 directory pathname component 223 directory predicate for 00005 233 directory reading so i035 e hn 229 238 discrete maps using binary trees 157 discretionary flushing of buffered output 188 disembodied property list 128 display clearing eR rep 189 display X graphics 0 see e eee 289 division of integers 00000000 63 division of numbers 22a rte 62 338 DLL DIBUTILS DLL 309
559. urn them as the results of other procedures and so on Other languages with such procedure objects include Common Lisp and ML 4 MIT Scheme Reference Continuations are explicit In most other languages continuations operate behind the scenes In Scheme continuations are objects you can use continuations for implementing a variety of advanced control constructs including non local exits backtracking and coroutines Arguments are passed by value Arguments to Scheme procedures are passed by value which means that Scheme evaluates the argument expressions before the procedure gains control whether or not the procedure needs the result of the evaluations ML C and APL are three other languages that pass arguments by value In languages such as SASL and Algol 60 argument expressions are not evaluated unless the values are needed by the procedure Scheme uses a parenthesized list Polish notation to describe programs and other data The syntax of Scheme like that of most Lisp dialects provides for great expressive power largely due to its simplicity An important consequence of this simplicity is the susceptibility of Scheme programs and data to uniform treatment by other Scheme programs As with other Lisp dialects the read primitive parses its input that is it performs syntactic as well as lexical decomposition of what it reads 1 1 Notational Conventions This section details the notational conventions used throughout the rest
560. used but it is the duty of each implementation to make the result as close as practical to the mathematically ideal result Rational operations such as should always produce exact results when given exact arguments If the operation is unable to produce an exact result then it may either report the violation of an implementation restriction or it may silently coerce its result to an inexact value See Section 4 3 Implementation restrictions page 58 With the exception of inexact gt exact the operations described in this section must generally return inexact results when given any inexact arguments An operation may however return an exact result if it can prove that the value of the result is unaffected by the inexactness of its arguments For example multiplication of any number by an exact zero may produce an exact zero result even if the other argument is inexact 4 3 Implementation restrictions Implementations of Scheme are not required to implement the whole tower of subtypes see Section 4 1 Numerical types page 57 but they must implement a coherent subset consistent with both the purposes of the implementation and the spirit of the Scheme language For example an implementation in which all numbers are real may still be quite useful Implementations may also support only a limited range of numbers of any type subject to the requirements of this section The supported range for exact numbers of any type may be different
561. utput port in characters If output port has no natural width e g if it is a file port f is returned y size output port operation on output port Returns an exact positive integer that is the height of output port in characters If output port has no natural height e g if it is a file port is returned output port x size output port procedure This procedure invokes the custom operation whose name is the symbol x size if it exists If the x size operation is both defined and returns a value other than f that value is returned as the result of this procedure Otherwise output port x size returns a default value currently 80 output port x size is useful for programs that tailor their output to the width of the display a fairly common practice If the output device is not a display such programs normally want some reasonable default width to work with and this procedure provides exactly that 202 MIT Scheme Reference output port y size output port procedure This procedure invokes the custom operation whose name is the symbol y size if it exists If the y size operation is defined the value it returns is returned as the result of this procedure otherwise f is returned 14 9 5 Blocking Mode An interactive port is always in one of two modes blocking or non blocking This mode is independent of the terminal mode each can be changed independent of the other Furthermore if it is an interactive I O port there are separa
562. ve port e g a terminal and one or more characters are immediately available the region is filled using the available characters The procedure then returns immediately without waiting for further characters even if the number of available characters is less than the size of the region The returned value is the number of characters actually filled in e If input port is an interactive port and no characters are immediately available the result of the operation depends on the blocking mode of the port If the port is in non blocking mode read string read substring immediately returns the value f Otherwise the operation blocks until a character is available As soon as at least one character is available the region is filled using the available characters The procedure then returns immediately without waiting for further characters even if the number of available characters is less than the size of the region The returned value is the number of characters actually filled in The importance of read string and read substring are that they are both flex ible and extremely fast especially for large amounts of data The following variables may be dynamically bound to change the behavior of the read procedure parser radix variable This variable defines the radix used by the reader when it parses numbers This is similar to passing a radix argument to string gt number The value of this variable must be one of 2 8 10 or 16 a
563. ventions NAMING i2 eno esser eere pa 11 conventions notational sees eese 4 conversion pathname to string 222 228 cooked mode of terminal port 203 337 coordinates graphics 222r re 282 copying of alisb i ssa ph RR ERE G Er 141 copying of bit string 00 123 copying of Messer errer i I Er Rr Diaa 232 Copying Of SUING ses sete Ern dinini inii 88 copying Of tlee isso s does ed t REPRE XE 108 copying Of Vector cele norm x tni 119 current environment 000 000 176 current environment defn 0 7 current input port defn 0 179 current input port rebinding 183 current output port defn 179 current output port rebinding 183 184 current working directory esses 221 current working directory defn 230 cursor graphics defn 0 00 283 custom operations on graphics device 286 custom operations on port 197 cutting of bit string lisse eese 124 Cutting OF list sesso ec uer Peden 110 cutting OESE oc ied peg eRPR QG E RE bees 92 cutting OF VectoE nas ooccispeme RR IS PEERS 121 D d as exponent marker in number 60 decoded tine oreet i Eyre RE eg 238 default object defn 0 000 15 defaulting of pathname 227 define proced
564. verts all alphabetic characters in the name of an interned symbol to a specific case lower case when the symbol is created When the name of an interned symbol is referenced using symbol gt string or written using write it appears in this case It is a bad idea to depend on the name being lower case In fact it is preferable to take this one step further don t depend on the name of a symbol being in a uniform case The rules for writing an interned symbol are the same as the rules for writing an identifier see Section 1 3 3 Identifiers page 10 Any interned symbol that has been returned as part of a literal expression or read using the read procedure and subsequently written out using the write procedure will read back in as the identical symbol in the sense of eq Usually it is also true that reading in an interned symbol that was previously written out produces the same symbol An exception are symbols created by the procedures string gt symbol and intern they can create symbols for which this write read invariance may not hold because the symbols names contain special characters or letters in the non standard case The external representation for uninterned symbols is special to distinguish them from interned symbols and prevent them from being recognized by the read procedure 1 n older dialects of Lisp uninterned symbols were fairly important This was true because symbols were complicated data structures in ad
565. vior is implementation dependent in that situation MIT Scheme leaves the files open with input from binary file filename thunk procedure with output to binary file filename thunk procedure These procedures open files in binary mode In all other respects they are identical to with input from file and with output to file respectively 14 3 String Ports This section describes the simplest kinds of ports input ports that read their input from given strings and output ports that accumulate their output and return it as a string It also describes truncating output ports which can limit the length of the resulting string to a given value string gt input port string start end procedure Returns a new string port that delivers characters from string The optional argu ments start and end may be used to specify that the string port delivers charac ters from a substring of string if not given start defaults to 0 and end defaults to string length string with input from string string thunk procedure Thunk must be a procedure of no arguments with input from string creates a new input port that reads from string makes that port the current input port and calls thunk When thunk returns with input from string restores the previous current input port and returns the result yielded by thunk 1 Because Scheme s escape procedures have unlimited extent it is possible to escape from the current continuation but later to escape
566. vironment at that point In particular every REP loop has a current environment REP stands for read eval print the REP loop is the Scheme program that reads your input evaluates it and prints the result The environment of the top level REP loop the one you are in when Scheme starts up starts as user initial environment although it can be changed by the ge procedure When a new REP loop is created its environment is determined by the program that creates it 1 2 4 Static Scoping Scheme is a statically scoped language with block structure In this respect it is like Algol and Pascal and unlike most other dialects of Lisp except for Common Lisp The fact that Scheme is statically scoped rather than dynamically bound means that the environment that is extended and becomes current when a procedure is called is the environment in which the procedure was created i e in which the procedure s defining lambda expression was evaluated not the environment in which the procedure is called Because all the other Scheme binding expressions can be expressed in terms of procedures this determines how all bindings behave Consider the following definitions made at the top level REP loop in the initial envi ronment define x 1 define f x g 2 define g y x y f 5 gt 3 not 7 Here f and g are bound to procedures created in the initial environment Because Scheme is statically scoped the call to g from f extends t
567. vocation environment has been constructed the expressions in the body of the lambda expression are evaluated sequentially in it This means that the region of the variables bound by the lambda expression is all of the expressions in the body The result of evaluating the last expression in the body is returned as the result of the procedure call Formals the formal parameter list is often referred to as a lambda list The process of matching up formal parameters with arguments is somewhat involved There are three types of parameters and the matching treats each in sequence Required All of the required parameters are matched against the arguments first If there are fewer arguments than required parameters an error of type condition type wrong number of arguments is signalled this error is also signalled if there are more arguments than required parameters and there are no further parameters Optional Once the required parameters have all been matched the optional param eters are matched against the remaining arguments If there are fewer ar guments than optional parameters the unmatched parameters are bound to special objects called default objects If there are more arguments than optional parameters and there are no further parameters an error of type condition type wrong number of arguments is signalled The predicate default object which is true only of default objects can be used to determine which optional parameters wer
568. w IE EIS 247 system global environment 175 system library directory pathname 230 system library pathname 230 Duo Los deut iar ntt ed Di tbe 127 banozciecoeg9sSRpperie cp EAE a E I etd 66 tcp server connection accept 254 templab z c se peat ntn elidue eta re gs 5 temporary directory pathname 233 temporary file pathname 233 tenths s2eccsensde n tal uses eet Ble quas Dae 110 the environment e gw ge e PER 176 there exists 2x Rr b epa NEE 116 third econ ter a ieee ME E qa eed 110 time zone 28tring eed DER E ene 246 time zone salon aed bt rne Cg 241 top level environment 176 trace output port 2 e 9 ated hem 180 transforme jo bj peen ERAS EBD es 214 tree COPY ixjadresrdnbbem dri ake etus Ea 108 Aa an Ie R E E E A cist abies ae Sepe armed 127 PLUNCATE op hide R rers ai ia aaa te RR Ped pus 65 truncate gt exact eiee rio nis apa ESERI RR 65 BY PO seeped evaded D Ue dA od E PEA hare die 30 32 type descriptor ci 0ce32 id og he med 04r es 32 V NE pei c ucadc eher ev tebenesre Riinitess 306 Ulong isi olde dade ice do Peace edd ated 306 unbind v riable ice RIT e iag id 177 nchecked E obi Eb debt RP ES 305 nha sh 2sc6 ve 9e eee eather eee ee e meg 152 unicode code point b ise v re ai 85 universal time file time 243 universal time gt global decoded time 242 unive
569. wt tree contains an association for key otherwise returns amp f The aver age and worst case times required by this operation are proportional to the logarithm of the number of associations in wt tree wt tree lookup wt tree key default procedure Returns the datum associated with key in wt tree If wt tree doesn t contain an association for key default is returned The average and worst case times required by this operation are proportional to the logarithm of the number of associations in wt tree wt tree delete wt tree key procedure Returns a new tree containing all the associations in wt tree except that if wt tree contains an association for key it is removed from the result The average and worst case times required by this operation are proportional to the logarithm of the number of associations in wt tree wt tree delete wt tree key procedure If wt tree contains an association for key the association is removed Returns an unspecified value The average and worst case times required by this operation are proportional to the logarithm of the number of associations in wt tree 11 7 3 Advanced Operations on Weight Balanced Trees In the following the size of a tree is the number of associations that the tree contains and a smaller tree contains fewer associations wt tree split lt wt tree bound procedure Returns a new tree containing all and only the associations in wt tree that have a key that is less than bound in the orderin
570. xception of make eqv hash table could have been created by calls to these constructor constructors see the examples below strong hash table constructor key hash key rehash after gc procedure weak hash table constructor key hash key rehash after gc procedure Each of these procedures accepts two arguments and returns a hash table constructor The key argument is an equivalence predicate for the keys of the hash table The key hash argument is a procedure that computes a hash number Specifically key hash accepts two arguments a key and an exact positive integer the modulus and returns an exact non negative integer that is less than the modulus The optional argument rehash after gc if true says that the values returned by key hash might change after a garbage collection If so the hash table implementation arranges for the table to be rehashed when necessary See Section 11 4 4 Address Hashing page 149 for information about hash procedures that have this property Otherwise it is assumed that key hash always returns the same value for the same arguments The default value of this argument is f The constructors returned by strong hash table constructor make hash tables that hold their keys strongly The constructors returned by weak hash table constructor make hash tables that hold their keys weakly Chapter 11 Associations 145 Some examples showing how some standard hash table constructors could have been
571. xclusive 82 MIT Scheme Reference 5 5 ISO 8859 1 Characters MIT Scheme internally uses ISO 8859 1 codes for 1 0 and stores character objects in a fashion that makes it convenient to convert between ISO 8859 1 codes and characters Also character strings are implemented as byte vectors whose elements are ISO 8859 1 codes these codes are converted to character objects when accessed For these reasons it is sometimes desirable to be able to convert between ISO 8859 1 codes and characters Not all characters can be represented as ISO 8859 1 codes A character that has an equivalent ISO 8859 1 representation is called an ISO 8859 1 character For historical reasons the procedures that manipulate 180 8859 1 characters use the word ASCII rather than ISO 8859 1 char ascii char procedure Returns the 180 8859 1 code for char if char has an ISO 8859 1 representation oth erwise returns f In the current implementation the characters that satisfy this predicate are those in which the bucky bits are turned off and for which the character code is less than 256 char gt ascii char procedure Returns the ISO 8859 1 code for char An error condition type bad range argument is signalled if char doesn t have an 1S0 8859 1 representation ascii gt char code procedure Code must be the exact integer representation of an ISO 8859 1 code This procedure returns the character corresponding to code 5 6 Character Sets MIT Scheme
572. xtended comment in programs defn 11 extension of environment defn 6 extent of dynamic binding defn 19 extent of objects 02 eee eee eee 3 external representation defn 8 external representation and quasiquote 23 external representation and quote 22 external representation for bit string 123 external representation for character 77 external representation for empty list 105 external representation for list 105 external representation for number 60 external representation for pair 105 external representation for procedure 165 external representation for string 87 external representation for symbol 128 external representation for vector 119 external representation generating 189 external representation parsing 186 extra object of application hook 170 Concept Index F f as exponent marker in number 60 false boolean object 222 eee 8 false boolean object defn 127 false in conditional expression defn 24 false predicate for 0 eee eee 127 file regular predicate for 234 file MAME io sb RE EX DIE eed eed 221 Tile timeas wie ged gS alee RI EP ERRORI SE 299 file type procedure for
573. y Sup port for this research is provided in part by the Advanced Research Projects Agency of the Department of Defense and by the National Science Foundation MIT Scheme Reference Chapter 1 Overview 3 1 Overview This manual is a detailed description of the MIT Scheme runtime system It is intended to be a reference document for programmers It does not describe how to run Scheme or how to interact with it that is the subject of the MIT Scheme User s Manual This chapter summarizes the semantics of Scheme briefly describes the MIT Scheme pro gramming environment and explains the syntactic and lexical conventions of the language Subsequent chapters describe special forms numerous data abstractions and facilities for input and output Throughout this manual we will make frequent references to standard Scheme which is the language defined by the document Revised 4 Report on the Algorithmic Language Scheme by William Clinger Jonathan Rees et al or by IEEE Std 1178 1990 IEEE Stan dard for the Scheme Programming Language in fact several parts of this document are copied from the Revised Report MIT Scheme is an extension of standard Scheme These are the significant semantic characteristics of the Scheme language Variables are statically scoped Scheme is a statically scoped programming language which means that each use of a variable is associated with a lexically apparent binding of that variable Algol is another
574. y the input range by its endpoints rationalize specifies the range by its center point and its half width exp z procedure log z procedure sin z procedure COS Z procedure tan z procedure asin z procedure acos z procedure atan z procedure atan y x procedure These procedures compute the usual transcendental functions log computes the natural logarithm of z not the base ten logarithm asin acos and atan compute arcsine arccosine and arctangent respectively The two argument variant of atan computes angle make rectangular x y see below In general the mathematical functions log arcsine arccosine and arctangent are multiply defined For nonzero real x the value of log x is defined to be the one whose imaginary part lies in the range minus pi exclusive to pi inclusive log 0 is undefined The value of log z when z is complex is defined according to the formula log z log magnitude z iangle z With log defined this way the values of arcsine arccosine and arctangent are accord ing to the following formulae sin z ilog iz V1 22 ES amp i cos z T 2 sin z tan z log 1 iz log 1 iz 2i The above specification follows Common Lisp the Language which in turn cites Principal Values and Branch Cuts in Complex APL refer to these sources for more detailed discussion of branch cuts boundary conditions and implementation of these functions When it is possible the
575. y use fixnum flonum and perhaps other representations for numbers this should not be apparent to a casual programmer writing simple programs It is necessary however to distinguish between numbers that are represented exactly and those that may not be For example indexes into data structures must be known exactly as must some polynomial coefficients in a symbolic algebra system On the other hand the results of measurements are inherently inexact and irrational numbers may be approximated by rational and therefore inexact approximations In order to catch uses of inexact numbers where exact numbers are required Scheme explicitly distinguishes exact from inexact numbers This distinction is orthogonal to the dimension of type 58 MIT Scheme Reference 4 2 Exactness Scheme numbers are either exact or inexact A number is exact if it was written as an exact constant or was derived from exact numbers using only exact operations A number is inexact if it was written as an inexact constant if it was derived using inexact ingredients or if it was derived using inexact operations Thus inexactness is a contagious property of a number If two implementations produce exact results for a computation that did not involve in exact intermediate results the two ultimate results will be mathematically equivalent This is generally not true of computations involving inexact numbers since approximate methods such as floating point arithmetic may be
576. yntactic keyword usually a macro transformer with an identifier Keyword bindings are special in that they are considered bound but ordinary variable references don t work on them So an attempt to reference or assign a keyword binding results in an error of type condition type macro binding However keyword bindings can be redefined using define or environment define environment object procedure Returns t if object is an environment otherwise returns 8f environment has parent environment procedure Returns stt if environment has a parent environment otherwise returns f environment parent environment procedure Returns the parent environment of environment It is an error if environment has no parent environment bound names environment procedure Returns a newly allocated list of the names symbols that are bound by environ ment This does not include the names that are bound by the parent environment of environment It does include names that are unassigned or keywords in environment environment macro names environment procedure Returns a newly allocated list of the names symbols that are bound to syntactic keywords in environment environment bindings environment procedure Returns a newly allocated list of the bindings of environment does not include the bindings of the parent environment Each element of this list takes one of two forms symbol indicates that symbol is bound but unassigned while symbol object
Download Pdf Manuals
Related Search
Related Contents
Universal Radio Control OWNERS MANUAL Sonic Blue 52260056-001 User's Manual Samsung NP-R408P คู่มือการใช้งาน (FreeDos) User Manual for HOBO Project Nicholas Lavanda Senior Software Canon PowerShot S70 2850S Service Manual Copyright © All rights reserved.
Failed to retrieve file