Cleaup, generate documentation PDFs in makefile, library functions for the queue library (next commit).

This commit is contained in:
Georges Dupéron 2015-11-14 22:27:27 +01:00
parent efd556eb66
commit 241649fcae
7 changed files with 189 additions and 35 deletions

View File

@ -12,4 +12,4 @@ clean:
.PHONY: build-dep .PHONY: build-dep
build-dep: build-dep:
raco pkg install --deps search-auto --update-deps --skip-installed alexis-util cover raco pkg install --deps search-auto --update-deps --skip-installed alexis-util cover debug

View File

@ -514,6 +514,9 @@ implementation.
@section{Conclusion} @section{Conclusion}
TODO: to test the two versions of replace-in-instance, just use the chunk twice,
with a let.
@chunk[<*> @chunk[<*>
(begin (begin
(module main typed/racket (module main typed/racket

View File

@ -105,7 +105,7 @@ don't really know how to solve that. It should be noted that constructors are
likely to have names starting with a capital letter, so maybe this reduces the likely to have names starting with a capital letter, so maybe this reduces the
number of name collisions. number of name collisions.
@section{@racket{tagged}} @section{@racket[tagged]}
@CHUNK[<tagged> @CHUNK[<tagged>
(define-multi-id tagged (define-multi-id tagged
@ -131,7 +131,7 @@ number of name collisions.
[(tagged foo z x y) (list z y x)]) [(tagged foo z x y) (list z y x)])
'(z 3 "o"))] '(z 3 "o"))]
@section{@racket{define-tagged}} @section{@racket[define-tagged]}
@chunk[<define-tagged> @chunk[<define-tagged>
(define-syntax/parse (define-tagged tag:id [field type] ... (define-syntax/parse (define-tagged tag:id [field type] ...

View File

@ -1,4 +1,4 @@
#lang racket #lang at-exp racket
;; This file is derived from the one which can be found at: ;; This file is derived from the one which can be found at:
;; https://github.com/soegaard/bracket/blob/master/docs/pr-math.rkt ;; https://github.com/soegaard/bracket/blob/master/docs/pr-math.rkt
@ -9,15 +9,17 @@
(all-from-out "math-scribble/math-scribble.rkt")) (all-from-out "math-scribble/math-scribble.rkt"))
(require scribble/html-properties (require scribble/html-properties
scribble/latex-properties
scribble/base scribble/base
scribble/core) scribble/core)
(define mathjax-source ;; Other possible sources:
"MathJax/MathJax.js?config=default"
;"http://cdn.mathjax.org/mathjax/latest/MathJax.js?config=TeX-AMS-MML_HTMLorMML" ;"http://cdn.mathjax.org/mathjax/latest/MathJax.js?config=TeX-AMS-MML_HTMLorMML"
;"http://c328740.r40.cf1.rackcdn.com/mathjax/latest/MathJax.js?config=default" ;"http://c328740.r40.cf1.rackcdn.com/mathjax/latest/MathJax.js?config=default"
;"http://cdn.mathjax.org/mathjax/latest/MathJax.js?config=TeX-AMS-HTML" ;"http://cdn.mathjax.org/mathjax/latest/MathJax.js?config=TeX-AMS-HTML"
) (define mathjax-source "MathJax/MathJax.js?config=default")
(require scriblib/render-cond)
(define setup-math (define setup-math
(compound-paragraph (compound-paragraph
@ -29,8 +31,30 @@
(attributes `((type . "text/javascript") (attributes `((type . "text/javascript")
(src . ,mathjax-source ))))) (src . ,mathjax-source )))))
'()) '())
(cond-block
[(and (or html))
(paragraph (paragraph
(style (style
#f (list (alt-tag "script") #f (list (alt-tag "script")
(attributes '((type . "text/x-mathjax-config"))))) (attributes '((type . "text/x-mathjax-config")))))
"MathJax.Hub.Config({ tex2jax: {inlineMath: [['$','$']]} });")))) "MathJax.Hub.Config({ tex2jax: {inlineMath: [['$','$']]} });")]
[latex
(paragraph
(style
#f (list (tex-addition (string->bytes/utf-8 @string-append{
%\overfullrule=2cm
\usepackage[scaled=0.7]{beramono}
\usepackage{newunicodechar}
\newunicodechar{}{\ensuremath{_1}}
\usepackage{xcolor}
\hypersetup{
unicode=true,
colorlinks=true,
linkcolor={red!50!white!50!black},
citecolor={blue!50!black},
urlcolor={blue!80!black},
}
}))))
"")]
[else (paragraph (style #f (list)) "")]))))

View File

@ -11,7 +11,8 @@
;; Functions ;; Functions
(provide (rename-out [ compose])) (provide (rename-out [ compose]))
;; Macros ;; Macros
(provide mapp comment) ;(provide mapp)
(provide comment)
(require (for-syntax syntax/parse (require (for-syntax syntax/parse
racket/syntax)) racket/syntax))
@ -95,6 +96,7 @@
; maybe Prefab? Or are they mutable? ; maybe Prefab? Or are they mutable?
)) ))
#|
(define-syntax (mapp stx) (define-syntax (mapp stx)
(syntax-parse stx (syntax-parse stx
[(_ var:id lst:expr body ...) [(_ var:id lst:expr body ...)
@ -114,6 +116,8 @@
body ...) body ...)
result)) result))
(set! l (cdr l))))))))])) (set! l (cdr l))))))))]))
|#
;; TODO: this does not work, because Null is (Listof Any) ;; TODO: this does not work, because Null is (Listof Any)
; (mapp x (cdr '(1)) (* x x)) ; (mapp x (cdr '(1)) (* x x))

