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.