44 lines
1.6 KiB
Racket
44 lines
1.6 KiB
Racket
#lang scribble/manual
|
|
|
|
@(require (for-label (except-in racket/base
|
|
read read-syntax)
|
|
(except-in afl/reader
|
|
read read-syntax)))
|
|
|
|
@title{afl}
|
|
|
|
@;; example: @racket[(map @#,afl[(+ % 1)] '(1 2 3))]
|
|
@(define-syntax-rule @afl[form ...]
|
|
@elem{@tt{#λ}@racket[form ...]})
|
|
|
|
@section{#lang afl}
|
|
|
|
@defmodulelang[afl]{
|
|
The @racketmodname[afl] language is a meta-language like @racketmodname[at-exp]
|
|
that adds @racketmodname[rackjure]-like anonymous function literals to a language.
|
|
@margin-note{see @secref["func-lit" #:doc '(lib "rackjure/rackjure.scrbl")]}
|
|
|
|
For example, @racket[@#,hash-lang[] @#,racketmodname[afl] @#,racketmodname[racket/base]]
|
|
adds anonymous function literals to @racketmodname[racket/base], so that
|
|
@racketmod[afl @#,racketmodname[racket/base]
|
|
(map @#,afl[(+ % 1)] '(1 2 3))]
|
|
produces @racket['(2 3 4)]
|
|
}
|
|
|
|
@section{afl/reader}
|
|
|
|
@defmodule[afl/reader]
|
|
|
|
@deftogether[(@defproc[(afl-read [in input-port? (current-input-port)]) any]{}
|
|
@defproc[(afl-read-syntax [source-name any/c (object-name in)] [in input-port? (current-input-port)]) (or/c syntax? eof-object?)]{})]{
|
|
These procedures implement the @racketmodname[afl] reader. They do so by
|
|
constructing a readtable based on the current one, and using that
|
|
for reading.
|
|
|
|
@racketmodname[afl/reader] also exports these functions under the names @racket[read] and @racket[read-syntax].
|
|
}
|
|
|
|
@defproc[(make-afl-readtable [orig-readtable readtable? (current-readtable)]) readtable?]{
|
|
makes an @racketmodname[afl] readtable based on @racket[orig-readtable].
|
|
}
|