View File

@ -161,7 +161,11 @@
(check-equal? (fxxor 13206 23715 314576) 304101)) (check-equal? (fxxor 13206 23715 314576) 304101))
;; ==== Rest ==== ;; ==== Rest ====
(provide nameof (provide hash-set**
map+fold
cons→values
(rename-out [cons→values cons->values])
nameof
first-value second-value third-value fourth-value fifth-value sixth-value seventh-value eighth-value ninth-value tenth-value first-value second-value third-value fourth-value fifth-value sixth-value seventh-value eighth-value ninth-value tenth-value
(rename-out [compose ]) (rename-out [compose ])
stx-list stx-list
@ -179,10 +183,32 @@
my-in-syntax my-in-syntax
indexof indexof
Syntax-Listof Syntax-Listof
check-duplicate-identifiers) check-duplicate-identifiers
generate-temporary)
(require (for-syntax syntax/parse syntax/parse/experimental/template)) (require (for-syntax syntax/parse syntax/parse/experimental/template))
(: hash-set** ( (K V)
( (HashTable K V) (Listof (Pairof K V)) (HashTable K V))))
(define (hash-set** h l)
(if (null? l)
h
(hash-set** (hash-set h (caar l) (cdar l)) (cdr l))))
(define #:∀ (A B) (cons→values [x : (Pairof A B)]) (values (car x) (cdr x)))
(: map+fold ( (E R A) ( ( E A (values R A)) A (Listof E)
(Values (Listof R) A))))
(define (map+fold f init-acc lst)
(let ([result (foldl (λ ([item : E] [acc : (Pairof (Listof R) A)])
(let-values ([(item new-acc) (f item (cdr acc))])
(cons (cons item (car acc))
new-acc)))
(cons '() init-acc)
lst)])
(values (car result) (cdr result))))
(define-syntax-rule (nameof x) (begin x 'x)) (define-syntax-rule (nameof x) (begin x 'x))
(module+ test (module+ test
@ -405,6 +431,8 @@
(define (check-duplicate-identifiers ids) (define (check-duplicate-identifiers ids)
(if (check-duplicate-identifier (my-in-syntax ids)) #t #f)) (if (check-duplicate-identifier (my-in-syntax ids)) #t #f))
(require/typed racket/syntax [generate-temporary ( Syntax Identifier)])
(require syntax/parse/define) (require syntax/parse/define)
(provide define-simple-macro) (provide define-simple-macro)
@ -626,4 +654,87 @@
[i : Nonnegative-Integer (ann (in-naturals) (Sequenceof Nonnegative-Integer))]) [i : Nonnegative-Integer (ann (in-naturals) (Sequenceof Nonnegative-Integer))])
i)])) i)]))
;; ==== set.rkt ====
(provide set-map→set)
(: set-map→set ( (e b) ( (Setof e) ( e b) (Setof b))))
(define (set-map→set s f) (list->set (set-map s f)))
;; ==== type-inference-helpers.rkt ====
#|
;; This does not work, in the end.
(provide imap)
(define-syntax (imap stx)
(syntax-parse stx
[(_ lst:expr var:id (~optional (~literal )) . body)
#'(let ()
(define #:∀ (T) (inlined-map [l : (Listof T)])
(if (null? l)
'()
(cons (let ([var (car l)]) . body)
(inlined-map (cdr l)))))
(inlined-map lst))]))
|#
;; ==== percent.rkt ====
(provide % define%)
#|(define-syntax (% stx)
(syntax-parse stx #:literals (= :)
[(_ (~seq (~or ((~and var (~not :)) ...)
(~seq (~and var (~not (~or = :))) ...)) = expr)
...
(~optional (~literal )) . body)
#'(let-values ([(var ...) expr] ...) . body)]))|#
(begin-for-syntax
(define-syntax-class %pat
(pattern v:id
#:with expanded #'v)
(pattern ()
#:with expanded #'(list))
(pattern (x:%pat . rest:%pat)
#:with expanded #'(cons x.expanded rest.expanded)))
(define-splicing-syntax-class %assignment
#:attributes ([pat.expanded 1] [expr 0])
#:literals (= )
(pattern (~seq (~and maybe-pat (~not (~or = ))) ... (~datum =) expr:expr)
#:with [pat:%pat ...] #'(maybe-pat ...))))
(define-syntax (% stx)
(syntax-parse stx #:literals (= )
[(_ :%assignment ... (~optional (~literal )) . body)
#'(match-let*-values ([(pat.expanded ...) expr] ...) . body)]))
(begin-for-syntax
(define-syntax-class typed-pat
(pattern [x:%pat (~literal :) type:expr]
#:with (tmp) (generate-temporaries #'(x))
#:with var-type #`[tmp : type]
#:with (expanded ...) #'([x.expanded tmp]))
(pattern x:%pat
#:with var-type #'x
#:with (expanded ...) #'())))
(define-syntax (define% stx)
(syntax-parse stx
[(_ (name param:typed-pat ...)
(~and (~seq ret ...) (~optional (~seq (~literal :) ret-type)))
. body)
#'(define (name param.var-type ...)
(match-let (param.expanded ... ...) ret ... . body))]))
#|
(begin-for-syntax
(define-syntax-class λ%expr
(pattern e:id #:where (symbol->string e))
(pattern e)
(pattern (e . rest:λ%expr))))
(define-syntax (λ% stx)
(syntax-parse stx
[(_ expr )]))
|#
;; ==== end ==== ;; ==== end ====

View File

@ -23,15 +23,21 @@
(define scrbl-files (exclude-dirs (find-files-by-extension ".scrbl"))) (define scrbl-files (exclude-dirs (find-files-by-extension ".scrbl")))
(define lp2-files (exclude-dirs (find-files-by-extension ".lp2.rkt"))) (define lp2-files (exclude-dirs (find-files-by-extension ".lp2.rkt")))
(define rkt-files (exclude-dirs (find-files-by-extension ".rkt"))) (define rkt-files (exclude-dirs (find-files-by-extension ".rkt")))
(define html-sources (append scrbl-files lp2-files)) (define doc-sources (append scrbl-files lp2-files))
(define html-files (map (λ ([scrbl-or-lp2 : Path]) (build-path "docs/" (regexp-case (path->string scrbl-or-lp2) [#rx"\\.scrbl" ".html"] [#rx"\\.lp2\\.rkt" ".lp2.html"]))) (define html-files (map (λ ([scrbl-or-lp2 : Path]) (build-path "docs/" (regexp-case (path->string scrbl-or-lp2) [#rx"\\.scrbl" ".html"] [#rx"\\.lp2\\.rkt" ".lp2.html"])))
html-sources)) doc-sources))
(define pdf-files (map (λ ([scrbl-or-lp2 : Path]) (build-path "docs/" (regexp-case (path->string scrbl-or-lp2) [#rx"\\.scrbl" ".pdf"] [#rx"\\.lp2\\.rkt" ".lp2.pdf"])))
doc-sources))
(define mathjax-links (map (λ ([d : Path]) (build-path d "MathJax")) (remove-duplicates (map dirname html-files)))) (define mathjax-links (map (λ ([d : Path]) (build-path d "MathJax")) (remove-duplicates (map dirname html-files))))
(: scribble ( Path (Listof Path) Any)) (define-type ScribbleRenderers
(define (scribble file all-files) ; TODO: add --html-tree <n> and '(other . "…") to be future-proof.
(U "--html" "--htmls" "--latex" "--pdf" "--dvipdf" "--latex-section"
"--text" "--markdown"))
(: scribble ( Path (Listof Path) ScribbleRenderers Any))
(define (scribble file all-files renderer)
(run `(,(or (find-executable-path "scribble") (error "Can't find executable 'scribble'")) (run `(,(or (find-executable-path "scribble") (error "Can't find executable 'scribble'"))
"--html" ,renderer
"--dest" ,(build-path "docs/" (dirname file)) "--dest" ,(build-path "docs/" (dirname file))
"+m" "+m"
"--redirect-main" "http://docs.racket-lang.org/" "--redirect-main" "http://docs.racket-lang.org/"
@ -64,12 +70,18 @@
(make/proc (make/proc
(rules (list "zo" (append html-files (rules (list "zo" (append html-files
pdf-files
mathjax-links)) mathjax-links))
(for/rules ([scrbl-or-lp2 html-sources] (for/rules ([scrbl-or-lp2 doc-sources]
[html html-files]) [html html-files])
(html) (html)
(scrbl-or-lp2) (scrbl-or-lp2)
(scribble scrbl-or-lp2 html-sources)) (scribble scrbl-or-lp2 doc-sources "--html"))
(for/rules ([scrbl-or-lp2 doc-sources]
[pdf pdf-files])
(pdf)
(scrbl-or-lp2)
(scribble scrbl-or-lp2 doc-sources "--pdf"))
(for/rules ([mathjax-link mathjax-links]) (for/rules ([mathjax-link mathjax-links])
(mathjax-link) (mathjax-link)
() ()