perm filename JAPANC.TXT[COM,LSP] blob
sn#821899 filedate 1986-08-01 generic text, type T, neo UTF8
COMMON LISP/CORE
--- a Common Lisp subset proposal ---
This proposal is the joint work of a collaboration with the following
members.
Katsuhiko Yuura (Hitachi, Ltd.)
Hideki Kato (Fujitsu Laboratories Ltd.)
Yukiko Hashimoto (NEC Corp.)
Kazusaku Kawagome (SORD Computer Corp.)
Susumu Kawai (Nihon Digital Equipment Corp.)
Shigeaki Harada (Sharp Corp.)
Yoichi Yamamura (Nippon UNIVAC Kaisha Ltd.)
Takeshi Shimizu (Fuji Xerox Co., Ltd.)
Takashi Hamada (Matsushita Electric Industrial Co., Ltd.)
Haruyuki Kawabe (Nippon UNIVAC Kaisha Ltd.)
Akio Tanaka (Toshiba Corp.)
Nobuyuki Saji (NEC Corp.)
Masayuki Ida (Aoyama Gakuin Univ.)
1. Goals of Common Lisp/Core
(1) To set up the standard specification for small sized personal computers
and hand-held computers
Most of Japanese Lisp users on personal computers do not/will not
use all functions of the full set Common Lisp, and they hope for
good performance strongly. The authors want to propose a paying
subset, which does not have functions that are seldom used and
functions that make the system inefficient.
(2) To set up basic level of Common Lisp
Common Lisp should have two levels; one is full set which is
growing up and the other is subset which is fixed.
2. Discussions for Common Lisp/Core
(1) As members of subset WG in Jeida Common Lisp Committee, the authors
have discussed as to the following subjects since Dec. 10 1985.
i) a review of Ida's personal proposal for a subset.
ii) an examination of the necessities and the difficulties to implement
each function.
iii) a decision on the basic issues for Common Lisp/Core.
iv) a choice of the functions based on the vote by the members.
(2) The authors had an open meeting for the announcement and the
discussion of Common Lisp/Core on Jul. 8 '86. About twenty lisp and
programming language researchers and about forty lisp users met and
commented as follows.
i) From the implementor's point of view, it is supposed, the scale of
Common Lisp/Core is not so much smaller than that of the full set.
ii) From the user's point of view, useful functions are selected all
over sections and it is expected that more functions are selected
from packages, streams or declarations.
3. Basic issues and decisions
(1) Arms and legs of Common Lisp are kept, because it is important to
transfer programs in the subset to these in the full set easily,
and it is also expected that the subset users grow into the full set
users easily.
(2) It is aimed that the number of functions in Common Lisp/Core is about
a half in the full set.
(3) The following features of Common Lisp are kept:
i) scope and extent rules including lexical closure.
ii) keyword parameters.
iii) the principles of type hierarchy and generic function.
iv) functional richness over Utilisp (Tokyo univ. '81; one of the most
famous Lisp in Japan) or Franzlisp.
v) some useful or characteristic data types;
bignum, ratio, structure and readtable
(4) The choice of functions is based on the following rules in order.
i) functions related to the features (3).
ii) functions having high necessities.
iii) functions not having so many difficulties to implement
The following issues are also discussed, but these policies are not adopted.
(a) To keep the "language" oriented features and to leave out the "system"
oriented features.
The authors think that Common Lisp features are classified into two
categories; one is the "language" oriented features (e.g. control,
number and list), the other is the "system" oriented features (e.g.
package, stream and I/O).
(b) To keep the kernel part that users for themselves can not "defun" or
"defmacro".
Some members of this WG opposed to the issues (3) and (4), argued for
the Common Lisp/Kernel approach (b), and then they did not join this
proposal.
4. Summary of Common Lisp/Core
Major deleted items are: most of system parameter constants, complex
numbers, most of package features, local functions, adjustable arrays, hash-
tables, and pathnames.
Common Lisp/Core summary
Notes: o...remained x...deleted
-------------------------------------------------------------------------------
| Chapter Comment Number of |
| Func/Const |
| Core CLtL |
|-----------------------------------------------------------------------------|
| 2. Data Types o type hierarchy - - |
| x complex, pathname |
| o ratio, structure |
| 3. Scope and Extent same as CLtL - - |
| o lexical scoping |
| 4. Type Specifiers x complex type specifiers 2/- 3/- |
| x deftype |
| 5. Program Structure x defparameter 4/0 5/2 |
| 6. Predicates x equalp, complexp 26/2 33/2 |
| 7. Control Structure x prog, prog*, prog2 49/0 67/2 |
| x flet, labels, macrolet |
| o tagbody, go |
| 8. Macro 4/0 4/1 |
| 9. Declarations x all declaration specifiers 2/- 4/- |
| except "special" |
| x proclaim, locally |
|10. Symbols x getf, remf 9/- 13/- |
|11. Packages x almost all 4/0 26/2 |
| o intern, unintern, find-symbol, |
| do-all-symbols |
|12. Numbers x complex numbers 49/1 96/44 |
| o ratio, pi |
|13. Characters x bits, font attributes 28/0 36/7 |
|14. Sequences x xxx-if, -if-not 22/- 44/- |
|15. Lists x c....r, xxx-if, -if-not 57/- 94/- |
|16. Hash Tables x all 0/- 8/- |
|17. Arrays Only simple-arrays are available 7/0 31/3 |
| x adjustable array, fill-pointer |
|18. Strings o almost all 25/- 25/- |
|19. Structures o defstruct 1/- 1/- |
|20. The Evaluator x hooks 2/4 4/12 |
|21. Streams x make-xx-stream functions 5/7 16/7 |
| x :abort of "close" |
|22. Input/Output x write, y-or-n-p 28/4 41/14 |
|23. File System Pathname is a string 10/0 29/2 |
| Interface |
|24. Errors o error, warn, break 3/0 10/1 |
|25. Miscellaneous 19/2 32/2 |
| Features |
|-----------------------------------------------------------------------------|
| Total 356/20 622/101|
-------------------------------------------------------------------------------
5. Difference from Ida's personal proposal
(1) added features in Common Lisp/Core
keyword parameters, readtables, tagbody, go,
character predicates ignoring case, string functions and so on
(2) deleted features in Common Lisp/Core
list functions, file i/o functions and so on
(3) number of functions, variables and constant
Common Lisp/Core 376 (356,17,3)
Ida's personal proposal 341 (332, 7,2)
The authors will appreciate opinions from all the persons through network.
-------------------------------------------------------------------------------
-------------------------------------------------------------------------------
Detailed Description of Common Lisp/Core
2. Data Types
2.1 Numbers
NUMBER, INTEGER, FIXNUM, BIGNUM, RATIONAL, RATIO,
FLOAT (SHORT-/SINGLE-/DOUBLE-/LONG-)
Deleted Item: COMPLEX
2.2 Characters
CHARACTER, STANDARD-CHARACTER, STRING-CHARACTER
Comment: -> bits-attribute and font-attribute may be zero.
2.3 Symbols
SYMBOL
2.4 Lists and Conses
LIST, CONS, NULL
2.5 Arrays
ARRAY, SIMPLE-ARRAY, VECTOR, SIMPLE-VECTOR, STRING, SIMPLE-STRING
Deleted Item: BIT-VECTOR
Comment: -> ARRAY means SIMPLE-ARRAY, and rank is restricted to max 3.
2.6 Hash Tables
Deleted Item: HASHTABLES
2.7 Readtables
READTABLE
2.8 Packages
PACKAGE
Comment: -> Package is restricted to LISP package and KEYWORD package.
2.9 Pathnames
Deleted Item: PATHNAME
2.10 Streams
STREAM
2.11 Random-States
Deleted Item: RANDOM-STATES
2.12 Structures
STRUCTURE
2.13 Functions
FUNCTION, COMPILED-FUNCTION, LAMBDA-EXPRESSION, SYMBOL
3. Scope and Extent
Same as CLtL
Comment: -> Modern Lisp must have the compiler.
-> The compatibility of compiler and interpreter is one of the
major goals of CL.
-> We evaluate the effort to make the semantics of Lisp clearer.
4. Type Specifiers
4.1 Type Specifier Symbols
The type symbols are the same as data types.
4.2 Type Specifier Lists
Type specifier lists are allowed.
4.3 Predicating Type Specifiers
Deleted item: SATISFIES predicate-name
4.4 Type Specifiers That Combine
Type specifier combination is omitted.
4.5 Type Specifier That Specialize
Type specifier specializations are omitted.
4.6 Type Specifiers That Abbreviate
Type specifier abbreviations are omitted.
4.7 Defining New Type Specifiers
Deleted item: DEFTYPE
4.8 Type Conversion Function
COERCE
4.9 Determining the Type of an Object
TYPE-OF
5. Program Structure
5.1 Forms
Same as CLtL except absence of some special forms.
Deleted items: Following special forms:
PROGV, COMPILER-LET, FLET, LABELS, MACROLET
5.2 Functions
Deleted items: LAMBDA-LIST-KEYWORDS, LAMBDA-PARAMETERS-LIST
--> to keep the system compact.
5.3 Top-level Forms
DEFUN, DEFVAR, DEFCONSTANT, EVAL-WHEN
Deleted items: DEFPARAMETER --> It is redundant.
6. Predicates
6.1. Logical Values
NIL, T
6.2. Data Type Predicates
6.2.1. General Type Predicates
TYPEP, SUBTYPEP
6.2.2. Specific Data Type Predicates
NULL, SYMBOLP, ATOM, CONSP, LISTP, NUMBERP, INTEGERP, RATIONALP, FLOATP
STRINGP, VECTORP, SIMPLE-VECTOR-P, SIMPLE-STRING-P, ARRAYP
FUNCTIONP, COMPILED-FUNCTION-P, STREAMP, COMMONP
-- see also ...
STANDARD-CHAR-P, STRING-CHAR-P, READTABLEP
Comment:
Data type predicates' existence is depending on data type existence itself.
Data type hierarchy remains.
There is a recommend with using following predicates: VECTORP, STRINGP.
Use SIMPLE-xxx functions of these is much better, because data type ARRAY
has no fill-pointer, is not adjustable, is not able to be displaced
from another array.
Deleted items:
BIT-VECTOR-P, SIMPLE-BIT-VECTOR-P, RANDOM-STATE-P, HASH-TABLE-P
PATHNAMEP, COMPLEXP, PACKAGEP
-> These functions are deleted because of deleting of their data types.
6.3. Equality Predicates
EQ, EQL, EQUAL
Deleted item: EQUALP
-> Other function can replace this. Use type specific function to compare
rougher or more exactly.
6.4. Logical Operators
NOT, AND, OR
7. Control Structure
7.1 Constants and Variables
7.1.1 Reference
QUOTE, FUNCTION, SYMBOL-VALUE, SYMBOL-FUNCTION, BOUNDP, FBOUNDP,
SPECIAL-FORM-P
7.1.2 Assignment
SETQ, PSETQ, SET, MAKUNBOUND, FMAKUNBOUND
Comments: -> These are primitive.
-> FUNCTION is very important, because it returns "lexical closure".
7.2 Generalized Variables
SETF
-> This is very important macro on CL.
Deleted Items: PSETF, SHIFTF, ROTATEF
-> If necessary, these macros can be defined easily using SETF macro.
DEFINE-MODIFY-MACRO, DEFSETF, DEFINE-SETF-METHOD, GET-SETF-METHOD
GET-SETF-METHOD-MULTIPLE-VALUE
-> These macros and functions are provided to define macros
like a SETF and to modify SETF.
Forms of Place: 1) The name of a variable.
2) Functions.
AREF, NTH, ELT, REST, FIRST, SECOND, THIRD, FOURTH, FIFTH
SIXTH, SEVENTH, EIGHTH, NINTH, TENTH, CAR, CDR, C..R, C...R, SVREF
GET, SYMBOL-PLIST, SYMBOL-VALUE, SYMBOL-FUNCTION, MACRO-FUNCTION
3) Selector function constructed by DEFSTRUCT.
4) Functions.
CHAR SCHAR SUBSEQ
5) A THE type declaration form.
6) A call to APPLY where the first argument form is of the form #'name.
7) A macro call.
Deleted Forms of Place: 1) Functions.
C....R, GETF, GETHASH, DOCUMENTATION, FILL-POINTER,
BIT, SBIT, CHAR-BIT, LDB, MASK-FIELD
2) Any form for which a DEFSETF or DEFINE-SETF-METHOD declaration
has been made.
-> These functions are deleted on CL Core.
7.3 Function Invocation
APPLY, FUNCALL
-> These functions are very primitive in LISP language.
Deleted Item: CALL-ARGUMENT-LIMIT
7.4 Simple Sequencing
PROGN, PROG1
Deleted Item:
PROG2 -> PROG2 is provided mostly for historical compatibility.
7.5 Establishing New Variable Bindings
LET, LET* -> These are very important to establish new variable binding.
Deleted Items: COMPILER-LET, PROGV
-> These are not important to ordinary users.
FLET, LABELS, MACROLET
-> In ordinary, local named functions and macros are not necessary.
7.6 Conditionals
IF, WHEN, UNLESS, COND, CASE
Deleted items: TYPECASE
Comments: -> #'IF is the primitive of the CL.
-> #'COND is a one of the originator of lisp.
It is constructive but not harmful.
7.7 Blocks and Exits
BLOCK, RETURN-FROM, RETURN
Comments:
-> These features are quite necessary for constructive programming.
7.8 Iteration
7.8.1 Infinite Iteration
LOOP
7.8.2 Infinite Iteration
DO, DO*
7.8.3 Simple Iteration Constructs
DOLIST, DOTIMES
7.8.4
MAPCAR, MAPLIST, MAPC, MAPL, MAPCAN, MAPCON
Comment: -> These are very primitive in LISP language.
7.8.5 The "Program Feature"
TAGBODY, GO
Deleted items: PROG, PROG*
Comment:
-> Old and Evil customs must be destroyed.TAGBODY and GO is needed
to construct LOOP, DO and other iteration MACRO.
7.9 Multiple Values
VALUES, MULTIPLE-VALUE-LIST, MULTIPLE-VALUE-CALL
MULTIPLE-VALUE-PROG1, MULTIPLE-VALUE-BIND, MULTIPLE-VALUE-SETQ
Deleted items: MULTIPLE-VALUES-LIMIT, VALUES-LIST
7.10 Dynamic Non-local Exits
CATCH, UNWIND-PROTECT, THROW
Comment:
-> These features are quite necessary for constructive programming.
8. Macro
8.1 Macro Definition
MACRO-FUNCTION, DEFMACRO
Comments: -> DEFMACRO var-list keywords: &optional,&rest,&key,
&allow-other-keys and &aux are allowed, and &body,
&whole and &environment are not allowed.
-> &key, &allow-other-keys and &aux don't have so high necessity,
but it leads to understand the specification clearly to have
equality to DEFUN lambda-list keywords.
8.2 Macro Expansion
MACROEXPAND, MACROEXPAND-1
Deleted Item: *MACROEXPAND-HOOK*
Comment:
-> MACROEXPAND,MACROEXPAND-1: optional parameter env is not allowed.
9. Declarations
9.1 Declaration Syntax
DECLARE
Deleted items: LOCALLY, PROCLAIM
Comments: -> 'PROCLAIM' is equivalent to 'DEFVAR', because the declaration
specifiers except 'special' are omitted.
9.2 Declaration Specifiers
special
Deleted items:
TYPE, FTYPE, FUNCTION, INLINE, NOTINLINE, IGNORE, OPTIMIZE, DECLARATION
9.3 Type Declaration for Forms
THE
Comments: -> The syntax of 'THE' must be acceptable,
but its function may not be interpreted.
10. Symbols
10.1 The Property List
GET, REMPROP, SYMBOL-PLIST
Deleted items: GETF, REMF -> Not necessary
GET-PROPERTIES, -> This is not so necessary and can be implemented by
SYMBOL-PLIST very easily.
10.2 The Print Name
SYMBOL-NAME
10.3 Creating Symbols
MAKE-SYMBOL, COPY-SYMBOL, GENSYM, SYMBOL-PACKAGE, KEYWORDP
Deleted item: GENTEMP
Comments:
-> GET and REMPROP are very important primitive functions on plist.
-> SYMBOL-xxxs are the primitive functions on symbols.
-> GENSYM is, of course, necessary but GENTEMP is not.
(Someone said, however, that GENTEMP is more useful than GENSYM.)
11. Packages
11.1. Consistency Rules
-- Read-read consistency
-- Print-read consistency
-- Print-print consistency
11.2. Package Names
-- #\: is a separator of package name and symbol name.
11.3. Translating Strings to Symbols
-- :Bar is a external symbol in package KEYWORD package.
-- #:Bar is an uninterned symbol but accessible from current package.
Deleted items:
Symbol *package* contains current package. *Package* is deleted.
Foo:bar is a external symbol BAR that accessible from package FOO.
Foo::bar is a internal or external symbol BAR
that accessible form package FOO.
System locally binds *package* to FOO and accesses the symbol BAR.
11.4. Exporting and Importing Symbols
-- Function INTERN makes a symbol in current package.
Deleted items: Package using and symbol importing and exporting features.
Comment: The following two features are considered:
exporting symbols
using packages
In exporting symbols in a package, it is necessary to be searched all
symbol tables to find the conflict. It causes the system inefficient,
especially in personal computers. Consequently, symbol exporting and
package using features are eliminated. As a natural course of event,
the symbol shadowing feature is also deleted.
Furthermore, the `colon' notation is difficult to use correctly for
beginners. For example, `USER::CAR' represents the symbol in package
USER but it does not mean the symbol locally defined in the package
USER. This is because package USER uses package LISP, so the symbol
is specified as the inherited one from package LISP (the above notation
represents the symbol which is ACCESSIBLE from package USER by the CLtL
definition). Symbol-shadowing feature is the only way to define CAR
locally in the package USER.
11.5. Name Conflicts
Comment:
The symbol shadowing are deleted, because we have no other package except
LISP and KEYWORD package.
11.6. Built-in Packages
Lisp system initially must have the following two packages: lisp, keyword
Deleted items: The following packages are deleted: user, system
New packages can not be defined or created by users.
11.7. Package System Functions and Variables
INTERN, FIND-SYMBOL, UNINTERN, DO-ALL-SYMBOLS
Restriction:
Function INTERN returns two values, the first value is the symbol itself
and the second value is one of followings.
:internal ... When the symbol is already there.
nil ... When the symbol is newly created.
Function FIND-SYMBOL's second value is one of followings.
:internal ... When the symbol is already accessible.
nil ... There is no symbol with that name.
Deleted items:
*PACKAGE*, MAKE-PACKAGE, IN-PACKAGE, FIND-PACKAGE, PACKAGE-NAME
PACKAGE-NICKNAMES, RENAME-PACKAGE, PACKAGE-USE-LIST, PACKAGE-USED-BY-LIST
PACKAGE-SHADOWING-SYMBOLS, LIST-ALL-PACKAGES, EXPORT, UNEXPORT, IMPORT
SHADOWING-IMPORT, SHADOW, USE-PACKAGE, UNUSE-PACKAGE, FIND-ALL-SYMBOLS
DO-SYMBOLS, DO-EXTERNAL-SYMBOLS
11.8. Modules
Deleted items: *MODULES*, PROVIDE, REQUIRE
Comment: These features are very poor without package creation.
12. Numbers
All features on complex numbers are omitted, since they are too
inefficient on PC environment.
12.1 Precision, Contagion, and Coercion
Same as CLtL except absence of features on complex numbers
12.2 Predicates on Numbers
ZEROP, PLUSP, MINUSP, ODDP, EVENP
12.3 Comparisons on Numbers
=, /=, <, >, <=, >=, MAX, MIN
12.4 Arithmetic Operations
+, -, *, /, 1+, 1-, INCF, DECF, GCD, LCM
12.5 Irrational and Transcendental Functions
EXP, EXPT, LOG, SQRT, ABS, SIGNUM, SIN, COS, TAN, ATAN, PI
Comments:
The function 'SQRT' must signal error, when a negative argument is passed.
The function 'LOG' must signal error, when a negative argument is passed.
Deleted items:
ISQRT, PHASE, ASIN, ACOS, SINH, COSH, TANH, ASINH, ACOSH, ATANH
12.6 Type Conversions and Component Extractions on Numbers
FLOAT, RATIONAL, NUMERATOR, DENOMINATOR, FLOOR, CEILING
TRUNCATE, ROUND, MOD, REM
Deleted items:
RATIONALIZE, FFLOOR, FCEILING, FTRUNCATE, FROUND, DECODE-FLOAT
SCALE-FLOAT, FLOAT-RADIX, FLOAT-SIGN, FLOAT-DIGITS, FLOAT-PRECISION
INTEGER-DECODE-FLOAT, COMPLEX, REALPART, IMAGPART
12.7 Logical Operations on Numbers
LOGIOR, LOGXOR, LOGAND, LOGNOT, LOGBITP, ASH
Deleted items:
LOGEQV, LOGNAND, LOGNOR, LOGANDC1, LOGANDC2, LOGORC1, LOGORC2
BOOLE, BOOL-CLR, BOOL-SET, BOOLE-1, BOOLE-2, BOOLE-C1, BOOLE-C2
BOOLE-AND, BOOLE-IOR, BOOLE-XOR, BOOLE-EQV, BOOLE-NAND, BOOLE-NOR
BOOLE-ANDC1, BOOLE-ANDC2, BOOLE-ORC1, BOOLE-ORC2
LOGTEST, LOGCOUNT, INTEGER-LENGTH
12.8 Byte Manipulation Functions
All byte manipulation functions are omitted, since they are too
inefficient on PC environment.
Deleted items: BYTE, BYTE-SIZE, BYTE-POSITION, LDB, LDB-TEST
MASK-FIELD, DPB, DEPOSIT-FIELD
12.9 Random Numbers
All features on random-state are deleted.
Deleted items: RANDOM, *RANDOM-STATE*, MAKE-RANDOM-STATE, RANDOM-STATE-P
12.10 Implementation Parameters
All implementation parameters on number are omitted to keep the system
compact.
Deleted items:
MOST-POSITIVE-FIXNUM, MOST-NEGATIVE-FIXNUM, MOST-POSITIVE-SHORT-FLOAT
LEAST-POSITIVE-SHORT-FLOAT, LEAST-NEGATIVE-SHORT-FLOAT
...
DOUBLE-FLOAT-NEGATIVE-EPSILON, LONG-FLOAT-NEGATIVE-EPSILON
13. Character
Comments:
-> The CL Core's character doesn't have the font and bits attributes.
-> If necessary, CL/Core considers the font and bits attributes as zero.
13.1 Character Attributes
Deleted Items: CHAR-CODE-LIMIT, CHAR-FONT-LIMIT, CHAR-BITS-LIMIT
-> System constants should be omitted.
13.2 Predicates on Characters
STANDARD-CHAR-P, GRAPHIC-CHAR-P, STRING-CHAR-P, ALPHA-CHAR-P
UPPER-CASE-P, LOWER-CASE-P, BOTH-CHAR-P, DIGIT-CHAR-P
CHAR=, CHAR/=, CHAR<, CHAR>, CHAR<=, CHAR>=
-> These are primitive predicates for treating characters.
CHAR-EQUAL, CHAR-NOT-EQUAL, CHAR-LESSP
CHAR-GREATERP, CHAR-NOT-GREATERP, CHAR-NOT-LESSP
Deleted Item: ALPHANUMERICP
-> ALPHANUMERICP is equal to (OR (ALPHA-CHAR-P char) (DIGIT-CHAR-P char))
13.3 Character Construction and Selection
CHAR-CODE, CODE-CHAR
Comment: -> CODE-CHAR's optional parameter (font, bits) is omitted.
Deleted Items: CHAR-BITS, CHAR-FONT, MAKE-CHAR
-> When the font and bits attributes are zero, MAKE-CHAR returns char
same as its argument char.
13.4 Character Conversions
CHARACTER, CHAR-UPCASE, CHAR-DOWNCASE, DIGIT-CHAR, CHAR-NAME, NAME-CHAR
Comment: -> DIGIT-CHAR's optional font parameter is omitted.
Deleted Items: CHAR-INT, INT-CHAR
-> CHAR-INT returns the same integer CHAR-CODE would, because
the font and bits attributes are zero.
-> And thus INT-CHAR is equal to CODE-CHAR.
13.5 Character Control-Bit Functions
Deleted Items:
CHAR-CONTROL-BIT, CHAR-META-BIT, CHAR-SUPER-BIT, CHAR-HYPER-BIT
CHAR-BIT, SET-CHAR-BIT
-> Because the font and bits attributes are not implemented,
all character control-bit functions are omitted.
14. Sequences
Comment: Functions for the sequence is also important for the string,
Because CL does not have rich facility on string.
14.1 Simple Sequence Functions
ELT, SUBSEQ, COPY-SEQ, LENGTH, REVERSE, NREVERSE
Deleted items: MAKE-SEQUENCE
14.2 Concatenating, Mapping, and Reducing Sequences
CONCATENATE, SOME, EVERY
Deleted items: MAP, NOTANY, NOTEVERY, REDUCE
14.3 Modifying Sequences
FILL, REPLACE
Restricted:
Keyword parameters, :from-end, :test-not and :key are omitted from
following six functions.
REMOVE, DELETE, REMOVE-DUPLICATES, DELETE-DUPLICATES
SUBSTITUTE, NSUBSTITUTE
Deleted items: REMOVE-IF, REMOVE-IF-NOT, DELETE-IF, DELETE-IF-NOT
SUBSTITUTE-IF, SUBSTITUTE-IF-NOT, NSUBSTITUTE-IF, NSUBSTITUTE-IF-NOT
Comments: ->Treat following eight functions in a same manner
REMOVE, DELETE, SUBSTITUTE, NSUBSTITUTE, FIND, POSITION, COUNT, SEARCH
->Omit the key-word parameters such as :from-end, :test-not and :key.
14.4 Searching Sequences for Items
Restricted:
Keyword parameters, :from-end, :test-not and :key are omitted from
the following four functions.
FIND, POSITION, COUNT, SEARCH
Deleted items:
MISMATCH, FIND-IF, FIND-IF-NOT, POSITION-IF, POSITION-IF-NOT
COUNT-IF, COUNT-IF-NOT
14.5 Sorting and Merging
Restricted: Keyword parameter, :key is omitted from SORT.
Deleted items: STABLE-SORT, MERGE
15. Lists
15.1 Conses
CONS, CAR, CDR, CAAR, CADR, CDAR, CDDR
CAAAR, CAADR, CADAR, CADDR, CDAAR, CDADR, CDDAR, CDDDR
Deleted items: C....R, TREE-EQUAL
15.2 Lists
ENDP, LIST-LENGTH, NTH, FIRST, SECOND, THIRD, FOURTH, FIFTH, SIXTH
SEVENTH, EIGHTH, NINTH, TENTH, REST, NTHCDR, LAST, LIST, LIST*, APPEND
COPY-TREE, NCONC, PUSH, POP, LDIFF
Deleted items: MAKE-LIST, COPY-LIST, COPY-ALIST, REVAPPEND, NRECONC
PUSHNEW, BUTLAST, NBUTLAST
15.3 Alteration of List Structure
RPLACA, RPLACD
15.4 Substitution of Expressions
SUBST, NSUBST
Deleted items: SUBST-IF, SUBST-IF-NOT, SUBLIS, NSUBLIS
Comments:
->SUBST,NSUBST: lambda keyword :test-not and :key are not allowed.
-> -IF, -IF-NOT and :test-not, :key are deleted as Sequences.
15.5 Using Lists as Sets
MEMBER, ADJOIN, UNION, NUNION, INTERSECTION, NINTERSECTION
SET-DIFFERENCE, NSET-DIFFERENCE, SET-EXCLUSIVE-OR, NSET-EXCLUSIVE-OR
SUBSETP
Deleted items: MEMBER-IF, MEMBER-IF-NOT, TAILP
Comments:
->MEMBER, UNION, NUNION, INTERSECTION, NINTERSECTION, SET-DIFFERENCE,
NSET-DIFFERENCE, SET-EXCLUSIVE-OR, NSET-EXCLUSIVE-OR, SUBSETP:
lambda keyword :test-not and :key are not allowed.
-> using lists as sets non-destructively are very useful and using
lists as sets destructively are useful and primitive.
15.6 Association lists
ACONS, ASSOC, RASSOC
Deleted items: PAIRLIS, ASSOC-IF, ASSOC-IF-NOT, RASSOC-IF, RASSOC-IF-NOT
Comment:
->ASSOC,RASSOC: lambda keyword :test-not and :key are not allowed.
-> association lists don't have so many necessities now.
16. Hash Tables
Deleted items:
MAKE-HASH-TABLE, HASH-TABLE-P, GETHASH, REMHASH, MAPHASH, CLRHASH
HASH-TABLE-COUNT, SXHASH
Comments: -> the hash table is too complicated, and the necessity is low.
17. Arrays
Only simple arrays are available.
Bit-arrays are omitted.
Comments: -> Simple arrays are enough on PCs.
-> Bit-arrays are not necessary in usual applications.
17.1 Array Creation
MAKE-ARRAY dimensions &key :initial-element :initial-contents
Deleted items: &key :element-type, :adjustable, :fill-pointer,
:displaced-to, :displaced-index-offset
Restricted: The maximum array rank available can be 3 (not 7).
Comments: -> Element-type "t" is enough on PCs.
Restricted array element feature is for efficiency and is useful
with foreign languages. These extensions should be left for venders.
-> Adjustable-array is complexed feature and is not necessary on PCs.
-> Fill-pointer may be useful but is not an essential feature on vectors.
VECTOR
-> VECTOR helps users write clearer code using sequences though
it can be substituted by MAKE-ARRAY.
Deleted items:
ARRAY-RANK-LIMIT, ARRAY-DIMENSION-LIMIT, ARRAY-TOTAL-SIZE-LIMIT
-> System constants should be omitted (by our primary principle).
17.2 Array Access
AREF, SVREF
-> SVREF helps users write clearer code accessing vectors though
it can be substituted by AREF.
17.3 Array Information
ARRAY-RANK, ARRAY-DIMENSION, ARRAY-IN-BOUNDS-P
Comments: -> These are the very primitive functions on arrays.
Deleted items: ARRAY-ELEMENT-TYPE
-> The element-type cannot be specified in MAKE-ARRAY.
ARRAY-TOTAL-SIZE, ARRAY-DIMENSIONS, ARRAY-ROW-MAJOR-INDEX
-> These are not essential and can be computed using other primitive
functions very easily.
ADJUSTABLE-ARRAY-P
-> This is not necessary because only simple-arrays are available.
17.4 Functions on Arrays of Bits
Deleted items:
BIT, SBIT, BIT-AND, BIT-IOR, BIT-XOR, BIT-EQV, BIT-NAND, BIT-NOR
BIT-ANDC1, BIT-ANDC2, BIT-ORC1, BIT-ORC2, BIT-NOT
-> BIT-ARRAYs are not necessary in usual applications.
17.5 Fill Pointers
Deleted items: ARRAY-HAS-FILL-POINTER-P, FILL-POINTER
VECTOR-PUSH, VECTOR-PUSH-EXTEND, VECTOR-POP
-> Only simple-arrays are available.
Comments: -> Fill-pointer might be useful in some applications
but seems to be unnatural feature on the vector.
17.6 Changing the Dimensions of an Array
Deleted item: ADJUST-ARRAY -> Only simple-arrays are available.
18. Strings
Comment:
Strings' partial manipulation is handled by functions that treat sequence
data type like SUBSEQ.
18.1. String Access
CHAR, SCHAR
Comment:
There is a recommend of these two functions. Use SCHAR rather than CHAR,
because of transporting program to Common Lisp full set. SCHAR is faster
than CHAR.
18.2. String Comparison
STRING=, STRING-EQUAL, STRING>, STRING<=, STRING>=, STRING/=
STRING-LESSP, STRING-GREATERP, STRING-NOT-GREATERP, STRING-NOT-LESSP
STRING-NOT-EQUAL
Comment: String comparisons remain with character comparisons.
18.3. String Construction and Manipulation
MAKE-STRING, STRING-TRIM, STRING-LEFT-TRIM, STRING-RIGHT-TRIM
STRING-UPCASE, STRING-DOWNCASE, STRING-CAPITALIZE, NSTRING-UPCASE
NSTRING-DOWNCASE, NSTRING-CAPITALIZE, STRING
Comment: We need MAKE-STRING to prepare the buffer of large string. For
example, prepare a buffer for screen of screen editor.
Restrictions: Cut keyword parameters :START and :END.
Usually case conversion function will be applied to whole string.
Please use SUBSEQ to modify the part of string.
19. Structures
DEFSTRUCT
Legal syntax for the slot-descriptions:
(slot-name [default-init]) or slot-name
Deleted Items: slot options: :type, :read-only
defstruct options: :conc-name, :constructor, :copier, :predicate
:include, :print-function, :type, :named, :initial-offset
--> to keep the system compact.
20. The Evaluator
20.1 Run-Time Evaluation of Forms
EVAL -> EVAL is very important primitive function.
CONSTANTP -> CONSTANTP is the only way to judge ifan object is constant.
Deleted Items: *EVALHOOK*, *APPLYHOOK*, EVALHOOK, APPLYHOOK
-> These are not necessary for ordinary users, because hook feature
is provided to make debugging tools.
-> But any hook feature will be provided implicitly for making
debugging tools on the CL Core.
20.2 The Top-Level Loop
+, -, *, / -> At least these are necessary for standard user interaction.
Deleted Items: ++, +++, **, ***, //, ///
21. Streams
21.1 Standard Streams
*standard-input*, *standard-output*, *error-output*, *query-io*
*debug-io*, *terminal-io*, *trace-output*
21.2 Creating New Streams
Deleted items:
MAKE-SYNONYM-STREAM, MAKE-BROADCAST-STREAM, MAKE-CONCATENATED-STREAM
MAKE-TWO-WAY-STREAM, MAKE-ECHO-STREAM, MAKE-STRING-INPUT-STREAM
MAKE-STRING-OUTPUT-STREAM, GET-OUTPUT-STREAM-STRING, WITH-OPEN-STREAM
WITH-INPUT-FROM-STRING, WITH-OUTPUT-TO-STRING
Comments: The Stream as an object in the CL data type is less needed, but
it is very useful and important to abstract I/O.
21.3 Operations on Streams
STREAMP, INPUT-STREAM-P, OUTPUT-STREAM-P, STREAM-ELEMENT-TYPE
Restricted: Keyword parameter, :abort is omitted from CLOSE.
22. Input/Output
22.1 Printed Representation of Lisp Objects
macro characters
( ) ' ; " ` , @ #
standard dispatch macro character syntax
#\ #' #( #n( #: #B #O #nA #S #+ #- #! #<
*READTABLE*, COPY-READTABLE, READTABLEP, SET-SYNTAX-FROM-CHAR
SET-MACRO-CHARACTER, GET-MACRO-CHARACTER, MAKE-DISPATCH-MACRO-CHARACTER
SET-DISPATCH-MACRO-CHARACTER, GET-DISPATCH-MACRO-CHARACTER
*PRINT-LENGTH*, *PRINT-LEVEL*, *PRINT-CASE*
Deleted items: standard dispatch macro character syntax
#* #n* #. #, #nR #n= #n# #) #C
*READ-BASE*, *READ-SUPPRESS*, *PRINT-ESCAPE*, *PRINT-PRETTY*
*PRINT-CIRCLE*, *PRINT-BASE*, *PRINT-RADIX*, *PRINT-GENSYM*, *PRINT-ARRAY*
Comment: -> readtables are very useful to extend input variety.
22.2 Input Functions
READ, READ-LINE, READ-CHAR, UNREAD-CHAR, LISTEN
READ-CHAR-NO-HANG, CLEAR-INPUT, READ-FROM-STRING, READ-BYTE
Deleted items: *READ-DEFAULT-FLOAT-FORMAT*
READ-PRESERVING-WHITESPACE
READ-DELIMITED-LIST
PEEK-CHAR
PARSE-INTEGER
Comment:
->READ-FROM-STRING keyword parameter :preserve-whitespace is not allowed.
-> string i/o is useful for the lisp internal editor and binary i/o
is necessary for handling alien structures producted by other language.
22.3 Output Functions
PRIN1, PRINT, PPRINT, PRINC, PRIN1-TO-STRING, PRINC-TO-STRING
WRITE-CHAR, TERPRI, FRESH-LINE, WRITE-BYTE, FORMAT
format directives
}A }S }D }B }O }X }C }F }E }% }& }| }} }<NEWLINE> }T
Deleted items: WRITE, WRITE-TO-STRING, WRITE-STRING, WRITE-LINE
FINISH-OUTPUT, FORCE-OUTPUT, CLEAR-OUTPUT
format directives
}nR }P }G }$ }* }? }( }) }[ }] }; }{ }⎇ }< }> }↑
Comment: -> PRIN1, PPRINT and PRINC are more friendly than generic WRITE.
22.4 Querying the Users
Deleted items: Y-OR-N-P, YES-OR-NO-P
23. File System Interface
23.1 File Names
File names can be expressed as strings.
23.1.1 Pathnames
Pathname is deleted.
23.1.2 Pathname Functions
Deleted items: PATHNAME, TRUENAME, PARSE-NAMESTRING, MERGE-PATHNAMES
*DEFAULT-PATHNAME-DEFAULTS*, MAKE-PATHNAME, PATHNAMEP
PATHNAME-HOST, PATHNAME-DEVICE, PATHNAME-DIRECTORY, PATHNAME-NAME
PATHNAME-TYPE, PATHNAME-VERSION, NAMESTRING, FILE-NAMESTRING
DIRECTORY-NAMESTRING, HOST-NAMESTRING, ENOUGH-NAMESTRING
USER-HOMEDIR-PATHNAME
23.2 Opening and Closing Files
OPEN
keyword parameters
:direction :input, :output
:element-type string-char, unsigned-byte
WITH-OPEN-FILE
Deleted items: keyword parameters
:direction :io, :probe
:element-type signed-byte, character, bit, (mod n), :default
:if-exists, :if-dose-not-exist
23.3 Renaming, Deleting, and Other File Operations
RENAME-FILE, DELETE-FILE, PROBE-FILE, FILE-WRITE-DATE
FILE-POSITION, FILE-LENGTH
Deleted item: FILE-AUTHOR
23.4 Loading Files
LOAD
Deleted items: keyword parameter :if-dose-not-exist
*LOAD-VERBOSE*
23.5 Accessing Directories
DIRECTORY
Comments: -> A list of strings is returned.
24. Errors
24.1 General Error-Signalling Function
ERROR, WARN, BREAK
Deleted items: *BREAK-ON-WARNINGS*, CERROR
Comments:
-> The three functions, error, warn, and break are enough for PCs.
24.2 Specialized Error-Signalling Forms and Macros
Deleted items: CHECK-TYPE, ASSERT -> These are not so necessary.
ETYPECASE, CTYPECASE -> These are not so necessary and can be
implemented very easily using TYPECASE.
ECASE, CCASE -> Same reason as E/CTYPECASE
ASSERT -> These are not so necessary.
ETYPECASE, CTYPECASE
25. Miscellaneous Features
25.1. The Compiler
COMPILE, COMPILE-FILE
Deleted item: DISASSEMBLE
25.2. Documentation
Deleted item: DOCUMENTATION
-- doc-type is as follows: variable, function, structure, type, setf
Comment: This function requires numerous spaces for storing documentation.
This is not so good for personal computers with small disk storage.
25.3. Debugging Tools
TRACE, UNTRACE, STEP, TIME, DESCRIBE, ED, APROPOS, APROPOS-LIST
Comment: Following functions should be defined.
GC ... Performs garbage collection.
EXIT ... Exit from lisp system if possible.
Deleted Items: INSPECT, ROOM, DRIBBLE
These functions are not so frequently used in debugging.
25.4. Environment Inquiries
25.4.1. Time Functions
GET-DECODED-TIME, INTERNAL-TIME-UNITS-PER-SECOND
GET-INTERNAL-RUN-TIME, GET-INTERNAL-REAL-TIME, SLEEP
Comment:
RUN-TIME and REAL-TIME may be equal on some kind of the system that can't
calculate CPU time only.
Deleted items:
GET-UNIVERSAL-TIME, DECODE-UNIVERSAL-TIME, ENCODE-UNIVERSAL-TIME
Functions related with universal time are deleted.
25.4.2. Other Environment Inquiries
LISP-IMPLEMENTATION-TYPE, LISP-IMPLEMENTATION-VERSION
SHOT-SITE-NAME, LONG-SITE-NAME, *FEATURES*
Comment:
If lisp read the return value of LISP-IMPLEMENTATION-VERSION, we want
reader return number.
Deleted items: MACHINE-TYPE, MACHINE-VERSION, MACHINE-INSTANCE
SOFTWARE-TYPE, SOFTWARE-VERSION
25.5. Identity Function
IDENTITY
Comment: This function is the default value of :KEY keyword parameter.