-
Notifications
You must be signed in to change notification settings - Fork 0
Expand file tree
/
Copy pathchap-1.texi
More file actions
3070 lines (2354 loc) · 112 KB
/
chap-1.texi
File metadata and controls
3070 lines (2354 loc) · 112 KB
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
146
147
148
149
150
151
152
153
154
155
156
157
158
159
160
161
162
163
164
165
166
167
168
169
170
171
172
173
174
175
176
177
178
179
180
181
182
183
184
185
186
187
188
189
190
191
192
193
194
195
196
197
198
199
200
201
202
203
204
205
206
207
208
209
210
211
212
213
214
215
216
217
218
219
220
221
222
223
224
225
226
227
228
229
230
231
232
233
234
235
236
237
238
239
240
241
242
243
244
245
246
247
248
249
250
251
252
253
254
255
256
257
258
259
260
261
262
263
264
265
266
267
268
269
270
271
272
273
274
275
276
277
278
279
280
281
282
283
284
285
286
287
288
289
290
291
292
293
294
295
296
297
298
299
300
301
302
303
304
305
306
307
308
309
310
311
312
313
314
315
316
317
318
319
320
321
322
323
324
325
326
327
328
329
330
331
332
333
334
335
336
337
338
339
340
341
342
343
344
345
346
347
348
349
350
351
352
353
354
355
356
357
358
359
360
361
362
363
364
365
366
367
368
369
370
371
372
373
374
375
376
377
378
379
380
381
382
383
384
385
386
387
388
389
390
391
392
393
394
395
396
397
398
399
400
401
402
403
404
405
406
407
408
409
410
411
412
413
414
415
416
417
418
419
420
421
422
423
424
425
426
427
428
429
430
431
432
433
434
435
436
437
438
439
440
441
442
443
444
445
446
447
448
449
450
451
452
453
454
455
456
457
458
459
460
461
462
463
464
465
466
467
468
469
470
471
472
473
474
475
476
477
478
479
480
481
482
483
484
485
486
487
488
489
490
491
492
493
494
495
496
497
498
499
500
501
502
503
504
505
506
507
508
509
510
511
512
513
514
515
516
517
518
519
520
521
522
523
524
525
526
527
528
529
530
531
532
533
534
535
536
537
538
539
540
541
542
543
544
545
546
547
548
549
550
551
552
553
554
555
556
557
558
559
560
561
562
563
564
565
566
567
568
569
570
571
572
573
574
575
576
577
578
579
580
581
582
583
584
585
586
587
588
589
590
591
592
593
594
595
596
597
598
599
600
601
602
603
604
605
606
607
608
609
610
611
612
613
614
615
616
617
618
619
620
621
622
623
624
625
626
627
628
629
630
631
632
633
634
635
636
637
638
639
640
641
642
643
644
645
646
647
648
649
650
651
652
653
654
655
656
657
658
659
660
661
662
663
664
665
666
667
668
669
670
671
672
673
674
675
676
677
678
679
680
681
682
683
684
685
686
687
688
689
690
691
692
693
694
695
696
697
698
699
700
701
702
703
704
705
706
707
708
709
710
711
712
713
714
715
716
717
718
719
720
721
722
723
724
725
726
727
728
729
730
731
732
733
734
735
736
737
738
739
740
741
742
743
744
745
746
747
748
749
750
751
752
753
754
755
756
757
758
759
760
761
762
763
764
765
766
767
768
769
770
771
772
773
774
775
776
777
778
779
780
781
782
783
784
785
786
787
788
789
790
791
792
793
794
795
796
797
798
799
800
801
802
803
804
805
806
807
808
809
810
811
812
813
814
815
816
817
818
819
820
821
822
823
824
825
826
827
828
829
830
831
832
833
834
835
836
837
838
839
840
841
842
843
844
845
846
847
848
849
850
851
852
853
854
855
856
857
858
859
860
861
862
863
864
865
866
867
868
869
870
871
872
873
874
875
876
877
878
879
880
881
882
883
884
885
886
887
888
889
890
891
892
893
894
895
896
897
898
899
900
901
902
903
904
905
906
907
908
909
910
911
912
913
914
915
916
917
918
919
920
921
922
923
924
925
926
927
928
929
930
931
932
933
934
935
936
937
938
939
940
941
942
943
944
945
946
947
948
949
950
951
952
953
954
955
956
957
958
959
960
961
962
963
964
965
966
967
968
969
970
971
972
973
974
975
976
977
978
979
980
981
982
983
984
985
986
987
988
989
990
991
992
993
994
995
996
997
998
999
1000
@node Credits
@unnumbered Credits
@editors
Special thanks to Guy L. Steele Jr. and Digital Press for producing @CLtL{},
and for relaxing copyright restrictions enough to make it possible for that
document's text to provide an early basis of this work.
@subheading Edit and Review History:
@multitable @columnfractions 0.15 0.15 0.7
@item 01-Jan-89 @tab Pitman @tab Draft of Chapters 5.1 (conditions).
@item 01-May-89 @tab Chapman @tab Draft of 1.2--1.6.
@item 01-May-89 @tab Gabriel @tab Rewrite of Chapters 1.1 and 5.1.
@item 01-Jun-89 @tab Loosemore @tab Review of Chapter 4.2.
@item 01-Jun-89 @tab Pitman @tab Review of Glossary
@item 15-Jun-89 @tab Gabriel @tab Rewrite of Glossary
@item 16-Jun-89 @tab Margolin @tab Comments on Chapters 2.1--2.4 (types, objects).
@item 23-Jun-89 @tab Gabriel @tab Rewrite of 4.2.
@item 07-Jul-89 @tab Moon @tab Review of Chapters 4.1, 4.3
@item 12-Jul-89 @tab Gabriel @tab Revision of 4.2.
@item 15-Jul-89 @tab Pitman @tab Review of Glossary
@item 18-Jul-89 @tab Gray @tab Comments on 5.1
@item 25-Jul-89 @tab Gabriel @tab Revision of Chapters 1.2--1.6, 2.2
@item 26-Jul-89 @tab Gabriel @tab Rewrite of 5.1
@item 26-Jul-89 @tab Gabriel @tab Rewrite of 4.1.
@item 27-Jul-89 @tab Pitman @tab Revision of 5.1
@item 27-Jul-89 @tab Gabriel @tab Revision of 5.1
@item 28-Jul-89 @tab Chapman @tab Draft of 2.2, 3.2, 3.3, 5.4
@item 28-Jul-89 @tab Gabriel @tab Revision of Glossary.
@item 01-Oct-89 @tab Margolin @tab Review of Dictionary from Jun-89 draft.
@item 20-Jan-91 @tab Pitman @tab Draft 8.81 (for X3J13 review). Document X3J13/91-101.
@item 29-Jan-91 @tab Waters @tab Review of 8.81/Chapter 23 (Printer).
@item 01-Mar-91 @tab Moon @tab Review of 8.81/Chapter 4 (Evaluation and Compilation).
@item 01-Mar-91 @tab Barrett @tab Review of 8.81/Chapter 4 (Evaluation and Compilation).
@item 01-Mar-91 @tab Moon @tab Review of 8.81/Glossary.
@item 13-Mar-90 @tab Wechsler @tab Review of 8.81/Glossary.
@item 21-Mar-91 @tab Kerns @tab Review of 8.81/Chapter 1.
@item 26-Apr-91 @tab Margolin @tab Review of 8.81/Chapters 1--12.
@item 15-May-91 @tab Barrett @tab Review of 8.81/Chapters 5 (Misc), 11 (Conditions).
@item 04-Jun-91 @tab Laddaga @tab Review of 9.60/Chapter 20 (Pathnames).
@item 10-Jun-91 @tab Pitman @tab Draft 9.126 (for X3J13 review). Document X3J13/91-102.
@item 02-Sep-91 @tab Barrett @tab Review of 9.28/Chapter 4 (Evaluation and Compilation).
@item 02-Sep-91 @tab Barrett @tab Review of 9.52/Chapter 4 (Evaluation and Compilation).
@item 15-Sep-91 @tab Barrett @tab Review of 9.126/Chapter 4 (Evaluation and Compilation)
@item @tab @tab @quad{} and Chapter 7 (Evaluation/Compilation).
@item @tab @tab @quad{}(some comments not yet merged)
@item 18-Sep-91 @tab Wechsler @tab Review of 9.126.
@item 21-Sep-91 @tab Barrett @tab Review of 10.16/Chapter 7 (Evaluation/Compilation).
@item @tab @tab @quad{}(some comments not yet merged)
@item 28-Sep-91 @tab Barrett @tab Review of 10.95/Chapter 25 (Printer).
@item @tab @tab @quad{}(some comments not yet merged)
@item 13-Oct-91 @tab Barrett @tab Review (and help editing) of 10.104/Chapter 4
@item @tab @tab @quad{}(Evaluation and Compilation)
@item 15-Oct-91 @tab Waters @tab Review of 10.95/Chapter 25 (Printer).
@item 24-Oct-91 @tab Pitman @tab Draft 10.156 (for X3J13 review). Document X3J13/91-103.
@item 04-Nov-91 @tab Moon @tab Review of 10.156/Chapter 5 (Data and Control Flow)
@item @tab @tab @quad{} and Chapter 26 (Glossary).
@item 11-Nov-91 @tab Loosemore @tab Review of 10.156/Chapter 2 (Syntax),
@item @tab @tab @quad{} Chapter 3 (Evaluation and Compilation),
@item @tab @tab @quad{} Chapter 5 (Data and Control Flow),
and Chapter 8 (Structures).
@item 02-Dec-91 @tab Barrett @tab Review of 10.156/Chapter 4 (Types and Classes),
@item @tab @tab @quad{} and Chapter 10 (Symbols).
@item 02-Dec-91 @tab Barrett @tab Review of 10.156/Chapter 3 (Evaluation and Compilation),
@item @tab @tab @quad{} Chapter 6 (Iteration), Chapter 9 (Conditions),
@item @tab @tab @quad{} and Chapter 14 (Conses).
@item @tab @tab @quad{}(some comments not yet merged)
@item 09-Dec-91 @tab Gabriel @tab Review of 10.156/Chapter 1 (Introduction),
@item @tab @tab @quad{} Chapter 2 (Syntax),
and Chapter 3 (Evaluation and Compilation).
@item 09-Dec-91 @tab Ida @tab Light review of 10.156/Chapters 1-5.
@item 09-Dec-91 @tab Moon @tab Review of 10.156/Chapter 3 (Evaluation and Compilation).
@item @tab @tab @quad{}(some comments not yet merged)
@item 10-Dec-91 @tab Loosemore @tab Review of 10.156/Chapter 10 (Symbols),
@item @tab @tab @quad{} Chapter 20 (Files), and Chapter 13 (Characters).
@item 10-Dec-91 @tab Loosemore @tab Review of 10.156/Chapter 14 (Conses).
@item @tab @tab @quad{}(some comments not yet merged)
@item 10-Dec-91 @tab Laubsch @tab Review of 10.156/Chapters 1 (Introduction),
@item @tab @tab @quad{} Chapter 2 (Syntax), Chapter 3 (Evaluation and Compilation),
@item @tab @tab @quad{} Chapter 4 (Types and Classes),
Chapter 5 (Data and Control Flow),
@item @tab @tab @quad{} Chapter 7 (Objects), Chapter 11 (Packages),
@item @tab @tab @quad{} Chapter 19 (Filenames), and Chapter 21 (Streams).
@item 18-Dec-91 @tab Margolin @tab Review of 10.156/Chapter 18 (Hash Tables).
@item 04-Jan-92 @tab White @tab Review of 10.156/Chapter 6 (Iteration),
@item @tab @tab @quad{} Chapter 11 (Packages), Chapter 18 (Hash Tables),
@item @tab @tab @quad{} and Chapter 23 (Reader).
@item 04-Jan-92 @tab White @tab Review of 10.156/Chapter 26 (Glossary).
@item @tab @tab @quad{}(some comments not yet merged)
@item 04-Jan-92 @tab Barrett @tab Review of 10.156/Chapter 18 (Hash Tables) and Chapter 16 (Strings).
@item 04-Jan-92 @tab Barrett @tab Review of 10.156/Chapter 15 (Arrays) and Chapter 21 (Streams).
@item @tab @tab @quad{}(some comments not yet merged)
@item 06-Jan-92 @tab Loosemore @tab Review of 10.156/Chapter 16 (Strings),
@item @tab @tab @quad{} Chapter 17 (Sequences), and Chapter 25 (Environment).
@item 06-Jan-92 @tab Loosemore @tab Review of 10.156/Chapter 21 (Streams) and Chapter 23 (Reader).
@item @tab @tab @quad{}(some comments not yet merged)
@item 06-Jan-92 @tab Margolin @tab Review of 10.156/Chapter 2 (Syntax).
@item 07-Jan-92 @tab Margolin @tab Review of 10.156/Chapter 4 (Types and Classes).
@item 03-Feb-92 @tab Aspinall @tab Review of 10.156/Chapter 12 (Numbers).
@item 16-Feb-92 @tab Pitman @tab Draft 11.82 (for X3J13 letter ballot). Document X3J13/92-101.
@item 16-Mar-92 @tab Loosemore @tab Review of 11.82/Chapter 1, 3, 4, 5, 7, 8, 9, 10,
@item @tab @tab @quad{} 11, 12, 18, 22, 23, 24, 25, and 26.
@item 16-Feb-92 @tab Pitman @tab Draft 12.24 (for X3 consideration). Document X3J13/92-102.
@item 09-Sep-92 @tab Samson @tab Public Review Comments (#1). Documents X3J13/92-1001 to 92-1003.
@item 22-Oct-92 @tab Rose, Yen @tab Public Review Comments (#2). Documents X3J13/92-1101 to 92-1103.
@item 23-Oct-92 @tab Staley @tab Public Review Comments (#3). Documents X3J13/92-1201 to 92-1204.
@item 09-Nov-92 @tab Barrett @tab Public Review Comments (#4). Documents X3J13/92-3101 to 92-3110.
@item 11-Nov-92 @tab Moon @tab Public Review Comments (#5). Documents X3J13/92-3201 to 92-3248.
@item 17-Nov-92 @tab Loosemore @tab Public Review Comments (#6). Documents X3J13/92-1301 to 92-1335.
@item 23-Nov-92 @tab Margolin @tab Public Review Comments (#7). Documents X3J13/92-1401 to 92-1419.
@item 23-Nov-92 @tab Withington @tab Public Review Comments (#8a). Documents X3J13/92-1501 to 92-1512.
@item @tab @tab
@item 23-Nov-92 @tab Feinberg @tab Public Review Comments (#8b). Documents X3J13/92-1601 to 92-1603.
@item 23-Nov-92 @tab Wechsler @tab Public Review Comments (#8c). Documents X3J13/92-1701 to 92-1703.
@item 23-Nov-92 @tab Moore @tab Public Review Comments (#9). Documents X3J13/92-1801 to 92-1802.
@item 23-Nov-92 @tab Flanagan @tab Public Review Comments (#10). Documents X3J13/92-1901 to 92-1910.
@item 23-Nov-92 @tab Dalton @tab Public Review Comments (#11). Documents X3J13/92-2001 to 92-2012.
@item 23-Nov-92 @tab Gallagher @tab Public Review Comments (#12). Documents X3J13/92-2101 to 92-2103.
@item 23-Nov-92 @tab Norvig @tab Public Review Comments (#13). Documents X3J13/92-2201 to 92-2208.
@item 24-Nov-92 @tab Robertson @tab Public Review Comments (#14). Document X3J13/92-2301.
@item 23-Nov-92 @tab Kawabe @tab Public Review Comments (#15). Documents X3J13/92-2401 to 92-2403.
@item 23-Nov-92 @tab Barrett @tab Public Review Comments (#16). Documents X3J13/92-2511 to X3J13/92-2531.
@item 23-Nov-92 @tab Wertheimer @tab Public Review Comments (#17). Document X3J13/92-2601.
@item 24-Nov-92 @tab Pitman @tab Public Review Comments (#18). Documents X3J13/92-2701 to 92-2742.
@item 24-Nov-92 @tab Mato Mira @tab Public Review Comments (#19). Documents X3J13/92-2801 to 92-2805.
@item 24-Nov-92 @tab Philpot @tab Public Review Comments (#20). Document X3J13/92-2901.
@item 23-Nov-92 @tab Cerys @tab Public Review Comments (#21). Document X3J13/92-3001.
@item 30-Aug-93 @tab Pitman @tab Draft 13.65 (for X3J13 consideration). Document X3J13/93-101.
@item 04-Oct-93 @tab X3J13 @tab Minor fixes to Draft 13.65 before sending to X3.
@item 05-Oct-93 @tab Pitman @tab Draft 14.10 (for X3 consideration). Document X3J13/93-102.
@item 08-Nov-93 @tab Dalton @tab ``reply to reply to pr comments''. Document X3J13/94-311.
@item 04-Apr-94 @tab Boyer, @tab
@item @tab Kaufmann, @tab
@item @tab Moore @tab Public Review Comments (#1). Document X3J13/94-305.
@item 05-Apr-94 @tab Pitman @tab Public Review Comments (#2). Document X3J13/94-306.
@item 14-Mar-94 @tab Schulenburg @tab Public Review Comments (#3). Document X3J13/94-307.
@item 04-Apr-94 @tab Shepard @tab Late commentary. Document X3J13/94-309.
@item 05-May-94 @tab X3J13 @tab Editorial-only changes to Draft 14.10 in response to comments.
@item 10-May-94 @tab Pitman @tab Draft @rev{} (for X3 consideration). Document @DocumentNumber{}.
@end multitable
@goodbreak{}
The following lists of information are almost certainly incomplete, but
it was felt that it was better to risk publishing incomplete information
than to fail to acknowledge important contributions by the many people
and organizations who have contributed to this effort.
Mention here of any individual or organization does not imply
endorsement of this document by that individual or organization.
@subheading Ad Hoc Group Chairs:
@multitable @columnfractions 0.5 0.5
@item Charter @tab Ennis, Susan P.
@item Cleanup @tab Masinter, Larry
@item @tab Fahlman, Scott
@item Compiler @tab Haflich, Steve
@item @tab Loosemore, Sandra
@item Conditions @tab Pitman, Kent M.
@item Editorial @tab Chapman, Kathy
@item Graphics @ampers{} Windows @tab Douglas Rand
@item Iteration @tab White, JonL
@item Lisp@mat{@sub{1}}/Lisp@mat{@sub{2}} @tab Gabriel, Richard P.
@item Macros @tab Haflich, Steve
@item @tab Pitman, Kent M.
@item Objects @tab Bobrow, Daniel G.
@item Presentation of Standard @tab Brown, Gary
@item Pretty Printer @tab Waters, Richard C.
@item Public Review @tab Ida, Masayuki
@item Types @ampers{} Declarations @tab Scherlis, William
@item Validation @tab Berman, Richard
@item @tab Balzer, Bob
@end multitable
@goodbreak{}
@subheading Major Administrative Contributions:
@multitable @columnfractions 0.5 0.5
@item Steele, Guy L., Jr. @tab Eiron, Hanoch
@item Zubkoff, Jan L. @tab Haflich, Steve
@item Gabriel, Richard P. @tab Ida, Masayuki
@item Masinter, Larry @tab Loeffler, David D.
@item Loosemore, Sandra @tab Tyson, Mabry
@item Pitman, Kent M. @tab Whittemore, Susan
@item Barrett, Kim @tab Woodyatt, Anne
@end multitable
@goodbreak{}
@subheading Major Technical Contributions:
@multitable @columnfractions 0.33 0.33 0.33
@item Loosemore, Sandra @tab @tab
@item Bobrow, Daniel G. @tab Margolin, Barry @tab
@item Daniels, Andy @tab Moon, David A. @tab
@item DeMichiel, Linda G. @tab Pitman, Kent M. @tab
@item Dussud, Patrick H. @tab Perdue, Crispin @tab
@item Gabriel, Richard P. @tab Steele, Guy L., Jr. @tab
@item Ida, Masayuki @tab Waters, Richard C. @tab
@item Kiczales, Gregor @tab White, JonL @tab
@end multitable
@subheading Participating Companies and Organizations:
@multitable @columnfractions 0.5 0.5
@item LMI @tab
@item AI Architects @tab Loosemore, Sandra
@item Amoco Production Co. @tab Lucid, Inc.
@item Aoyama Gakuin University @tab MCC
@item Apple Computer @tab MIT
@item Barrett, Kim @tab MITRE Corporation
@item Boeing Advanced Technology Center @tab MSC
@item Carnegie-Mellon University @tab NASA Ames Research Center
@item Chestnut Software @tab Nihon Symbolics
@item Computer Sciences @tab National Bureau of Standards
@item CONTEL @tab Prime Computer
@item Digital Equipment Corporation @tab Siemens
@item Evans & Sutherland @tab Southern Illinois University
@item Encore @tab Sperry
@item Franz, Inc. @tab SRI
@item Gigamos @tab Sun Microsystems
@item GMD @tab Symbolics
@item Gold Hill @tab Tektronix
@item Greenblatt, Richard @tab Texas Instruments
@item Grumman Data Systems Corporation @tab Thinking Machines Corporation
@item Harlequin, Ltd. @tab Unisys
@item Hewlett-Packard @tab University of Bath
@item Honeywell @tab University of Edinburgh
@item IBM @tab University of Utah
@item Integrated Inference Machines @tab US Army
@item International LISP Associates @tab USC/ISI
@item Johnson Controls @tab Xerox
@end multitable
@subheading Individual Participants:
@multitable @columnfractions 0.33 0.33 0.33
@item Arbaugh, Bill @tab Hornig, Charles @tab Philipp, Christopher
@item Balzer, Bob @tab Ida, Masayuki @tab Pierson, Dan
@item Barrett, Kim @tab Keene, Sonya @tab Pitman, Kent M.
@item Bartley, David @tab Keller, Shaun @tab Raghavan, B.
@item Beckerle, Mike @tab Kempf, James @tab Rand, Douglas
@item Beiser, Paul @tab Kerns, Robert W. @tab Rininger, Jeff
@item Benson, Eric @tab Kiczales, Gregor @tab Rosenking, Jeff
@item Berman, Richard @tab Kolb, Dieter @tab Scherlis, William
@item Bobrow, Daniel G. @tab Koschmann, Timothy @tab Shiota, Eiji
@item Boelk, Mary @tab Kosinski, Paul @tab Sizer, Andy
@item Brittain, Skona @tab Larson, Aaron @tab Slater, David
@item Brown, Gary @tab Latto, Andy @tab Sodan, Angela
@item Chailloux, Jerome @tab Laubsch, Joachim @tab Soley, Richard
@item Chapman, Kathy @tab Layer, Kevin @tab St. Clair, Bill
@item Clinger, Will @tab Linden, Thom @tab Stanhope, Philip
@item Coffee, Peter C. @tab Loeffler, David D. @tab Steele, Guy L., Jr.
@item Cugini, John @tab Loosemore, Sandra @tab Tucker, Paul
@item Curtis, Pavel @tab Magataca, Mituhiro @tab Turba, Thomas
@item Dabrowski, Christopher @tab Margolin, Barry @tab Unietis, Dave
@item Daessler, Klaus @tab Masinter, Larry @tab van Roggen, Walter
@item Dalton, Jeff @tab Mathis, Robert @tab van Roggen, Walter
@item Daniels, Andy @tab Matthews, Dave @tab Waldrum, Ellen
@item DeMichiel, Linda G. @tab McCarthy, John @tab Waters, Richard C.
@item Duggan, Jerry @tab Mikelsons, Martin @tab Wechsler, Allan
@item Dussud, Patrick H. @tab Moon, David A. @tab Wegman, Mark
@item Ennis, Susan P. @tab Moore, Timothy @tab Weinreb, Daniel
@item Fahlman, Scott @tab Nicoud, Stephen @tab White, JonL
@item Gabriel, Richard P. @tab Nilsson, Jarl @tab Wieland, Alexis
@item Giansiracusa, Bob @tab O'Dell, Jim @tab Withington, P. Tucker
@item Gray, David @tab Ohlander, Ron @tab Wright, Whitman
@item Greenblatt, Richard @tab Padget, Julian @tab York, Bill
@item Hadden, George D. @tab Palter, Gary @tab Zacharias, Gail
@item Haflich, Steve @tab Peck, Jeff @tab Zubkoff, Jan L.
@item Harris, Richard M. @tab Pellegrino, Bob @tab
@end multitable
@node Introduction
@chapter Introduction
@menu
* Scope; Purpose; and History::
* Organization of the Document::
* Referenced Publications::
* Definitions::
* Conformance::
* Language Extensions::
* Language Subsets::
* Deprecated Language Features::
* Symbols in the COMMON-LISP Package::
@end menu
@node Scope; Purpose; and History
@section Scope, Purpose, and History
@menu
* Scope and Purpose::
* History::
@end menu
@node Scope and Purpose
@subsection Scope and Purpose
The specification set forth in this document is designed to promote
the portability of @clisp{}@spc{}programs among a variety of data processing
systems. It is a language specification aimed at an audience of
implementors and knowledgeable programmers. It is neither a tutorial nor
an implementation guide.
@node History
@subsection History
Lisp is a family of languages with a long history. Early key ideas in
Lisp were developed by John McCarthy during the 1956 Dartmouth Summer
Research Project on Artificial Intelligence. McCarthy's motivation
was to develop an algebraic list processing language for artificial
intelligence work.
Implementation efforts for early dialects of Lisp were undertaken on
the IBM@tie{}704, the IBM@tie{}7090, the Digital Equipment Corporation (DEC) PDP-1,
the DEC@tie{}PDP-6, and the PDP-10. The primary dialect of Lisp between
1960 and 1965 was Lisp@tie{}1.5. By the early 1970's there were two
predominant dialects of Lisp, both arising from these early efforts:
MacLisp and Interlisp.
For further information about very early Lisp dialects,
see @AnatomyOfLisp{} or @LispOnePointFive{}.
MacLisp improved on the Lisp@tie{}1.5 notion of special variables and error
handling. MacLisp also introduced the concept of functions that could take
a variable number of arguments, macros, arrays, non-local dynamic
exits, fast arithmetic, the first good Lisp compiler, and an emphasis
on execution speed.
By the end of the 1970's, MacLisp was in use at over 50 sites.
For further information about Maclisp,
see @Moonual{} or @Pitmanual{}.
Interlisp introduced many ideas into Lisp programming environments and
methodology. One of the Interlisp ideas that influenced @clisp{}@spc{}was an iteration
construct implemented by Warren Teitelman that inspired the @symbolref{loop, SYM}
macro used both on the Lisp Machines and in MacLisp, and now in @clisp{}.
For further information about Interlisp,
see @InterlispManual{}.
Although the first implementations of Lisp were on the IBM@tie{}704 and the
IBM@tie{}7090, later work focussed on the DEC
PDP-6 and, later, PDP-10 computers, the latter being the mainstay of
Lisp and artificial intelligence work at such places as
Massachusetts Institute of Technology (MIT), Stanford University,
and
Carnegie Mellon University (CMU) from the mid-1960's through much of the 1970's.
The PDP-10 computer and its predecessor the PDP-6 computer were, by
design, especially well-suited to Lisp because they had 36-bit words
and 18-bit addresses. This architecture allowed a @term{cons} cell to be
stored in one word; single instructions could extract the
@term{car} and @term{cdr}
parts. The PDP-6 and PDP-10 had fast, powerful stack instructions
that enabled fast function calling.
But the limitations of the PDP-10 were evident by 1973: it supported a
small number of researchers using Lisp, and the small, 18-bit address
space (@mat{2^18} @mat{=} 262,144 words) limited the size of a single
program.
One response to the address space problem was the Lisp Machine, a
special-purpose computer designed to run Lisp programs. The other
response was to use general-purpose computers with address spaces
larger than 18@tie{}bits, such as the DEC VAX and
the @hbox{S-1}@tie{}Mark@tie{}IIA.
For further information about S-1 Common Lisp, see ``@SOneCLPaper{}.''
The Lisp machine concept was developed in the late 1960's. In the
early 1970's, Peter Deutsch, working with
Daniel Bobrow, implemented a Lisp on the
Alto, a single-user minicomputer, using microcode to interpret a
byte-code implementation language. Shortly thereafter, Richard
Greenblatt began work on a different hardware and instruction set
design at MIT.
Although the Alto was not a total success as a Lisp machine, a dialect
of Interlisp known as Interlisp-D became available on the D-series
machines manufactured by Xerox---the Dorado, Dandelion,
Dandetiger, and Dove (or Daybreak).
An upward-compatible extension of MacLisp called Lisp
Machine Lisp became available on the early MIT Lisp Machines.
Commercial Lisp machines from Xerox, Lisp Machines (LMI), and
Symbolics were on the market by 1981.
For further information about Lisp Machine Lisp, see @Chinual{}.
During the late 1970's, Lisp Machine Lisp began to expand towards a
much fuller language. Sophisticated lambda lists,
@f{setf}, multiple values, and structures
like those in @clisp{}@spc{}are the results of early
experimentation with programming styles by the Lisp Machine group.
Jonl White and others migrated these features to MacLisp.
Around 1980, Scott Fahlman and others at CMU began work on a Lisp to
run on the Scientific Personal Integrated Computing
Environment (SPICE) workstation. One of the goals of the project was to
design a simpler dialect than Lisp Machine Lisp.
The Macsyma group at MIT began a project during the late 1970's called
the New Implementation of Lisp (NIL) for the VAX, which was headed by
White. One of the stated goals of the NIL project was to fix many of
the historic, but annoying, problems with Lisp while retaining significant
compatibility with MacLisp. At about the same time, a research group at
Stanford University and Lawrence Livermore National Laboratory headed
by Richard P. Gabriel began the design of a Lisp to run on the
@hbox{S-1}@tie{}Mark@tie{}IIA supercomputer. @hbox{S-1}@tie{}Lisp, never completely
functional, was the test bed for adapting advanced compiler techniques
to Lisp implementation. Eventually the @hbox{S-1} and NIL groups
collaborated.
For further information about the NIL project,
see ``@NILReport{}.''
The first effort towards Lisp standardization was made in 1969,
when Anthony Hearn and Martin Griss at the University of Utah
defined Standard Lisp---a subset of Lisp@tie{}1.5 and other dialects---to
transport REDUCE, a symbolic algebra system.
During the 1970's, the Utah group implemented first a retargetable
optimizing compiler for Standard Lisp,
and then an extended implementation known as Portable Standard Lisp (PSL).
By the mid 1980's, PSL ran on about a dozen kinds of computers.
For further information about Standard Lisp, see ``@StandardLispReport{}.''
PSL and Franz Lisp---a MacLisp-like dialect for Unix machines---were
the first examples of widely available Lisp dialects on multiple
hardware platforms.
One of the most important developments in Lisp occurred during the
second half of the 1970's: Scheme. Scheme, designed by Gerald J.
Sussman and Guy L. Steele Jr., is a simple dialect of Lisp whose
design brought to Lisp some of the ideas from programming language
semantics developed in the 1960's. Sussman was one of the prime
innovators behind many other advances in Lisp technology from the late
1960's through the 1970's.
The major contributions of Scheme were lexical scoping, lexical
closures, first-class continuations, and simplified syntax (no
separation of value cells and function cells). Some of these contributions made
a large impact on the design of @clisp{}.
For further information about Scheme, see @IEEEScheme{} or ``@RevisedCubedScheme{}.''
In the late 1970's object-oriented programming concepts started to
make a strong impact on Lisp.
At MIT, certain ideas from Smalltalk made their way into several
widely used programming systems.
Flavors, an object-oriented programming system with multiple inheritance,
was developed at MIT for the Lisp machine community by Howard Cannon and others.
At Xerox, the experience with Smalltalk and
Knowledge Representation Language (KRL) led to the development of
Lisp Object Oriented Programming System (LOOPS) and later Common LOOPS.
For further information on Smalltalk, see @SmalltalkBook{}.
For further information on Flavors, see @FlavorsPaper{}.
These systems influenced the design of the Common Lisp Object System (CLOS).
CLOS was developed specifically for this standardization effort,
and was separately written up in ``@CLOSPaper{}.'' However, minor details
of its design have changed slightly since that publication, and that paper
should not be taken as an authoritative reference to the semantics of the
@CLOS{}@spc{}as described in this document.
In 1980 Symbolics and LMI were developing Lisp Machine Lisp; stock-hardware
implementation groups were developing NIL, Franz Lisp, and PSL; Xerox
was developing Interlisp; and the SPICE project at CMU was developing
a MacLisp-like dialect of Lisp called SpiceLisp.
In April 1981, after a DARPA-sponsored meeting concerning the
splintered Lisp community, Symbolics, the SPICE project, the NIL
project, and the @hbox{S-1}@tie{}Lisp project joined together to define
@clisp{}. Initially spearheaded by White and Gabriel, the
driving force behind this grassroots effort was provided by Fahlman,
Daniel Weinreb, David Moon, Steele, and Gabriel.
@clisp{}@spc{}was designed as a description of a family of languages. The
primary influences on @clisp{}@spc{}were Lisp Machine Lisp, MacLisp, NIL,
@hbox{S-1}@tie{}Lisp, Spice Lisp, and Scheme.
@CLtL{}@spc{}is a description of that design. Its
semantics were intentionally underspecified in places where it was
felt that a tight specification would overly constrain @clisp{}
research and use.
In 1986 X3J13 was formed as a technical working group to
produce a draft for an ANSI @clisp{}@spc{}standard. Because of the
acceptance of @clisp{}, the goals of this group differed from those of
the original designers. These new goals included stricter
standardization for portability, an object-oriented programming
system, a condition system, iteration facilities, and a way to handle
large character sets. To accommodate those
goals, a new language specification, this
document, was developed.
@node Organization of the Document
@section Organization of the Document
This is a reference document, not a tutorial document. Where possible
and convenient, the order of presentation has been chosen so that the
more primitive topics precede those that build upon them; however,
linear readability has not been a priority.
This document is divided into chapters by topic.
Any given chapter might contain conceptual material, dictionary entries, or both.
@term{Defined names} within the dictionary portion of a chapter are
grouped in a way that brings related topics into physical proximity.
Many such groupings were possible,
and no deep significance should be inferred from the particular grouping that was chosen.
To see @term{defined names} grouped alphabetically, consult the index.
For a complete list of @term{defined names}, see @ref{Symbols in the COMMON-LISP Package}.
In order to compensate for the sometimes-unordered portions of this document,
a glossary has been provided; see @ref{Glossary, Chapter 26 (Glossary)}.
The glossary provides connectivity by providing easy access to
definitions of terms, and in some cases by providing examples or
cross references to additional conceptual material.
For information about notational conventions used in this document,
see @ref{Definitions}.
For information about conformance, see @ref{Conformance}.
For information about extensions and subsets, see @ref{Language Extensions}
and @ref{Language Subsets}.
For information about how @term{programs} in the language are parsed by the
@term{Lisp reader}, see @ref{Syntax, Chapter 2 (Syntax)}.
For information about how @term{programs} in the language are @term{compiled}
and @term{executed}, see @ref{Evaluation and Compilation, Chapter 3 (Evaluation and Compilation)}.
For information about data types, see @ref{Types and Classes, Chapter 4 (Types and Classes)}.
Not all @term{types} and @term{classes} are defined in this chapter;
many are defined in chapter corresponding to their topic--for example,
the numeric types are defined in @ref{Numbers, Chapter 12 (Numbers)}.
For a complete list of @term{standardized} @term{types},
see @ref{StandardizedAtomicTypeSpecs, Figure 4.2}.
For information about general purpose control and data flow,
see @ref{Data and Control Flow, Chapter 5 (Data and Control Flow)}@spc{}or @ref{Iteration, Chapter 6 (Iteration)}.
@node Referenced Publications
@section Referenced Publications
@itemize @bullet{}
@item @AnatomyOfLisp{},
John Allen, McGraw-Hill, Inc., 1978.
@item @KnuthVolThree{},
Donald E. Knuth, Addison-Wesley Company (Reading, MA), 1973.
@item @MetaObjectProtocol{},
Kiczales et al., MIT Press (Cambridge, MA), 1991.
@item ``@CLOSPaper{},''
D. Bobrow, L. DiMichiel, R.P. Gabriel, S. Keene, G. Kiczales, D. Moon,
@i{SIGPLAN Notices} V23, September, 1988.
@item @CLtL{},
Guy L. Steele Jr., Digital Press (Burlington, MA), 1984.
@item @CLtLTwo{},
Guy L. Steele Jr., Digital Press (Bedford, MA), 1990.
@item @CondSysPaper{},
Kent M. Pitman,
@it Proceedings of the First European Conference
on the Practical Application of LISP
(EUROPAL '90),
Churchill College, Cambridge, England,
March 27-29, 1990.
@item @FlavorsPaper{},
Howard I. Cannon, 1982.
@item @IEEEFloatingPoint{},
ANSI/IEEE Std 754-1985,
Institute of Electrical and Electronics Engineers, Inc. (New York), 1985.
@item @IEEEScheme{},
IEEE Std 1178-1990,
Institute of Electrical and Electronic Engineers, Inc. (New York), 1991.
@item @InterlispManual{}, Third Revision,
Teitelman, Warren, et al,
Xerox Palo Alto Research Center (Palo Alto, CA), 1978.
@item @ISOChars{},
@i{Information processing---Coded character sets
for text communication---Part 2: Latin alphabetic and non-alphabetic
graphic characters},
ISO, 1983.
@item @LispOnePointFive{},
John McCarthy, MIT Press (Cambridge, MA), August, 1962.
@item @Chinual{},
D.L. Weinreb and D.A. Moon,
Artificial Intelligence Laboratory, MIT (Cambridge, MA), July, 1981.
@item @Moonual{},
David A. Moon, Project MAC (Laboratory for Computer Science),
MIT (Cambridge, MA), March, 1974.
@item ``@NILReport{},''
JonL White, @i{Macsyma User's Conference}, 1979.
@item @GabrielBenchmarks{},
Richard P. Gabriel, MIT Press (Cambridge, MA), 1985.
@item ``@PrincipalValues{},''
Paul Penfield Jr., @i{APL 81 Conference Proceedings},
ACM SIGAPL (San Francisco, September 1981), 248-256.
Proceedings published as @i{APL Quote Quad 12}, 1 (September 1981).
@item @Pitmanual{},
Kent M. Pitman,
Technical Report 295,
Laboratory for Computer Science, MIT (Cambridge, MA), May 1983.
@item ``@RevisedCubedScheme{},''
Jonathan Rees and William Clinger (editors),
@i{SIGPLAN Notices} V21, #12, December, 1986.
@item ``@SOneCLPaper{},''
R.A. Brooks, R.P. Gabriel, and G.L. Steele,
@i{Conference Record of the 1982 ACM Symposium on Lisp and Functional Programming},
108-113, 1982.
@item @SmalltalkBook{},
A. Goldberg and D. Robson, Addison-Wesley, 1983.
@item ``@StandardLispReport{},''
J.B. Marti, A.C. Hearn, M.L. Griss, and C. Griss,
@i{SIGPLAN Notices} V14, #10, October, 1979.
@item @WebstersDictionary{},
Merriam Webster (Springfield, MA), 1986.
@item @XPPaper{},
R.C. Waters,
Memo 1102a,
Artificial Intelligence Laboratory, MIT (Cambridge, MA), September 1989.
@end itemize
@node Definitions
@section Definitions
This section contains notational conventions and definitions of terms
used in this manual.
@menu
* Notational Conventions::
* Error Terminology::
* Sections Not Formally Part Of This Standard::
* Interpreting Dictionary Entries::
@end menu
@node Notational Conventions
@subsection Notational Conventions
The following notational conventions are used throughout this document.
@node Font Key
@subsubsection Font Key
Fonts are used in this document to convey information.
@table @asis
@item @id{@term{name}}
Denotes a formal term whose meaning is defined in the Glossary.
When this font is used, the Glossary definition takes precedence
over normal English usage.
Sometimes a glossary term appears subscripted,
as in ``@term{whitespace}@sub{2}.''
Such a notation selects one particular Glossary definition out of several,
in this case the second.
The subscript notation for Glossary terms is generally used where the
context might be insufficient to disambiguate among the available definitions.
@item @id{@newterm{name}}
Denotes the introduction of a formal term locally to the current text.
There is still a corresponding glossary entry, and is formally equivalent
to a use of ``@term{name},'' but the hope is that making such uses
conspicuous will save the reader a trip to the glossary in some cases.
@item @id{@t{name}}
Denotes a symbol in the @code{COMMON-LISP} @term{package}.
For information about @term{case} conventions,
see @ref{Case in Symbols}.
@item @id{@f{name}}
Denotes a sample @term{name} or piece of @term{code} that a programmer
might write in @clisp{}.
This font is also used for certain @term{standardized} names that are not
names of @term{external symbols} of the @code{COMMON-LISP} @term{package},
such as @term{keywords}@sub{1},
@term{package} @term{names},
and @term{loop keywords}.
@item @id{@param{name}}
Denotes the name of a @term{parameter} or @term{value}.
In some situations the notation ``@metaparam{name}'' (@ie{} the same font,
but with surrounding ``angle brackets'') is used instead in order to
provide better visual separation from surrounding characters. These
``angle brackets'' are metasyntactic, and never actually appear in program
input or output.
@end table
@node Modified BNF Syntax
@subsubsection Modified BNF Syntax
This specification uses an extended Backus Normal Form (BNF) to
describe the syntax of @clisp{}@spc{}@term{macro forms} and @term{special forms}.
This section discusses the syntax of BNF expressions.
@node Splicing in Modified BNF Syntax
@subsubsection Splicing in Modified BNF Syntax
The primary extension used is the following:
@quotation
@mat{@hbox{@interleave{@mat{O}}}}
@end quotation
An expression of this form appears whenever a list of elements is
to be spliced into a larger structure and the elements can appear in
any order. The symbol @mat{O} represents a description of the syntax of
some number of syntactic elements to be spliced; that description must
be of the form
@quotation
@mat{O@sub{1}@spc{}@vert{}@spc{}@ldots{}@spc{}@vert{}@spc{}O@sub{l}}
@end quotation
@noindent
where each @mat{O@sub{i}} can be of the form @mat{S} or of
the form @star{@mat{S}} or of the form @mat{S}@sup{1}.
The expression @interleave{@mat{O}} means that a list of the form
@quotation
@mat{(O@sub{i@sub{1}}@ldots{} O@sub{i@sub{j}})@quad{} 1@leq{} j}
@end quotation
@noindent
is spliced into the enclosing expression,
such that if @mat{n @neq{} m} and @mat{1@leq{} n,m@leq{} j},
then either @mat{O@sub{i@sub{n}}@neq{} O@sub{i@sub{m}}}
or @mat{O@sub{i@sub{n}} = O@sub{i@sub{m}} = Q@sub{k}},
where for some @mat{1@leq{} k @leq{} n}, @mat{O@sub{k}} is of the form @star{@mat{Q@sub{k}}}.
Furthermore, for each @mat{O@sub{i@sub{n}}} that is of the form @mat{Q@sub{k}}@sup{1},
that element is required to appear somewhere in the list to be spliced.
For example, the expression
@f{(x @interleave{A | @star{B} | C} y)}
@noindent
means that at most one @tt{A}, any number of @tt{B}'s, and
at most one @tt{C} can occur in any order.
It is a description of any of these:
@lisp
(x y)
(x B A C y)
(x A B B B B B C y)
(x C B A B B B y)
@end lisp
@noindent
but not any of these:
@lisp
(x B B A A C C y)
(x C B C y)
@end lisp
@noindent
In the first case, both @tt{A} and @tt{C} appear too often,
and in the second case @tt{C} appears too often.
The notation @plus{@interleave{@mat{O@sub{1}} | @mat{O@sub{2}} | @mat{@ldots{}}}}
adds the additional restriction that at least one item from among the possible
choices must be used. For example:
@f{(x @plus{@interleave{A | @star{B} | C}} y)}
@noindent
means that at most one @tt{A}, any number of @tt{B}'s, and
at most one @tt{C} can occur in any order, but that in any case at least
one of these options must be selected.
It is a description of any of these:
@lisp
(x B y)
(x B A C y)
(x A B B B B B C y)
(x C B A B B B y)
@end lisp
@noindent
but not any of these:
@lisp
(x y)
(x B B A A C C y)
(x C B C y)
@end lisp
@noindent
In the first case, no item was used;
in the second case, both @tt{A} and @tt{C} appear too often;
and in the third case @tt{C} appears too often.
Also, the expression:
@f{(x @interleave{A@sup{1} | B@sup{1} | C} y)}
@noindent
can generate exactly these and no others:
@lisp
(x A B C y)
(x A C B y)
(x A B y)
(x B A C y)
(x B C A y)
(x B A y)
(x C A B y)
(x C B A y)
@end lisp
@node Indirection in Modified BNF Syntax
@subsubsection Indirection in Modified BNF Syntax
An indirection extension is introduced in order to make this
new syntax more readable:
@quotation
@mat{@hbox{@down{O}}}
@end quotation
@noindent
If @param{O} is a non-terminal symbol, the right-hand side
of its definition is substituted for the entire expression
@down{O}. For example, the following BNF is equivalent to
the BNF in the previous example:
@f{(x @interleave{@down{O}} y)}
@auxbnf{O, @f{A} | @star{@f{B}} | @f{C}}
@node Additional Uses for Indirect Definitions in Modified BNF Syntax
@subsubsection Additional Uses for Indirect Definitions in Modified BNF Syntax
In some cases, an auxiliary definition in the BNF might appear to be unused
within the BNF, but might still be useful elsewhere. For example, consider the
following definitions:
@DefmacWithValues{case, keyform @stardown{normal-clause} @brac{@down{otherwise-clause}}, @starparam{result}}
@DefmacWithValues{ccase, keyplace @stardown{normal-clause}, @starparam{result}}
@DefmacWithValues{ecase, keyform @stardown{normal-clause}, @starparam{result}}
@auxbnf{normal-clause, @paren{keys @starparam{form}}}
@auxbnf{otherwise-clause, @paren{@curly{otherwise | t} @starparam{form}}}
@auxbnf{clause, normal-clause | otherwise-clause}
Here the term ``@param{clause}'' might appear to be ``dead'' in that it
is not used in the BNF. However, the purpose of the BNF is not just to guide parsing,
but also to define useful terms for reference in the descriptive text which follows.
As such, the term ``@param{clause}'' might appear in text that follows,
as shorthand for ``@param{normal-clause} or @param{otherwise-clause}.''
@node Special Symbols
@subsubsection Special Symbols
The special symbols described here are used as a notational convenience
within this document, and are part of neither the @clisp{}@spc{}language nor
its environment.
@table @asis
@item @id{@EV{}}
This indicates evaluation.
For example:
@lisp
(+ 4 5) @EV{} 9
@end lisp
This means that the result of
evaluating the @term{form} @f{(+ 4 5)} is @f{9}.
If a @term{form} returns @term{multiple values}, those values might
be shown separated by spaces, line breaks, or commas.
For example:
@lisp
(truncate 7 5)
@EV{} 1 2
(truncate 7 5)
@EV{} 1
2
(truncate 7 5)
@EV{} 1, 2
@end lisp
Each of the above three examples is equivalent, and specifies
that @f{(truncate 7 5)} returns two values, which are @f{1} and @f{2}.
Some @term{conforming implementations} actually type an arrow (or some
other indicator) before showing return values, while others do not.
@item @id{@OV{}}
The notation ``@OV{}'' is used to denote one of several possible
alternate results. The example
@lisp
(char-name #@bsl{}a)
@EV{} NIL
@OV{} "LOWERCASE-a"
@OV{} "Small-A"
@OV{} "LA01"
@end lisp
indicates that @nil{}, @f{"LOWERCASE-a"}, @f{"Small-A"}, @f{"LA01"} are
among the possible results of @f{(char-name #@bsl{}a)}---each with equal preference.
Unless explicitly specified otherwise, it should not be assumed that the set of possible
results shown is exhaustive.
Formally, the above example is equivalent to
@lisp
(char-name #@bsl{}a) @EV{} @term{implementation-dependent}
@end lisp
but it is intended to provide additional information to illustrate some
of the ways in which it is permitted for implementations to diverge.
@item @id{@NV{}}
The notation ``@NV{}'' is used to denote a result which is not possible.
This might be used, for example, in order to emphasize a situation where
some anticipated misconception might lead the reader to falsely believe
that the result might be possible. For example,
@lisp
(function-lambda-expression
(funcall #'(lambda (x) #'(lambda () x)) nil))