diff options
Diffstat (limited to 'doc/sources/scheme-concepts.texi')
-rw-r--r-- | doc/sources/scheme-concepts.texi | 249 |
1 files changed, 0 insertions, 249 deletions
diff --git a/doc/sources/scheme-concepts.texi b/doc/sources/scheme-concepts.texi deleted file mode 100644 index 0e9ae6cf8..000000000 --- a/doc/sources/scheme-concepts.texi +++ /dev/null @@ -1,249 +0,0 @@ -@node Guile Scheme concepts -@chapter Guile Scheme concepts - -Most Scheme implementations go beyond what is specified in the R4RS -document @footnote{Remember? R4RS is the Revised^4 report on the -Algorithmic Language Scheme}, mostly because R4RS does not give -specifications (or even recommendations) regarding some issues that are -quite important in practical programming. - -Here is a list of how Guile implements some of these much-needed Scheme -extensions; other Scheme implementations do so quite similarly. - -@menu -* Scheme slang:: -* Read-eval-print loops:: -* Extra data types:: -* Miscellaneous features:: -@end menu - -@node Scheme slang -@section Scheme slang -@cindex slang - -Even if you read some of the nice books on Scheme, or the R4RS report, -you might not find some of the terms frequently used by Scheme hackers, -both in the manual and in the @url{news:comp.lang.scheme} newsgroup. - -Here is a glossary of some of the terms that make Scheme beginners and -intermediate users say ``huh?'' - -@table @strong -@item thunk -@cindex thunk -A Scheme procedure that takes no arguments. In this example, -@code{thunk} and @code{another-thunk} are both thunks: -@lisp -(define (thunk) - (display "Dude, I'm a thunk!") - (newline)) -(define another-thunk - (lambda () - (display "Me too!\n") - (newline))) -@end lisp - -@item closure -@cindex closure -A closure is a procedure. However, the term emphasizes the fact that a -Scheme procedure remembers (or @dfn{closes over}) the variables that -were visible when the @code{lambda} expression was -evaluated. - -In the example below, we might refer to @code{q} as a closure, because -it has closed over the value of @code{x}: -@lisp -(define p - (lambda (x) - (lambda (y) - (+ x y)))) -(define q (p 5.7)) - -(q 10) -@result{} 15.7 -@end lisp - -However, strictly speaking, every Scheme procedure is really a closure, -since it closes over the top-level environment. - -@item alist -@itemx association list - -@item plist -@itemx property list - -@end table - - -@node Read-eval-print loops -@section Read-eval-print loops -@cindex Read-eval-print loop -@cindex REPL - -To explicitly mention the Scheme read-eval-print loop (REPL) seems weird -because we are all accustomed to firing up an interpreter and having it -read and execute commands. - -But the REPL is not specified in R4RS; rather, it is proposed by the -Scheme Bible @cite{Structure and Interpretation of Computer Programs} -(also known as @emph{SICP}), and implemented in some form in all Scheme -interpreters. -@cindex Structure and Interpretation of Computer Programs -@cindex SICP - -[FIXME: Someone needs to tell me what needs to be said about Guile's -REPL.] - -@node Extra data types -@section Extra data types - -The fundamental Scheme data types specified in R4RS are @emph{numbers} -(both exact and inexact), @emph{characters}, @emph{strings}, -@emph{symbols}, @emph{vectors}, @emph{pairs} and @emph{lists} [FIXME: is -this complete?]. - -Many Scheme interpreters offer more types, and Guile is no exception. -Guile is based on Aubrey Jaffer's SCM interpreter, and thus inherits -@emph{uniform arrays}, [FIXME: any others? How about records?]. - -On top of that, Guile allows you to add extra types, but that is covered -in @ref{Adding types to Guile}. Here I will simply document all the -extra Scheme types shipped with Guile. - -@menu -* Conventional arrays:: -* Uniform arrays:: -* Bit vectors:: -* Complex numbers:: -@end menu - -@node Conventional arrays -@subsection Conventional arrays - -@node Uniform arrays -@subsection Uniform arrays -@cindex arrays - uniform - -The motivation for uniform arrays in Scheme is performance. A vector -provides a performance increase over lists when you want a fixed-size -indexable list. But the elements in a vector can be of different types, -and this makes for larger storage requirements and slightly lower -performance. - -A uniform array is similar to a vector, but all elements have to be of -the same type. - -arrays, uniform arrays, bit vectors: - -@deffn procedure array-fill ra fill -@end deffn -@deffn procedure serial-array-copy! src dst -@end deffn -@deffn procedure serial-array-map ra0 proc [lra] -@end deffn -@deffn procedure array-map ra0 proc [lra] -@end deffn -@deffn procedure array-for-each proc ra0 [lra] -@end deffn -@deffn procedure array-index-map! ra proc -@end deffn -@deffn procedure array-copy! src dst -@end deffn -@deffn procedure array-copy! src dst -@end deffn -@deffn procedure array-copy! src dst -@end deffn -@deffn procedure array-copy! src dst -@end deffn -@deffn procedure array-copy! src dst -@end deffn -@deffn procedure array? ra [prot] -@end deffn -@deffn procedure array-rank ra -@end deffn -@deffn procedure array-dimensions ra -@end deffn -@deffn procedure dimensions->uniform-array dims prot fill ... -@end deffn -@deffn procedure make-shared-array ra mapfunc dims ... -@end deffn -@deffn procedure transpose-array arg ... -@end deffn -@deffn procedure enclose-array axes ... -@end deffn -@deffn procedure array-in-bounds? arg ... -@end deffn -@deffn procedure array-ref ra arg .. -@end deffn -@deffn procedure uniform-vector-ref vec pos -@end deffn -@deffn procedure array-set! ra obj arg ... -@end deffn -@deffn procedure uniform-array-set1! ua obj arg -@end deffn -@deffn procedure array-contents ra [strict] -@end deffn -@deffn procedure uniform-array-read! ra [port-or-fd] [start] [end] -@end deffn -@deffn procedure uniform-array-write! ra [port-or-fd] [start] [end] -@end deffn -@deffn procedure bit-count item seq -@end deffn -@deffn procedure bit-position item v k -@end deffn -@deffn procedure bit-set! v kv obj -@end deffn -@deffn procedure bit-count* v kv obj -@end deffn -@deffn procedure bit-invert v -@end deffn -@deffn procedure array->list ra -@end deffn -@deffn procedure list->uniform-array ndim prot list -@end deffn -@deffn procedure array-prototype ra -@end deffn - -Uniform arrays can be written and read, but @code{read} won't recognize -them unless the optional @code{read-sharp} parameter is supplied, -e.g, -@smalllisp -(read port #t read-sharp) -@end smalllisp - -where @code{read-sharp} is the default procedure for parsing extended -sharp notations. - -Reading an array is not very efficient at present, since it's implemented -by reading a list and converting the list to an array. - -@c FIXME: must use @deftp, but its generation of TeX code is buggy. -@c Must fix it when TeXinfo gets fixed. -@deftp {Scheme type} {uniform array} - -@end deftp - -@node Bit vectors -@subsection Bit vectors - -@node Complex numbers -@subsection Complex numbers - -@c FIXME: must use @deftp, but its generation of TeX code is buggy. -@c Must fix it when TeXinfo gets fixed. -@deftp {Scheme type} complex -Standard complex numbers. -@end deftp - -@node Miscellaneous features -@section Miscellaneous features - -@defun defined? symbol -Returns @code{#t} if a symbol is bound to a value, @code{#f} otherwise. -This kind of procedure is not specified in R4RS because @c FIXME: finish -this thought -@end defun - -@defun object-properties OBJ -and so forth -@end defun |