[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]

*To*: scheme%mit-mc.arpa@csnet-relay.arpa*Subject*: feature list for workshop (long message)*From*: Will Clinger <willc%indiana.csnet@csnet-relay.arpa>*Date*: Mon, 15 Oct 84 20:30:54 est

List of features to be considered at the workshop. For each of the following features (e.g. special forms, data types, and procedures) should the feature be essential -- every implementation of Scheme must have it. Programs written in Essential Scheme will run on any implementation of Scheme worthy of the name. optional -- not every implementation of Scheme will have it, but all implementations that have the feature will use the same syntax and semantics for the feature. Code that makes use of optional features will run on any implementation of Scheme that supplies the optional features. extended -- not every implementation of Scheme will have it, and the feature's syntax and semantics may vary even among implementations that have the feature. Code that makes use of extended features is not portable. (E.g. at the moment input and output is an extended feature.) ---------------------------------------------------------------- Lexical features The space character is a whitespace character. The tab character is a whitespace character. The newline character is a whitespace character. The carriage return character is a whitespace character. The line feed character is a whitespace character. The form feed character is a whitespace character. Any whitespace character is a delimiter. Left parenthesis is a delimiter. Right parenthesis is a delimiter. Left bracket is a delimiter. Right bracket is a delimiter. Left curly brace is a delimiter. Left parenthesis is a delimiter. Right curly brace is a delimiter. Semicolon is a delimiter. Single quote is a delimiter. Double quote is a delimiter. Backquote is a delimiter. End of file is a delimiter. Backslash is an escape character. Lists are opened by left parentheses and closed by right parentheses. When notating lists, matching left and right brackets are stylistic alternatives to matching left and right parentheses. Conses may be notated as (x . y), where y is any object. Possibly improper lists may be notated as (... x . y). Strings are delimited by double quotes. Double quotes may be included inside strings by escaping them. Quote marks have the meanings we have grown to know and love. Backquote and comma work as we are accustomed. With a backquoted list, comma at-sign works as we are accustomed. Comments are opened by semicolons and closed by end of line characters. Sharp sign macros are introduced by a sharp sign. Unreadable objects are printed using sharp sign notation. (We need to agree whether the notation is #{...} or #<...>.) Vectors may be written using sharp sign notation. (We need to agree whether the notation is #(...) or something else.) Binary numbers may be written using the #b notation. Octal numbers may be written using the #o notation. Decimal numbers may be written using the #d notation. Hexadecimal numbers may be written using the #x notation. Special characters may be written using the #\ notation. (We need to agree on the names for the special characters using this notation.) Miscellaneous objects may be written using the #[...] syntax. Miscellaneous objects may be written using the #! syntax. Integers may be written in the usual way, with or without signs. Floating point numbers may be written using decimal points. (We need to agree on the notation.) Floating point numbers may be written using exponents. (We need to agree on the notation.) Symbols may be written as sequences of characters that contain no special characters and begin with a character that cannot begin a number. Sequences of characters containing no special characters are interpreted as numbers if possible; if not possible they are interpreted as symbols. When the 26 letters of the alphabet are used to write a symbol, case is immaterial unless the letter is slashified. ---------------------------------------------------------------- Special variables (constants?) nil evaluates to the empty list. nil evaluates to some false value. t evaluates to some true value. else evaluates to some true value. ---------------------------------------------------------------- Special forms quote lambda (with a proper list of bound variables) lambda (with a symbol in place of a list of bound variables) lambda (with a possibly improper list of bound variables) lambda (with destructuring -- we need to agree on pattern syntax) mulambda let let* labels or letrec rec named-lambda if cond case and or conjunction or or disjunction locale make-environment the-environment access defrec (such that (defrec i e) means (define i (rec i e))) define (with what semantics?) set or set! do or step iterate block or sequence or begin block0 or begin0 catch (with dynamic extent restriction) catch (without dynamic extent restriction) throw delay (memoized) force (memoized) freeze (not memoized) thaw (not memoized) locative fluid-lambda fluid fluid-set! fluid-let or bind fluid-bound? dynamic-wind unwind-protect define-constant define-integrable define-syntax or ... ---------------------------------------------------------------- Data types The essential data types are disjoint. There is an object nil that represents false and the empty list. Procedures are a kind of object. Numbers are a kind of object. Symbols are a kind of object. Pairs (conses?) are a kind of object. Structures are a kind of object. Characters are a kind of object. Strings are a kind of object. Vectors are a kind of object. Bytevectors are a kind of object. Streams (channels? ports?) are a kind of object. Locales (environments?) are a kind of object. Syntax tables are a kind of object. Macros are a kind of object. Locatives (refs?) are a kind of object. ---------------------------------------------------------------- Procedures NULL? NULL? null? null? NIL? NOT NOT not not PROCEDURE? APPLICABLE? procedure? proc? APPLY APPLY apply apply call-with-current-continuation call/cc NUMBER? NUMBER? number? number? INTEGER? INTEGER? fix? RATIO? FLOAT? float? ODD? ODD? EVEN? EVEN? 1+ 1+ 1+ ADD1 add1 add1 -1+ -1+ 1- SUBTRACT1 sub1 sub1 + (...) + (...) + (2) + (2) plus (...) - (2) - (...) - (2) - (2) - (1) -- (1) minus (1) * (...) * (...) * (2) * (2) times (...) / / (...) / DIV QUOTIENT / / REMAINDER REMAINDER remainder remainder MOD INTEGER-DIVIDE ABS ABS abs abs GCD GCD MIN (...) MIN (...) min (...) min (...) MAX (...) MAX (...) max (...) max (...) random (1) random (1) = = =? = EQUAL? < < <? < LESS? > > >? > GREATER? N= NOT-EQUAL? >= >= >=? >= NOT-LESS? <= <= <=? <= NOT-GREATER? =0? 0? =0 ZERO? ZERO? <0? <0 NEGATIVE? NEGATIVE? >0? >0 POSITIVE? POSITIVE? N=0? NOT-ZERO? >=0? NOT-NEGATIVE? <=0? NOT-POSITIVE? EXP EXP exp LOG LOG log EXPT EXPT expt SQRT SQRT sqrt SIN SIN sin COS COS cos TAN TAN tan ASIN arcsin ACOS arccos arctan ATAN2 ATAN LOGAND logand LOGIOR logior LOGXOR logxor LOGNOT lognot lsh rot ASH BIT-FIELD SET-BIT-FIELD ->INTEGER fix ->FLOAT float FLOOR CEILING TRUNCATE ROUND All trigonometric functions take their arguments in radians. SYMBOL? SYMBOL? symbol? symbol? EQ? EQ? eq? eq? NEQ? SYMBOL->STRING pname ascii symbol->ascii STRING->SYMBOL CONCATENATE-SYMBOL concat ALPHALESS? alphaless? alpha< EXPLODE explode IMPLODE implode GENERATE-SYMBOL GENERATE-UNINTERNED-SYMBOL gensym gensym PAIR? PAIR? cons? pair? (?) ATOM? ATOM? atom? atom? (?) LIST? PROPER-LIST? LIST? ALIKE? ALIKEQ? ALIKEV? EQUAL? equal? equal? CONS CONS cons cons LIST LIST list list CONS* LIST* COPY-LIST copy CAR CAR car car CDR CDR cdr cdr C....R C....R c..r c...r NTH LIST-REF nth NTHCDR LIST-TAIL NTH NTHCDR LAST LASTCDR LAST last-pair FIRST SECOND THIRD FOURTH FIFTH SIXTH SEVENTH EIGHTH SET-CAR! set-car! set-car! SET-CDR! set-cdr! set-cdr! LENGTH LENGTH length length APPEND (...) APPEND (>=2) append (2) append (>=2) APPEND! (...) append! (>=2) REVERSE REVERSE reverse reverse REVERSE! reverse! SUBLIST SUBST SUBSTQ SUBSTV subst COPY-TREE MEM? MEMQ? MEMQ memq memq MEMV MEMBER member member ASS ASSQ ASSQ assq assq ASSV ASSOC assoc assoc ANY? EVERY? DEL DELQ DEL! DELQ! delq! delete! MAP MAPCAR mapcar mapcar MAPCDR MAP! WALK MAPC mapc mapc WALKCDR TREE-HASH The car of nil is nil. The cdr of nil is nil. STRING? string? string? string-equal? ALPHALESS? alphaless? alpha< MAKE-STRING STRING-APPEND COPY-STRING CHAR->STRING LIST->STRING list-to-string STRING->LIST string-to-list STRING-LENGTH STRING-EMPTY? STRING-ELT NTHCHAR et cetera VECTOR? VECTOR? vector? vector-equal? MAKE-VECTOR VECTOR VECTOR-CONS vector-cons LIST->VECTOR list-to-vector VECTOR->LIST vector-to-list VECTOR-ELT VECTOR-REF vector-ref VREF VSET VECTOR-SET! vector-set! COPY-VECTOR VECTOR-FILL VECTOR-REPLACE VECTOR-LENGTH VECTOR-SIZE vector-length VECTOR-POS VECTOR-POSQ WALK-VECTOR ---------------------------------------------------------------- Input and output All input and output is routed through the stream to which certain distinguished variables are bound. There is a way to read an object from the standard input. There is a way to write objects to the standard output, with slashification. There is a way to write objects to the standard output, without slashification. There is a way to write a string to the standard output, without the double quotes. There is a way to write an end of line to the standard output. There is a way to read a character from the standard input. There is a way to peek at a character from the standard input. There is a way to write a character to the standard output. There is a way to open a file for input. There is a way to open a file for output. There is a way to close an open file. There is a way to test for end of file on an open input file. There is a way to test if an object that has been read is the end of file. There is a way to pretty print an object on the standard output. There is a way to pretty print some approximation to the definition of a procedure on the standard output. There is a way to generate a transcript file.

- Prev by Date:
**questions for workshop (long message)** - Next by Date:
**Revised invitation list** - Prev by thread:
**questions for workshop (long message)** - Next by thread:
**Revised invitation list** - Index(es):