racket/collects/redex/scribblings/tut-util.rkt

67 lines
2.2 KiB
Racket

#lang at-exp racket/base
(require scribble/base
scribble/core
scriblib/autobib)
(provide exercise exref
generate-bibliography ~cite citet
amb1 amb2 Hanford)
(define i 0)
(define (exercise [id #f])
(set! i (+ i 1))
(when id (hash-set! ex-ids id i))
(element (style 'bold '())
(format "Exercise ~a" i)))
(define ex-ids (make-hash))
(define (exref id) (format "~a" (hash-ref ex-ids id)))
(define (book-chapter-location
#:title title
#:author [author #f]
#:edition [edition #f]
#:publisher [publisher #f])
(let* ([s @italic{@(string-titlecase title)}]
[s (if edition
@elem{@|s| @(string-titlecase edition) edition}
s)]
[s (if author
@elem{@|s| by @|author|}
s)]
[s (if publisher
(if s
@elem{@|s|. @|publisher|}
publisher)
s)])
(unless s
(error 'book-chapter-location "no arguments"))
@elem{In @|s|}))
(define-cite ~cite citet generate-bibliography)
(define amb1
(make-bib #:title "A Basis for a Mathematical Theory of Computation"
#:author "John McCarthy"
#:location
(book-chapter-location #:title "Computer Programming and Formal Systems"
#:author (editor (authors "P. Braffort" "D. Hirschberg")))
#:date 1963))
(define amb2
(make-bib #:title "Non-deterministic Lisp with dependency-directed backtracking"
#:author (authors "Ramin Zabih"
"David McAllester"
"David Chapman")
#:location (proceedings-location "Proceedings of the Sixth National Conference on Artificial Intelligence"
#:pages '(59 64))
#:date 1987))
(define ibm-sys "IBM Systems Journal")
(define Hanford
(make-bib
#:author (authors "Kenneth V. Hanford")
#:title "Automatic generation of test cases"
#:location (journal-location ibm-sys
#:volume 9
#:number "4"
#:pages '(244 257))
#:date "1970"))