From 7c6b93f531566c06281691127ee896c7b8a03c85 Mon Sep 17 00:00:00 2001 From: Matthew Flatt Date: Fri, 18 Jul 2008 19:00:38 +0000 Subject: [PATCH] eopl doc updates svn: r10834 --- collects/eopl/eopl.scrbl | 131 ++++++++++++++++++++++++++++++--------- collects/eopl/eopl.ss | 13 ++-- 2 files changed, 107 insertions(+), 37 deletions(-) diff --git a/collects/eopl/eopl.scrbl b/collects/eopl/eopl.scrbl index 7d0f0b5a25..1296467202 100644 --- a/collects/eopl/eopl.scrbl +++ b/collects/eopl/eopl.scrbl @@ -1,5 +1,7 @@ #lang scribble/doc @(require scribble/manual + scribble/struct + scheme/list (for-label eopl/eopl scheme/contract (only-in scheme printf pretty-print))) @@ -10,33 +12,101 @@ (define id (scheme provide)))) @(def-mz mzscheme-provide) +@(define-syntax-rule (reprovide id ...) + (*threecolumns (list (scheme id) ... 'nbsp 'nbsp))) +@(define (*threecolumns l) + (let* ([len (length l)] + [third (quotient len 3)] + [a (take l third)] + [b (take (list-tail l third) third)] + [c (list-tail l (* 2 third))] + [spacer (hspace 2)] + [to-flow (compose make-flow list make-paragraph list)]) + (make-table #f + (map (lambda (a b c) + (list (to-flow spacer) + (to-flow a) + (to-flow spacer) + (to-flow b) + (to-flow spacer) + (to-flow c))) + a b c)))) + + @title{@italic{Essentials of Programming Languages} Language} The @italic{Essentials of Programming Languages} language in DrScheme -provides all of the functions of R5RS (see @schememodname[r5rs]), plus -the forms and procedures described below. It is intended for use with -the textbook @cite["EoPL"]. - -Differences from the book: - -@itemize{ - - @item{Datatypes must be defined before they are used in - @scheme[cases] expressions. This constraint enables better and - earlier error reporting. - - Some examples in the book's code (or at least the code distributed - for the book) must be changed by moving datatype definitions - earlier.} - - @item{The @scheme[sllgen:] functions have been changed to syntactic - forms. This change is also related to better error reporting. - - All examples in the book work with the @scheme[sllgen:] forms.} -} +provides a subset of functions and syntactic forms of +@schememodname[mzscheme]---mostly the ones that correspond to +@scheme[r5rs] forms. See below for a complete list. The +language is intended for use with the textbook @cite["EoPL"]. @defmodule[eopl/eopl] +The following bindings are re-@scheme[provide]d from +@schememodname[mzscheme]: + +@reprovide[ + make-parameter + parameterize + print-struct + + unquote unquote-splicing + quote quasiquote if + lambda letrec define-syntax delay let let* let-syntax letrec-syntax + and or cond case do + begin set! + + #%module-begin + #%app #%datum #%top #%top-interaction + #%require #%provide #%expression + + syntax-rules ... + cons car cdr pair? map for-each + caar cadr cdar cddr + caaar caadr cadar caddr cdaar cdadr cddar cdddr + caaaar caaadr caadar caaddr cadaar cadadr caddar cadddr + cdaaar cdaadr cdadar cdaddr cddaar cddadr cdddar cddddr + = < > <= >= max min + - * / + abs gcd lcm exp log sin cos tan not eq? + make-string + symbol->string string->symbol make-rectangular + exact->inexact inexact->exact number->string string->number + rationalize output-port? current-input-port current-output-port current-error-port + open-input-file open-output-file close-input-port close-output-port + with-output-to-file transcript-on transcript-off flush-output + string-length string-ci<=? string-ci>=? string-append + string-fill! + string->list list->string + vector-length vector-fill! + vector->list list->vector + char-alphabetic? char-numeric? char-whitespace? + char-upper-case? char-lower-case? char->integer integer->char char-downcase + call-with-output-file call-with-input-file with-input-from-file + apply symbol? + null? + list? list length append reverse list-tail + list-ref memq memv member assq assv assoc + procedure? + number? complex? real? rational? integer? exact? inexact? zero? + positive? negative? odd? even? + quotient remainder modulo floor ceiling truncate round + numerator denominator asin acos atan sqrt + expt make-polar real-part imag-part angle magnitude input-port? + read read-char peek-char eof-object? + char-ready? + write display + newline write-char load + string? string string-ref string-set! string=? substring string-copy + string-ci=? string? string<=? string>=? string-ci? + vector? make-vector vector vector-ref vector-set! + char? char=? char? char<=? char>=? + char-ci=? char-ci? char-ci<=? char-ci>=? + char-upcase boolean? eqv? equal? + force + call-with-values values dynamic-wind + eval] + @defform[(define-datatype id predicate-id (variant-id (field-id predicate-expr) ...) ...)]{ @@ -68,8 +138,8 @@ Differences from the book: (else result-expr ...))]]{ Branches on the datatype instance produced by @scheme[expr], which - must be an instance of the specified @scheme[datatype-id] - (previously defined with @scheme[define-datatype]).} + must be an instance of the specified @scheme[datatype-id] that is + defined with @scheme[define-datatype].} @deftogether[( @defidform[sllgen:make-string-scanner] @@ -79,14 +149,14 @@ Differences from the book: @defidform[sllgen:show-define-datatypes] @defidform[sllgen:list-define-datatypes])]{ - Defined in the textbook's Appendix A @cite["EoPL"]. However, the + Defined in the textbook's Appendix B @cite["EoPL"]. However, the DrScheme versions are syntactic forms, instead of procedures, and the arguments must be either quoted literal tables or identifiers that are defined (at the top level) to quoted literal tables.} @defthing[sllgen:make-rep-loop procedure?]{ - Defined in the @italic{EoPL} textbook's Appendix A @cite["EoPL"] + Defined in the @italic{EoPL} textbook's Appendix B @cite["EoPL"] (and still a function).} @defthing[eopl:error procedure?]{ @@ -97,11 +167,12 @@ Differences from the book: @defproc[(eopl:printf (form string?) (v any/c) ...) void?] @defproc[(eopl:pretty-print (v any/c) (port output-port? (current-output-port))) void?])]{ - Same as PLT Scheme's @scheme[printf] and @scheme[pretty-print].} + Same as @schememodname[scheme/base]'s @scheme[printf] and @scheme[pretty-print].} @deftogether[( @defproc[((list-of (pred (any/c . -> . any)) ...+) (x any/c)) boolean?] - @defproc[(always? (x any/c)) boolean?])]{ + @defproc[(always? (x any/c)) boolean?] + @defproc[(maybe (pred (any/c . -> . boolean?))) boolean?])]{ As in the book @cite["EoPL"].} @@ -153,12 +224,12 @@ Differences from the book: The @schememodname[eopl/eopl] library calls this function when it executes.} - @(bibliography (bib-entry #:key "EoPL" - #:title @elem{@italic{Essentials of Programming Languages}, Second Edition} + #:title @elem{@italic{Essentials of Programming Languages}, Third Edition} #:location "MIT Press" - #:date "2001") + #:date "2008" + #:url "http://www.eopl3.com/") ) diff --git a/collects/eopl/eopl.ss b/collects/eopl/eopl.ss index 34f7e96d16..c46727c0e7 100644 --- a/collects/eopl/eopl.ss +++ b/collects/eopl/eopl.ss @@ -122,17 +122,17 @@ (and (pair? obj) ((car preds) (car obj)) (loop (cdr obj) (cdr preds)))))))))) - - ;; ;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;; - - (define empty null) - + (define maybe (lambda (pred) (lambda (obj) (or (pred obj) (eqv? obj #f))))) + ;; ;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;; + + (define empty null) + (provide time ;; useful to compare implementations collect-garbage ;; useful with `time' empty ;; for constructor-based printing @@ -141,8 +141,7 @@ provide ;; in case someone wants to use a module make-parameter parameterize - print-struct - maybe) + print-struct) (provide unquote unquote-splicing quote quasiquote if