home *** CD-ROM | disk | FTP | other *** search
Text File | 1991-05-20 | 51.4 KB | 2,841 lines |
-
-
-
-
-
-
- XSCHEME: An Object-oriented Scheme
-
- Version 0.17
-
- (not yet updated for version 0.22 (BCB))
-
- March 2, 1989
-
-
- by
- David Michael Betz
- P.O. Box 144
- Peterborough, NH 03458
-
- (603) 924-4145 (home)
-
- Copyright (c) 1989, by David Michael Betz
- All Rights Reserved
- Permission is granted for unrestricted non-commercial use
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
- XSCHEME TABLE OF CONTENTS Page 2
-
-
- TABLE OF CONTENTS
-
- TABLE OF CONTENTS..................................2
- INTRODUCTION.......................................3
- A NOTE FROM THE AUTHOR.............................4
- EXPRESSIONS........................................5
- BINDING FORMS.....................................10
- SEQUENCING........................................11
- DELAYED EVALUATION................................12
- ITERATION.........................................13
- DEFINITIONS.......................................14
- LIST FUNCTIONS....................................15
- DESTRUCTIVE LIST FUNCTIONS........................17
- SYMBOL FUNCTIONS..................................18
- VECTOR FUNCTIONS..................................19
- ARRAY FUNCTIONS...................................20
- CONVERSION FUNCTIONS..............................21
- TYPE PREDICATES...................................22
- EQUALITY PREDICATES...............................25
- ARITHMETIC FUNCTIONS..............................26
- NUMERIC COMPARISON FUNCTIONS......................29
- BITWISE LOGICAL FUNCTIONS.........................30
- STRING FUNCTIONS..................................31
- STRING COMPARISON FUNCTIONS.......................32
- CHARACTER COMPARISON FUNCTIONS....................33
- INPUT/OUTPUT FUNCTIONS............................34
- OUTPUT CONTROL FUNCTIONS..........................36
- FILE I/O FUNCTIONS................................37
- CONTROL FEATURES..................................39
- ENVIRONMENT FUNCTIONS.............................40
- UTILITY FUNCTIONS.................................41
- SYSTEM FUNCTIONS..................................42
- OBJECT REPRESENTATIONS............................43
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
- XSCHEME INTRODUCTION Page 3
-
-
- XScheme is an implementation of the Scheme programming language
- with extensions to support object-oriented programming.
-
- There are currently implementations of XScheme running on the
- IBM-PC and clones under MS-DOS, on the Macintosh, the Atari-ST
- and the Amiga. It is completely written in the programming
- language 'C' and is easily extended with user written built-in
- functions and classes. It is available in source form to non-
- commercial users.
-
- This document is a brief description of XScheme. XScheme
- follows the "Revised^3 Report on the Algorithmic Language
- Scheme". It assumes some knowledge of Scheme or LISP and some
- understanding of the concepts of object-oriented programming.
-
- I recommend the book "Structure and Interpretation of Computer
- Programs" by Harold Abelson and Gerald Jay Sussman and published
- by The MIT Press and the McGraw-Hill Book Company for learning
- Scheme (and programming in general). You might also find "The
- Scheme Programming Language" by R. Kent Dybvig and "The Little
- Lisper" by Daniel P. Friedman and Matthias Felleisen to be
- helpful.
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
- XSCHEME A NOTE FROM THE AUTHOR Page 4
-
-
- A NOTE FROM THE AUTHOR
-
- If you have any problems with XScheme, feel free to contact me
- for help or advice. Please remember that since XScheme is
- available in source form in a high level language, many users
- have been making versions available on a variety of machines.
- If you call to report a problem with a specific version, I may
- not be able to help you if that version runs on a machine to
- which I don't have access. Please have the version number of
- the version that you are running readily accessible before
- calling me.
-
- If you find a bug in XScheme, first try to fix the bug yourself
- using the source code provided. If you are successful in fixing
- the bug, send the bug report along with the fix to me. If you
- don't have access to a C compiler or are unable to fix a bug,
- please send the bug report to me and I'll try to fix it.
-
- Any suggestions for improvements will be welcomed. Feel free to
- extend the language in whatever way suits your needs. However,
- PLEASE DO NOT RELEASE ENHANCED VERSIONS WITHOUT CHECKING WITH ME
- FIRST!! I would like to be the clearing house for new features
- added to XScheme. If you want to add features for your own
- personal use, go ahead. But, if you want to distribute your
- enhanced version, contact me first.
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
- XSCHEME EXPRESSIONS Page 5
-
-
- EXPRESSIONS
-
- <variable>
-
- An expression consisting of a variable is a variable
- reference. The value of the variable reference is the value
- stored in the location to which the variable is bound. It
- is an error to reference an unbound variable.
-
- (QUOTE <datum>)
- '<datum>
-
- (quote <datum>) evaluates to <datum>. <Datum> may be any
- external representation of a Scheme object. This notation
- is used to include literal constants in Scheme code. (quote
- <datum>) may be abbreviated as '<datum>. The two notations
- are equivalent in all respects.
-
- <constant>
-
- Numeric constants, string constants, character constants,
- and boolean constants evaluate "to themselves"; they need
- not be quoted.
-
- (<operator> <operand>...)
-
- A procedure call is written by simply enclosing in
- parentheses expressions for the procedure to be called and
- the arguments to be passed to it. The operator and operand
- expressions are evaluated and the resulting procedure is
- passed the resulting arguments.
-
- (<object> <selector> <operand>...)
-
- A message sending form is written by enclosing in
- parentheses expressions for the receiving object, the
- message selector, and the arguments to be passed to the
- method. The receiver, selector, and argument expressions
- are evaluated, the message selector is used to select an
- appropriate method to handle the message, and the resulting
- method is passed the resulting arguments.
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
- XSCHEME EXPRESSIONS Page 6
-
-
- (LAMBDA <formals> <body>)
-
- <Formals> should be a formal argument list as described
- below, and <body> should be a sequence of one or more
- expressions. A lambda expression evaluates to a procedure.
- The environment in effect when the lambda expression is
- evaluated is remembered as part of the procedure. When the
- procedure is later called with some actual arguments, the
- environment in which the lambda expression was evaluated
- will be extended by binding the variables in the formal
- argument list to fresh locations, the corresponding actual
- argument values will be stored in those locations, and the
- expressions in the body of the lambda expression will be
- evaluated sequentially in the extended environment. The
- result of the last expression in the body will be returned
- as the result of the procedure call.
-
- <Formals> should have the following form:
-
- (<var>... [#!OPTIONAL <ovar>...] [. <rvar>])
- or
- (<var>... [#!OPTIONAL <ovar>...] [#!REST <rvar>])
-
- where:
-
- <var> is a required argument
- <ovar> is an optional argument
- <rvar> is a "rest" argument
-
- There are three parts to a <formals> list. The first lists
- the required arguments of the procedure. All calls to the
- procedure must supply values for each of the required
- arguments. The second part lists the optional arguments of
- the procedure. An optional argument may be supplied in a
- call or omitted. If it is omitted, a special value is given
- to the argument that satisfies the default-object?
- predicate. This provides a way to test to see if an
- optional argument was provided in a call or omitted. The
- last part of the <formals> list gives the "rest" argument.
- This argument will be bound to the rest of the list of
- arguments supplied to a call after the required and optional
- arguments have been removed.
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
- XSCHEME EXPRESSIONS Page 7
-
-
- (IF <test> <consequent> [<alternate>])
-
- An if expression is evaluated as follows: first, <test> is
- evaluated. If it yields a true value, then <consequent> is
- evaluated and its value is returned. Otherwise, <alternate>
- is evaluated and its value is returned. If <test> yields a
- false value and no <alternate> is specified, then the result
- of the expression is unspecified.
-
- (ACCESS <variable> <env>)
-
- <Env> is evaluated producing an environment. The result is
- the value of <variable> in this environment.
-
- (SET! <variable> <expression>)
-
- <Expression> is evaluated, and the resulting value is stored
- in the location to which <variable> is bound. <Variable>
- must be bound in some region or at the top level. The result
- of the set! expression is unspecified.
-
- (SET! (ACCESS <variable> <env>) <value>)
-
- <Env> is evaluated producing an environment. <Value> is
- evaluated and the resulting value is stored as the value of
- <variable> in this environment. The result of the set!
- expression is unspecified.
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
- XSCHEME EXPRESSIONS Page 8
-
-
- (COND <clause>...)
-
- Each clause should be of the form
-
- (<test> <expression>...)
-
- where <test> is any expression. The last <clause> may be an
- "else clause," which has the form
-
- (ELSE <expression>...)
-
- A cond expression is evaluated by evaluating the <test>
- expressions of successive <clause>s in order until one of
- them evaluates to a true value. When a <test> evaluates to
- a true value, then the remaining <expression>s in its
- <clause> are evaluated in order, and the result of the last
- <expression> in the <clause> is returned as the result of
- the entire cond expression. If the selected <clause>
- contains only the <test> and no <expression>s, then the
- value of the <test> is returned as the result. If all
- <test>s evaluate to false values, and there is no else
- clause, then the result of the conditional expression is
- unspecified; if there is an else clause, then its
- <expression>s are evaluated, and the value of the last one
- is returned.
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
- XSCHEME EXPRESSIONS Page 9
-
-
- (AND <test>...)
-
- The <test> expressions are evaluated from left to right, and
- the value of the first expression that evaluates to a false
- value is returned. Any remaining expressions are not
- evaluated. If all the expressions evaluate to true values,
- the value of the last expression is returned. If there are
- no expressions then #t is returned.
-
- (OR <test>...)
-
- The <test> expressions are evaluated from left to right, and
- the value of the first expression that evaluates to a true
- value is returned. Any remaining expressions are not
- evaluated. If all expressions evaluate to false values, the
- value of the last expression is returned. If there are no
- expressions then #f is returned.
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
- XSCHEME BINDING FORMS Page 10
-
-
- BINDING FORMS
-
- (LET [<name>] <bindings> <body>)
-
- <Bindings> should have the form
-
- ((<variable> <init>)...)
-
- where each <init> is an expression, and <body> should be a
- sequence of one or more expressions. The <init>s are
- evaluated in the current envirnoment, the <variable>s are
- bound to fresh locations holding the results, the <body> is
- evaluated in the extended environment, and the value of the
- last expression of <body> is returned. Each binding of a
- <variable> has <body> as its region.
-
- If a name is supplied, a procedure that takes the bound
- variables as its arguments and has the body of the LET as
- its body is bound to that name.
-
- (LET* <bindings> <body>)
-
- Same as LET except that the bindings are done sequentially
- from left to right and the bindings to the left are visible
- while evaluating the initialization expressions for each
- variable.
-
- (LETREC <bindings> <body>)
-
- <Bindings> should have the form
-
- ((<variable> <init>)...)
-
- and <body> should be a sequence of one or more expressions.
- The <variable>s are bound to fresh locations holding
- undefined values; the <init>s are evaluated in the resulting
- environment; each <variable> is assigned to the result of
- the corresponding <init>; the <body> is evaluated in the
- resulting environment; and the value of the last expression
- in <body> is returned. Each binding of a <variable> has the
- entire letrec expression as its region, making it possible
- to define mutually recursive procedures. One restriction of
- letrec is very important: it must be possible to evaluate
- each <init> without referring to the value of any
- <variable>. If this restriction is violated, then the
- effect is undefined, and an error may be signalled during
- evaluation of the <init>s. The restriction is necessary
- because Scheme passes arguments by value rather than by
- name. In the most common uses of letrec, all the <init>s
- are lambda expressions and the restriction is satisfied
- automatically.
-
-
-
-
-
-
-
-
-
-
-
-
- XSCHEME SEQUENCING Page 11
-
-
- SEQUENCING
-
- (BEGIN <expression>...)
- (SEQUENCE <expression>...)
-
- The <expression>s are evaluated sequentially from left
- to right, and the value of the last <expression> is
- returned. This expression type is used to sequence side
- effects such as input and output.
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
- XSCHEME DELAYED EVALUATION Page 12
-
-
- DELAYED EVALUATION
-
- (CONS-STREAM expr1 expr2)
-
- Create a cons stream whose head is expr1 (which is
- evaluated immediately) and whose tail is expr2 (whose
- evaluation is delayed until TAIL is called). To use
- CONS-STREAM, enter the following access procedures:
-
- (define head car)
- (define (tail stream) (force (cdr stream)))
-
- (DELAY <expression>)
-
- Evaluating this expression creates a "promise" to
- evaluate <expression> at a later time.
-
- (FORCE promise)
-
- Applying FORCE to a promise generated by DELAY requests
- that the promise produce the value of the expression
- passed to DELAY. The first time a promise is FORCEed,
- the DELAY expression is evaluated and the value stored.
- On subsequent calls to FORCE with the same promise, the
- saved value is returned.
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
- XSCHEME ITERATION Page 13
-
-
- ITERATION
-
- (WHILE <test> <expression>...)
-
- While is an iteration construct. Each iteration begins
- by evaluating <test>; if the result is false, then the
- loop terminates and the value of <test> is returned as
- the value of the while expression. If <test> evaluates
- to a true value, then the <expression>s are evaluated in
- order for effect and the next iteration begins.
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
- XSCHEME DEFINITIONS Page 14
-
-
- DEFINITIONS
-
- (DEFINE <variable> <expression>)
-
- Define a variable and give it an initial value.
-
- (DEFINE (<variable> <formals>) <body>)
-
- Define a procedure.
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
- XSCHEME LIST FUNCTIONS Page 15
-
-
- LIST FUNCTIONS
-
- (CONS expr1 expr2)
-
- Create a new pair whose car is expr1 and whose cdr is
- expr2.
-
- (CAR pair)
-
- Extract the car of a pair.
-
- (CDR pair)
-
- Extract the cdr of a pair.
-
- (CxxR pair)
- (CxxxR pair)
- (CxxxxR pair)
-
- These functions are short for combinations of CAR and
- CDR. Each 'x' is stands for either 'A' or 'D'. An 'A'
- stands for the CAR function and a 'D' stands for the CDR
- function. For instance, (CADR x) is the same as (CAR
- (CDR x)).
-
- (LIST expr...)
-
- Create a list whose elements are the arguments to the
- function. This function can take an arbitrary number of
- arguments. Passing no arguments results in the empty
- list.
-
- (APPEND list...)
-
- Append lists to form a single list. This function takes
- an arbitrary number of arguments. Passing no arguments
- results in the empty list.
-
- (REVERSE list)
-
- Create a list whose elements are the same as the
- argument except in reverse order.
-
- (LAST-PAIR list)
-
- Return the last pair in a list.
-
- (LENGTH list)
-
- Compute the length of a list.
-
-
-
-
-
-
-
-
-
-
-
-
-
- XSCHEME LIST FUNCTIONS Page 16
-
-
- (MEMBER expr list)
- (MEMV expr list)
- (MEMQ expr list)
-
- Find an element in a list. Each of these functions
- searches the list looking for an element that matches
- expr. If a matching element is found, the remainder of
- the list starting with that element is returned. If no
- matching element is found, the empty list is returned.
- The functions differ in the test used to determine if an
- element matches expr. The MEMBER function uses EQUAL?,
- the MEMV function uses EQV? and the MEMQ function uses
- EQ?.
-
- (ASSOC expr alist)
- (ASSV expr alist)
- (ASSQ expr alist)
-
- Find an entry in an association list. An association
- list is a list of pairs. The car of each pair is the
- key and the cdr is the value. These functions search an
- association list for a pair whose key matches expr. If
- a matching pair is found, it is returned. Otherwise,
- the empty list is returned. The functions differ in the
- test used to determine if a key matches expr. The ASSOC
- function uses EQUAL?, the ASSV function uses EQV? and
- the ASSQ function uses EQ?.
-
- (LIST-REF list n)
-
- Return the nth element of a list (zero based).
-
- (LIST-TAIL list n)
-
- Return the sublist obtained by removing the first n
- elements of list.
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
- XSCHEME DESTRUCTIVE LIST FUNCTIONS Page 17
-
-
- DESTRUCTIVE LIST FUNCTIONS
-
- (SET-CAR! pair expr)
-
- Set the car of a pair to expr. The value returned by
- this procedure is unspecified.
-
- (SET-CDR! pair expr)
-
- Set the cdr of a pair to expr. The value returned by
- this procedure is unspecified.
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
- XSCHEME SYMBOL FUNCTIONS Page 18
-
-
- SYMBOL FUNCTIONS
-
- (BOUND? sym)
-
- Returns #t if a global value is bound to the symbol and
- #f otherwise.
-
- (SYMBOL-VALUE sym)
-
- Get the global value of a symbol.
-
- (SET-SYMBOL-VALUE! sym expr)
-
- Set the global value of a symbol. The value returned by
- this procedure is unspecified.
-
- (SYMBOL-PLIST sym)
-
- Get the property list associated with a symbol.
-
- (SET-SYMBOL-PLIST! sym plist)
-
- Set the property list associate with a symbol. The
- value returned by this procedure is unspecified.
-
- (GENSYM [sym|str|num])
-
- Generate a new, uninterned symbol. The print name of
- the symbol will consist of a prefix with a number
- appended. The initial prefix is "G" and the initial
- number is 1. If a symbol is specified as an argument,
- the prefix is set to the print name of that symbol. If
- a string is specified, the prefix is set to that string.
- If a number is specified, the numeric suffix is set to
- that number. After the symbol is generated, the number
- is incremented so subsequent calls to GENSYM will
- generate numbers in sequence.
-
- (GET sym prop)
-
- Get the value of a property of a symbol. The prop
- argument is a symbol that is the property name. If a
- property with that name exists on the symbols property
- list, the value of the property is returned. Otherwise,
- the empty list is returned.
-
- (PUT sym prop expr)
-
- Set the value of a property of a symbol. The prop
- argument is a symbol that is the property name. The
- property/value combination is added to the property list
- of the symbol.
-
-
-
-
-
-
-
-
-
-
-
- XSCHEME VECTOR FUNCTIONS Page 19
-
-
- VECTOR FUNCTIONS
-
- (VECTOR expr...)
-
- Create a vector whose elements are the arguments to the
- function. This function can take an arbitrary number of
- arguments. Passing no arguments results in a zero
- length vector.
-
- (MAKE-VECTOR len)
-
- Make a vector of the specified length.
-
- (VECTOR-LENGTH vect)
-
- Get the length of a vector.
-
- (VECTOR-REF vect n)
-
- Return the nth element of a vector (zero based).
-
- (VECTOR-SET! vect n expr)
-
- Set the nth element of a vector (zero based).
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
- XSCHEME ARRAY FUNCTIONS Page 20
-
-
- ARRAY FUNCTIONS
-
- (MAKE-ARRAY d1 d2...)
-
- Make an array (vector of vectors) with the specified
- dimensions. At least one dimension must be specified.
-
- (ARRAY-REF array s1 s2...)
-
- Get an array element. The sn arguments are integer
- subscripts (zero based).
-
- (ARRAY-SET! array s1 s2... expr)
-
- Set an array element. The sn arguments are integer
- subscripts (zero based).
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
- XSCHEME CONVERSION FUNCTIONS Page 21
-
-
- CONVERSION FUNCTIONS
-
- (SYMBOL->STRING sym)
-
- Convert a symbol to a string. Returns the print name of
- the symbol as a string.
-
- (STRING->SYMBOL str)
-
- Convert a string to a symbol. Returns a symbol with the
- string as its print name. This can either be a new
- symbol or an existing one with the same print name.
-
- (VECTOR->LIST vect)
-
- Convert a vector to a list. Returns a list of the
- elements of the vector.
-
- (LIST->VECTOR list)
-
- Convert a list to a vector. Returns a vector of the
- elements of the list.
-
- (STRING->LIST str)
-
- Convert a string to a list. Returns a list of the
- characters in the string.
-
- (LIST->STRING list)
-
- Convert a list of character to a string. Returns a
- string whose characters are the elements of the list.
-
- (CHAR->INTEGER char)
-
- Convert a character to an integer. Returns the ASCII
- code of the character as an integer.
-
- (INTEGER->CHAR n)
-
- Convert an integer ASCII code to a character. Returns
- the character whose ASCII code is the integer.
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
- XSCHEME TYPE PREDICATES Page 22
-
-
- TYPE PREDICATE FUNCTIONS
-
- (NOT expr)
-
- Returns #t if the expression is #f and #t otherwise.
-
- (NULL? expr)
-
- Returns #t if the expression is the empty list and #f
- otherwise.
-
- (ATOM? expr)
-
- Returns #f if the expression is a pair and #t otherwise.
-
- (LIST? expr)
-
- Returns #t if the expression is either a pair or the
- empty list and #f otherwise.
-
- (NUMBER? expr)
-
- Returns #t if the expression is a number and #f
- otherwise.
-
- (BOOLEAN? expr)
-
- Returns #t if the expression is either #t or #f and #f
- otherwise.
-
- (PAIR? expr)
-
- Returns #t if the expression is a pair and #f otherwise.
-
- (SYMBOL? expr)
-
- Returns #t if the expression is a symbol and #f
- otherwise.
-
- (COMPLEX? expr)
-
- Returns #t if the expression is a complex number and #f
- otherwise.
- Note: Complex numbers are not yet supported by XScheme.
-
- (REAL? expr)
-
- Returns #t if the expression is a real number and #f
- otherwise.
-
-
-
-
-
-
-
-
-
-
-
-
-
-
- XSCHEME TYPE PREDICATES Page 23
-
-
- (RATIONAL? expr)
-
- Returns #t if the expression is a rational number and #f
- otherwise.
- Note: Rational numbers are not yet supported by
- XScheme.
-
- (INTEGER? expr)
-
- Returns #t if the expression is an integer and #f
- otherwise.
-
- (CHAR? expr)
-
- Returns #t if the expression is a character and #f
- otherwise.
-
- (STRING? expr)
-
- Returns # if the expression is a string and #f
- otherwise.
-
- (VECTOR? expr)
-
- Returns #t if the expression is a vector and #f
- otherwise.
-
- (PROCEDURE? expr)
-
- Returns #t if the expression is a procedure (closure)
- and #f otherwise.
-
- (PORT? expr)
-
- Returns #t if the expression is a port and #f otherwise.
-
- (INPUT-PORT? expr)
-
- Returns #t if the expression is an input port and #f
- otherwise.
-
- (OUTPUT-PORT? expr)
-
- Returns #t if the expression is an output port and #f
- otherwise.
-
- (OBJECT? expr)
-
- Returns #t if the expression is an object and #f
- otherwise.
-
-
-
-
-
-
-
-
-
-
-
-
-
- XSCHEME TYPE PREDICATES Page 24
-
-
- (EOF-OBJECT? expr)
-
- Returns #t if the expression is the object returned by
- READ upon detecting an end of file condition and #f
- otherwise.
-
- (DEFAULT-OBJECT? expr)
-
- Returns #t if the expression is the object passed as the
- default value of an optional parameter to a procedure
- when that parameter is omitted from a call and #f
- otherwise.
-
- (ENVIRONMENT? x)
-
- Returns #t if the expression is an environment and #f
- otherwise.
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
- XSCHEME EQUALITY PREDICATES Page 25
-
-
- EQUALITY PREDICATES
-
- (EQUAL? expr1 expr2)
-
- Recursively compares two objects to determine if their
- components are the same and returns #t if they are the
- same and #f otherwise.
-
- (EQV? expr1 expr2)
-
- Compares two objects to determine if they are the same
- object. Returns #t if they are the same and #f
- otherwise. This function does not compare the elements
- of lists, vectors or strings but will compare all types
- of numbers.
-
- (EQ? expr1 expr2)
-
- Compares two objects to determine if they are the same
- object. Returns #t if they are the same and #f
- otherwise. This function performs a low level address
- compare on two objects and may return #f for objects
- that appear on the surface to be the same. This is
- because the objects are not stored uniquely in memory.
- For instance, numbers may appear to be equal, but EQ?
- will return #f when comparing them if they are stored at
- different addresses. The advantage of this function is
- that it is faster than the others. Symbols are
- guaranteed to compare correctly, so EQ? can safely be
- used to compare them.
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
- XSCHEME ARITHMETIC FUNCTIONS Page 26
-
-
- ARITHMETIC FUNCTIONS
-
- (ZERO? n)
-
- Returns #t if the number is zero and #f otherwise.
-
- (POSITIVE? n)
-
- Returns #t if the number is positive and #f otherwise.
-
- (NEGATIVE? n)
-
- Returns #t if the number is negative and #f otherwise.
-
- (ODD? n)
-
- Returns #t if the integer is odd and #f otherwise.
-
- (EVEN? n)
-
- Returns #t if the integer is even and #f otherwise.
-
- (EXACT? n)
-
- Returns #t if the number is exact and #f otherwise.
- Note: This function always returns #f in XScheme since
- exact numbers are not yet supported.
-
- (INEXACT? n)
-
- Returns #t if the number is inexact and #f otherwise.
- Note: This function always returns #t in XScheme since
- exact numbers are not yet supported.
-
- (TRUNCATE n)
-
- Truncates a number to an integer and returns the
- resulting value.
-
- (FLOOR n)
-
- Returns the largest integer not larger than n.
-
- (CEILING n)
-
- Returns the smallest integer not smaller than n.
-
- (ROUND n)
-
- Returns the closest integer to n, rounding to even when
- n is halfway between two integers.
-
- (1+ n)
-
-
-
-
-
-
-
-
-
-
- XSCHEME ARITHMETIC FUNCTIONS Page 27
-
-
- Returns the result of adding one to the number.
-
- (-1+ n)
-
- Returns the result of subtracting one from the number.
-
- (ABS n)
-
- Returns the absolute value of the number.
-
- (GCD n1 n2)
-
- Returns the greatest common divisor of the two numbers.
-
- (RANDOM n)
-
- Returns a random number between zero and n-1 (n must be
- an integer).
-
- (+ n1 n2...)
-
- Returns the sum of the numbers.
-
- (- n)
-
- Negates the number and returns the resulting value.
-
- (- n1 n2...)
-
- Subtracts each remaining number from n1 and returns the
- resulting value.
-
- (* n1 n2...)
-
- Multiples the numbers and returns the resulting value.
-
- (/ n)
-
- Returns 1/n.
-
- (/ n1 n2...)
-
- Divides n1 by each of the remaining numbers and returns
- the resulting value.
-
- (QUOTIENT n1 n2...)
-
- Divides the integer n1 by each of the remaining numbers
- and returns the resulting integer quotient. This
- function does integer division.
-
- (REMAINDER n1 n2)
-
- Divides the integer n1 by the integer n2 and returns the
-
-
-
-
-
-
-
-
-
- XSCHEME ARITHMETIC FUNCTIONS Page 28
-
-
- remainder.
-
- (MIN n1 n2...)
-
- Returns the number with the minimum value.
-
- (MAX n1 n2...)
-
- Returns the number with the maximum value.
-
- (SIN n)
-
- Returns the sine of the number.
-
- (COS n)
-
- Returns the cosine of the number.
-
- (TAN n)
-
- Returns the tangent of the number.
-
- (ASIN n)
-
- Returns the arc-sine of the number.
-
- (ACOS n)
-
- Returns the arc-cosine of the number.
-
- (ATAN x)
-
- Returns the arc-tangent of x.
-
- (ATAN y x)
-
- Returns the arc-tangent of y/x.
-
- (EXP n)
-
- Returns e raised to the n.
-
- (SQRT n)
-
- Returns the square root of n.
-
- (EXPT n1 n2)
-
- Returns n1 raised to the n2 power.
-
- (LOG n)
-
- Returns the natural logarithm of n.
-
-
-
-
-
-
-
-
-
-
- XSCHEME NUMERIC COMPARISON FUNCTIONS Page 29
-
-
- NUMERIC COMPARISON FUNCTIONS
-
- (< n1 n2...)
- (= n1 n2...)
- (> n1 n2...)
- <<= n1 n2...)
- (>= n1 n2...)
-
- These functions compare numbers and return #t if the
- numbers match the predicate and #f otherwise. For
- instance, (< x y z) will return #t if x is less than y
- and y is less than z.
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
- XSCHEME BITWISE LOGICAL FUNCTIONS Page 30
-
-
- BITWISE LOGICAL FUNCTIONS
-
- (LOGAND n1 n2...)
-
- Returns the bitwise AND of the integer arguments.
-
- (LOGIOR n1 n2...)
-
- Returns the bitwise inclusive OR of the integer
- arguments.
-
- (LOGXOR n1 n2...)
-
- Returns the bitwise exclusive OR of the integer
- arguments.
-
- (LOGNOT n)
-
- Returns the bitwise complement of n.
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
- XSCHEME STRING FUNCTIONS Page 31
-
-
- STRING FUNCTIONS
-
- (STRING-LENGTH str)
-
- Returns the length of the string.
-
- (STRING-NULL? str)
-
- Returns #t if the string has a length of zero and #f
- otherwise.
-
- (STRING-APPEND str1...)
-
- Returns the result of appending the string arguments.
- If no arguments are supplied, it returns the null
- string.
-
- (STRING-REF str n)
-
- Returns the nth character in a string.
-
- (SUBSTRING str start end)
-
- Returns the substring of str starting at start and
- ending at end (integers). The range is inclusive of
- start and exclusive of end.
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
- XSCHEME STRING COMPARISON FUNCTIONS Page 32
-
-
- STRING COMPARISON FUNCTIONS
-
- (STRING<? str1 str2)
- (STRING=? str1 str2)
- (STRING>? str1 str2)
- (STRING<=? str1 str2)
- (STRING>=? str1 str2)
-
- These functions compare strings and return #t if the
- strings match the predicate and #f otherwise. For
- instance, (STRING< x y) will return #t if x is less than
- y. Case is significant. #A does not match #a.
-
- (STRING-CI<? str1 str2)
- (STRING-CI=? str1 str2)
- (STRING-CI>? str1 str2)
- (STRING-CI<=? str1 str2)
- (STRING-CI>=? str1 str2)
-
- These functions compare strings and return #t if the
- strings match the predicate and #f otherwise. For
- instance, (STRING-CI< x y) will return #t if x is less
- than y. Case is not significant. #A matches #a.
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
- XSCHEME CHARACTER COMPARISON FUNCTIONS Page 33
-
-
- CHARACTER COMPARISON FUNCTIONS
-
- (CHAR<? ch1 ch2)
- (CHAR=? ch1 ch2)
- (CHAR>? ch1 ch2)
- (CHAR<=? ch1 ch2)
- (CHAR>=? ch1 ch2)
-
- These functions compare characters and return #t if the
- characters match the predicate and #f otherwise. For
- instance, (CHAR< x y) will return #t if x is less than
- y. Case is significant. #A does not match #a.
-
- (CHAR-CI<? ch1 ch2)
- (CHAR-CI=? ch1 ch2)
- (CHAR-CI>? ch1 ch2)
- (CHAR-CI<=? ch1 ch2)
- (CHAR-CI>=? ch1 ch2)
-
- These functions compare characters and return #t if the
- characters match the predicate and #f otherwise. For
- instance, (CHAR-CI< x y) will return #t if x is less
- than y. Case is not significant. #A matchs #a.
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
- XSCHEME INPUT/OUTPUT FUNCTIONS Page 34
-
-
- INPUT/OUTPUT FUNCTIONS
-
- (READ [port])
-
- Reads an expression from the specified port. If no port
- is specified, the current input port is used. Returns
- the expression read or an object that satisfies the
- default-object? predicate if it reaches the end of file
- on the port.
-
- (READ-CHAR [port])
-
- Reads a character from the specified port. If no port
- is specified, the current input port is used. Returns
- the character read or an object that satisfies the
- default-object? predicate if it reaches the end of file
- on the port.
-
- (READ-BYTE [port])
-
- Reads a byte from the specified port. If no port is
- specified, the current input port is used. Returns the
- byte read or an object that satisfies the default-
- object? predicate if it reaches the end of file on the
- port.
-
- (WRITE expr [port])
- (PRIN1 expr [port])
-
- Writes an expression to the specified port. If no port
- is specified, the current output port is used. The
- expression is written such that the READ function can
- read it back. This means that strings will be enclosed
- in quotes and characters will be printed with #
- notation.
-
- (WRITE-CHAR ch [port])
-
- Writes a character to the specified port. If no port is
- specified, the current output port is used.
-
- (WRITE-BYTE ch [port])
-
- Writes a byte to the specified port. If no port is
- specified, the current output port is used.
-
- (DISPLAY expr [port])
- (PRINC expr [port])
-
- Writes an expression to the specified port. If no port
- is specified, the current output port is used. The
- expression is written without any quoting characters.
- No quotes will appear around strings and characters are
- written without the # notation.
-
-
-
-
-
-
-
-
-
- XSCHEME INPUT/OUTPUT FUNCTIONS Page 35
-
-
- (NEWLINE [port])
-
- Starts a new line on the specified port. If no port is
- specified, the current output port is used.
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
- XSCHEME OUTPUT CONTROL FUNCTIONS Page 36
-
-
- OUTPUT CONTROL FUNCTIONS
-
- (PRINT-BREADTH [n])
-
- Controls the maximum number of elements of a list that
- will be printed. If n is an integer, the maximum number
- is set to n. If it is #f, the limit is set to infinity.
- This is the default. If n is omitted from the call, the
- current value is returned.
-
- (PRINT-DEPTH [n])
-
- Controls the maximum number of levels of a nested list
- that will be printed. If n is an integer, the maximum
- number is set to n. If it is #f, the limit is set to
- infinity. This is the default. If n is omitted from
- the call, the current value is returned.
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
- XSCHEME FILE I/O FUNCTIONS Page 37
-
-
- FILE I/O FUNCTIONS
-
- All four of the following OPEN functions take an optional
- argument to indicate that file I/O is to be done in binary
- mode. For binary files, this argument should be the symbol
- BINARY. For text files, the argument can be left out or the
- symbol TEXT can be supplied.
-
- (OPEN-INPUT-FILE str ['binary])
-
- Opens the file named by the string and returns an input
- port.
-
- (OPEN-OUTPUT-FILE str ['binary])
-
- Creates the file named by the string and returns an
- output port.
-
- (OPEN-APPEND-FILE str ['binary])
-
- Opens the file named by the string for appending returns
- an output port.
-
- (OPEN-UPDATE-FILE str ['binary])
-
- Opens the file named by the string for input and output
- and returns an input/output port.
-
- (GET-FILE-POSITION port)
-
- Returns the current file position as an offset in bytes
- from the beginning of the file.
-
- (SET-FILE-POSITION! port offset whence)
-
- Sets the current file position as an offset in bytes
- from the beginning of the file (when whence equals 0),
- the current file position (when whence equals 1) or the
- end of the file (when whence equals 2). Returns the new
- file position as an offset from the start of the file.
-
- (CLOSE-PORT port)
-
- Closes any port.
-
- (CLOSE-INPUT-PORT port)
-
- Closes an input port.
-
- (CLOSE-OUTPUT-PORT port)
-
- Closes an output port.
-
-
-
-
-
-
-
-
-
-
-
- XSCHEME FILE I/O FUNCTIONS Page 38
-
-
- (CALL-WITH-INPUT-FILE str proc)
-
- Open the file whose name is specifed by str and call
- proc passing the resulting input port as an argument.
- When proc returns, close the file and return the value
- returned by proc as the result.
-
- (CALL-WITH-OUTPUT-FILE str proc)
-
- Create the file whose name is specifed by str and call
- proc passing the resulting output port as an argument.
- When proc returns, close the file and return the value
- returned by proc as the result.
-
- (CURRENT-INPUT-PORT)
-
- Returns the current input port.
-
- (CURRENT-OUTPUT-PORT)
-
- Returns the current output port.
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
- XSCHEME CONTROL FEATURES Page 39
-
-
- CONTROL FEATURES
-
- (EVAL expr)
-
- Evaluate the expression in the global environment and
- return its value.
-
- (APPLY proc args)
-
- Apply the procedure to the list of arguments and return
- the result.
-
- (MAP proc list...)
-
- Apply the procedure to argument lists formed by taking
- corresponding elements from each list. Form a list from
- the resulting values and return that list as the result
- of the MAP call.
-
- (FOR-EACH fun list...)
-
- Apply the procedure to argument lists formed by taking
- corresponding elements from each list. The values
- returned by the procedure applications are discarded.
- The value returned by FOR-EACH is unspecified.
-
- (CALL-WITH-CURRENT-CONTINUATION proc)
- (CALL/CC proc)
-
- Form an "escape procedure" from the current continuation
- and pass it as an argument to proc. Calling the escape
- procedure with a single argument will cause that
- argument to be passed to the continuation that was in
- effect when the CALL-WITH-CURRENT-CONTINUATION procedure
- was called.
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
- XSCHEME ENVIRONMENT FUNCTIONS Page 40
-
-
- ENVIRONMENT FUNCTIONS
-
- (THE-ENVIRONMENT)
-
- Returns the current environment.
-
- (PROCEDURE-ENVIRONMENT proc)
-
- Returns the environment from a procedure closure.
-
- (ENVIRONMENT-BINDINGS env)
-
- Returns an association list corresponding to the top
- most frame of the specified environment.
-
- (ENVIRONMENT-PARENT env)
-
- Returns the parent environment of the specified
- environment.
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
- XSCHEME UTILITY FUNCTIONS Page 41
-
-
- UTILITY FUNCTIONS
-
- (LOAD str)
-
- Read and evaluate each expression from the specified
- file.
-
- (LOAD-NOISILY str)
-
- Read and evaluate each expression from the specified
- file and print the results to the current output port.
-
- (TRANSCRIPT-ON str)
-
- Opens a transcript file with the specified name and
- begins logging the interactive session to that file.
-
- (TRANSCRIPT-OFF)
-
- Closes the current transcript file.
-
- (EXIT)
-
- Exits from XScheme back to the operating system.
-
- (GC [ni vi])
-
- Invokes the garbage collector and returns information on
- memory usage. If ni and vi are specified, they must be
- integers. Node and vector space are expanded by those
- amounts respectively and no garbage collection is
- triggered. GC returns an array of six values: the
- number of calls to the garbage collector, the total
- number of nodes, the current number of free nodes, the
- number of node segments, the number of vector segments
- and the total number of bytes allocated to the heap.
-
- (RESET)
-
- Returns to the top level read/eval/print loop.
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
- XSCHEME SYSTEM FUNCTIONS Page 42
-
-
- SYSTEM FUNCTIONS
-
- (%CAR pair)
- (%CDR pair)
- (%SET-CAR! pair expr)
- (%SET-CDR! pair expr)
- (%VECTOR-LENGTH vect)
- (%VECTOR-REF vect n)
- (%VECTOR-SET! vect n expr)
-
- These functions do the same as their counterparts
- without the leading '%' character. The difference is
- that they don't check the type of their first argument.
- This makes it possible to examine data structures that
- have the same internal representation as pairs and
- vectors. It is *very* dangerous to modify objects using
- these functions and there is no guarantee that future
- releases of XScheme will represent objects in the same
- way that the current version does.
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
- XSCHEME OBJECT REPRESENTATIONS Page 43
-
-
- OBJECT REPRESENTATIONS
-
- This version of XScheme uses the following object
- representations:
-
- Closures are represented as pairs. The car of the
- pair is the compiled function and the cdr of the
- pair is the saved environment.
-
- Compiled functions are represented as vectors. The
- element at offset 0 is the bytecode string. The
- element at offset 1 is the function name. The
- element at offset 2 is a list of names of the
- function arguments. The elements at offsets above 2
- are the literals refered to by the compiled
- bytecodes.
-
- Environments are represented as lists of vectors.
- Each vector is an environment frame. The element at
- offset 0 is a list of the symbols that are bound in
- that frame. The symbol values start at offset 1.
-
- Objects are represented as vectors. The element at
- offset 0 is the class of the object. The remaining
- elements are the object's instance variable values.
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-