The quasiquote-2.0 Reference Manual

Table of Contents

Next: , Previous: , Up: (dir)   [Contents][Index]

The quasiquote-2.0 Reference Manual

This is the quasiquote-2.0 Reference Manual, version 0.3, generated automatically by Declt version 2.3 "Robert April" on Tue Feb 20 09:14:48 2018 GMT+0.


Next: , Previous: , Up: Top   [Contents][Index]

1 Introduction

quasiquote-2.0

Why should it be hard to write macros that write other macros? Well, it shouldn't!

quasiquote-2.0 defines slightly different rules for quasiquotation, that make writing macro-writing macros very smooth experience.

NOTE: quasiquote-2.0 does horrible things to shared structure!!! (it does a lot of COPY-TREE's, so shared-ness is destroyed). So, it's indeed a tool to construct code (where it does not matter much if the structure is shared or not) and not the data (or, at least, not the data with shared structure)

(quasiquote-2.0:enable-quasiquote-2.0)

(defmacro define-my-macro (name args &body body)
  `(defmacro ,name ,args
     `(sample-thing-to-expand-to
        ,,@body))) ; note the difference from usual way

(define-my-macro foo (x y)
  ,x ; now here injections of quotation constructs work
  ,y)

(define-my-macro bar (&body body)
  ,@body) ; splicing is also easy

The "injections" in macros FOO and BAR work as naively expected, as if I had written

(defmacro foo (x y)
  `(sample-thing-to-expand-to ,x ,y))

(defmacro bar (&body body)
  `(sample-thing-to-expand-to ,@body))

(macroexpand-1 '(foo a b))

  '(SAMPLE-THING-TO-EXPAND-TO A B)

(macroexpand-1 '(bar a b c))

  '(SAMPLE-THING-TO-EXPAND-TO A B C)

So, how is this effect achieved?

DIG, INJECT and SPLICE

The transformations of backquote occur at macroexpansion-time and not at read-time. It is totally possible not to use any special reader syntax, but just underlying macros directly!

At the core is a macro DIG, which expands to the code that generates the expression according to the rules, which are roughly these:

;; The example using macros, without special reader syntax

(dig ; depth is 1 here
  (a b
     (dig ; depth is 2 here
       ((inject c) ; this inject is not evaluated, because depth is nonzero
        (inject (d ;depth becomes 1 here again
                (inject e) ; and this inject is evaluated, because depth becomes zero
                ))
        (inject 2 f) ; this inject with level specification is evaluated, because it
                     ; decreases depth by 2
        ))))


;; the same example using ENABLE-QUASIQUOTE-2.0 syntax is written as
`(a b `(,c ,(d ,e) ,,f)) ; note double comma acts different than usually

The ENABLE-QUASIQUOTE-2.0 macro just installs reader that reads `FORM as (DIG FORM), ,FORM as (INJECT FORM) and ,@FORM as (SPLICE FORM). You can just as well type DIG's, INJECT's and SPLICE's directly, (in particular, when writing utility functions that generate macro-generating code) or roll your own convenient reader syntax (pull requests are welcome).

So, these two lines (with ENABLE-QUASIQUOTE-2.0) read the same

`(a (,b `,,c) d)

(dig (a ((inject b) (dig (inject 2 c))) d))

You may notice the (INJECT 2 ...) form appearing, which is described below.

At "level 1", i.e. when only ` , and ,@ are used, and not, say `` ,, ,', ,,@ ,',@ this behaves exactly as usual quasiquotation.

The optional N argument

All quasiquote-2.0 operators accept optional "depth" argument, which goes before the form for human readability.

Namely, (DIG N FORM) increases depth by N instead of one and (INJECT N FORM) decreases depth by N instead of one.

(DIG 2 (INJECT 2 A))

; gives the same result as

(DIG (INJECT A))

In fact, with ENABLE-QUASIQUOTE-2.0, say, ,,,,,FORM (5 quotes) reads as (INJECT 5 FORM) and ,,,,,@FORM as (SPLICE 5 FORM)

More examples

For fairly complicated example, which uses ,,,@ and OINJECT (see below), see DEFINE-BINOP-DEFINER macro in CG-LLVM (https://github.com/mabragor/cg-llvm/src/basics.lisp), desire to write which was the initial impulse for this project.

For macro, that is not a macro-writing macro, yet benefits from ability to inject using , and ,@, consider JOINING-WITH-COMMA-SPACE macro (also from CG-LLVM)

(defmacro joining-with-comma-space (&body body)
  ;; joinl just joins strings in the list with specified string
  `(joinl ", " (mapcar #'emit-text-repr
		       (remove-if-not #'identity  `(,,@body)))))

;; the macro can be then used uniformly over strings and lists of strings
(defun foo (x y &rest z)
  (joining-with-comma-space ,x ,y ,@z))

(foo "a" "b" "c" "d")
  ;; produces
  "a, b, c, d"

ODIG and OINJECT and OSPLICE

Sometimes you don't want DIG's macroexpansion to look further into the structure of some INJECT or SPLICE or DIG in its subform, if the depth does not match. In these cases you need "opaque" versions of DIG, INJECT and SPLICE, named, respectively, ODIG, OINJECT and OSPLICE.

;; here injection of B would occur
(defun foo (b)
  (dig (dig (inject (a (inject b))))))

;; and here not, because macroexpansion does not look into OINJECT form
(defun bar (b)
  (dig (dig (oinject (a (inject b))))))

(foo 1)

  '(DIG (INJECT (A 1)))

(bar 1)

  '(DIG (OINJECT (A (INJECT B))))

MACRO-INJECT and MACRO-SPLICE

Sometimes you just want to abstract-out some common injection patterns... That is, you want macros, that expand into common injection patterns. However, you want this only sometimes, and only in special circumstances. So it won't do, if INJECT and SPLICE just expanded something, whenever it turned out to be macro. For that, use MACRO-INJECT and MACRO-SPLICE.

;; with quasiquote-2.0 syntax turned on
(defmacro inject-n-times (form n)
  (make-list n :initial-element `(inject ,form)))

(let (x 0)
  `(dig (a (macro-inject (inject-n-times (incf x) 3)))))
;; yields
'(a (1 2 3))

;;and same with MACRO-SPLICE
(let (x 0)
  `(dig (a (macro-splice (inject-n-times (incf x) 3)))))
;; yields
'(a 1 2 3)

OMACRO-INJECT and OMACRO-SPLICE are, as usual, opaque variants of MACRO-INJECT and MACRO-SPLICE.

Both MACRO-INJECT and MACRO-SPLICE expand their subform exactly once (using MACROEXPAND-1), before plugging it into list. If you want to expand as much as it's possible, use MACRO-INJECT-ALL and MACRO-SPLICE-ALL, which expand using MACROEXPAND before injecting/splicing, respectively. That implies, that while subform of MACRO-INJECT and MACRO-SPLICE is checked to be macro-form, the subform of MACRO-INJECT-ALL is not.

Terse syntax of the ENABLE-QUASIQUOTE-2.0

Of course, typing all those MACRO-INJECT-ALL, or OMACRO-SPLICE-ALL or whatever explicitly every time you want this special things is kind of clumsy. For that, default reader of quasiquote-2.0 provides extended syntax

',,,,!oma@x

;; reads as
'(OMACRO-SPLICE-ALL 4 X)

That is, the regexp of the syntax is [,]+![o][m][a][@]

As usual, number of commas determine the anti-depth of the injector, exclamation mark turns on the syntax, if o is present, opaque version of injector will be used, if m is present, macro-expanding version of injector will be used and if a is present, macro-all version of injector will be used.

Note: it's possible to write ,!ax, which will read as (INJECT-ALL X), but this will not correspond to the actual macro name.

Note: it was necessary to introduce special escape-char for extended syntax, since usual idioms like ,args would otherwise be completely screwed.

TODO

P.S. Name "quasiquote-2.0" comes from "patronus 2.0" spell from www.hpmor.com and has nothing to do with being "the 2.0" version of quasiquote.


Next: , Previous: , Up: Top   [Contents][Index]

2 Systems

The main system appears first, followed by any subsystem dependency.


Previous: , Up: Systems   [Contents][Index]

2.1 quasiquote-2.0

Author

Alexandr Popolitov <popolit@gmail.com>

License

MIT

Description

Writing macros that write macros. Effortless.

Version

0.3

Dependency

iterate

Source

quasiquote-2.0.asd (file)

Components

Next: , Previous: , Up: Top   [Contents][Index]

3 Files

Files are sorted by type and then listed depth-first from the systems components trees.


Previous: , Up: Files   [Contents][Index]

3.1 Lisp


Next: , Previous: , Up: Lisp files   [Contents][Index]

3.1.1 quasiquote-2.0.asd

Location

quasiquote-2.0.asd

Systems

quasiquote-2.0 (system)

Packages

quasiquote-2.0-system


Next: , Previous: , Up: Lisp files   [Contents][Index]

3.1.2 quasiquote-2.0/package.lisp

Parent

quasiquote-2.0 (system)

Location

package.lisp

Packages

quasiquote-2.0


Next: , Previous: , Up: Lisp files   [Contents][Index]

3.1.3 quasiquote-2.0/quasiquote-2.0.lisp

Dependency

package.lisp (file)

Parent

quasiquote-2.0 (system)

Location

quasiquote-2.0.lisp

Exported Definitions
Internal Definitions

Next: , Previous: , Up: Lisp files   [Contents][Index]

3.1.4 quasiquote-2.0/macros.lisp

Dependency

quasiquote-2.0.lisp (file)

Parent

quasiquote-2.0 (system)

Location

macros.lisp

Exported Definitions
Internal Definitions

define-dig-like-macro (macro)


Previous: , Up: Lisp files   [Contents][Index]

3.1.5 quasiquote-2.0/readers.lisp

Dependency

macros.lisp (file)

Parent

quasiquote-2.0 (system)

Location

readers.lisp

Exported Definitions
Internal Definitions

Next: , Previous: , Up: Top   [Contents][Index]

4 Packages

Packages are listed by definition order.


Next: , Previous: , Up: Packages   [Contents][Index]

4.1 quasiquote-2.0-system

Source

quasiquote-2.0.asd

Use List

Previous: , Up: Packages   [Contents][Index]

4.2 quasiquote-2.0

Source

package.lisp (file)

Use List
Exported Definitions
Internal Definitions

Next: , Previous: , Up: Top   [Contents][Index]

5 Definitions

Definitions are sorted by export status, category, package, and then by lexicographic order.


Next: , Previous: , Up: Definitions   [Contents][Index]

5.1 Exported definitions


Next: , Previous: , Up: Exported definitions   [Contents][Index]

5.1.1 Macros

Macro: dig N-OR-FORM &optional FORM
Package

quasiquote-2.0

Source

macros.lisp (file)

Macro: disable-quasiquote-2.0 ()
Package

quasiquote-2.0

Source

readers.lisp (file)

Macro: enable-quasiquote-2.0 ()
Package

quasiquote-2.0

Source

readers.lisp (file)

Macro: inject N-OR-FORM &optional FORM
Package

quasiquote-2.0

Source

quasiquote-2.0.lisp (file)

Macro: macro-inject N-OR-FORM &optional FORM
Package

quasiquote-2.0

Source

quasiquote-2.0.lisp (file)

Macro: odig N-OR-FORM &optional FORM
Package

quasiquote-2.0

Source

macros.lisp (file)

Macro: oinject N-OR-FORM &optional FORM
Package

quasiquote-2.0

Source

quasiquote-2.0.lisp (file)

Macro: osplice N-OR-FORM &optional FORM
Package

quasiquote-2.0

Source

quasiquote-2.0.lisp (file)

Macro: splice N-OR-FORM &optional FORM
Package

quasiquote-2.0

Source

quasiquote-2.0.lisp (file)


Previous: , Up: Exported definitions   [Contents][Index]

5.1.2 Functions

Function: %codewalk-dig-form FORM
Package

quasiquote-2.0

Source

quasiquote-2.0.lisp (file)

Function: transform-dig-form FORM
Package

quasiquote-2.0

Source

quasiquote-2.0.lisp (file)


Previous: , Up: Definitions   [Contents][Index]

5.2 Internal definitions


Next: , Previous: , Up: Internal definitions   [Contents][Index]

5.2.1 Special variables

Special Variable: *depth*
Package

quasiquote-2.0

Source

quasiquote-2.0.lisp (file)

Special Variable: *env*
Package

quasiquote-2.0

Source

quasiquote-2.0.lisp (file)

Special Variable: *injectors*
Package

quasiquote-2.0

Source

quasiquote-2.0.lisp (file)

Special Variable: *known-diggers*
Package

quasiquote-2.0

Source

quasiquote-2.0.lisp (file)

Special Variable: *known-injectors*
Package

quasiquote-2.0

Source

quasiquote-2.0.lisp (file)

Special Variable: *known-macro-injectors*
Package

quasiquote-2.0

Source

quasiquote-2.0.lisp (file)

Special Variable: *known-splicers*
Package

quasiquote-2.0

Source

quasiquote-2.0.lisp (file)

Special Variable: *macro-handlers*
Package

quasiquote-2.0

Source

quasiquote-2.0.lisp (file)

Special Variable: *opaque-injectors*
Package

quasiquote-2.0

Source

quasiquote-2.0.lisp (file)

Special Variable: *previous-readtables*
Package

quasiquote-2.0

Source

readers.lisp (file)

Special Variable: *void-elt*
Package

quasiquote-2.0

Source

quasiquote-2.0.lisp (file)

Special Variable: *void-filter-needed*
Package

quasiquote-2.0

Source

quasiquote-2.0.lisp (file)


Next: , Previous: , Up: Internal definitions   [Contents][Index]

5.2.2 Macros

Macro: define-dig-like-macro NAME
Package

quasiquote-2.0

Source

macros.lisp (file)

Macro: define-dig-reader NAME SYMBOL
Package

quasiquote-2.0

Source

readers.lisp (file)

Macro: define-nonsense-when-bare NAME
Package

quasiquote-2.0

Source

quasiquote-2.0.lisp (file)

Macro: make-list-form O!-N FORM
Package

quasiquote-2.0

Source

quasiquote-2.0.lisp (file)

Macro: nonsense-error STR
Package

quasiquote-2.0

Source

quasiquote-2.0.lisp (file)


Previous: , Up: Internal definitions   [Contents][Index]

5.2.3 Functions

Function: %disable-quasiquote-2.0 ()
Package

quasiquote-2.0

Source

readers.lisp (file)

Function: %enable-quasiquote-2.0 ()
Package

quasiquote-2.0

Source

readers.lisp (file)

Function: codewalk-dig-form FORM
Package

quasiquote-2.0

Source

quasiquote-2.0.lisp (file)

Function: dig-form-p FORM
Package

quasiquote-2.0

Source

quasiquote-2.0.lisp (file)

Function: dig-reader STREAM CHAR
Package

quasiquote-2.0

Source

readers.lisp (file)

Function: expect-char CHAR STREAM
Package

quasiquote-2.0

Source

readers.lisp (file)

Function: filter-out-voids LST VOID-SYM
Package

quasiquote-2.0

Source

quasiquote-2.0.lisp (file)

Function: get-macro-handler SYM
Package

quasiquote-2.0

Source

quasiquote-2.0.lisp (file)

Function: guess-injector-name OPAQUE-P MACRO-P ALL-P SPLICING-P
Package

quasiquote-2.0

Source

readers.lisp (file)

Function: handle-macro-1 FORM
Package

quasiquote-2.0

Source

quasiquote-2.0.lisp (file)

Function: handle-macro-all FORM
Package

quasiquote-2.0

Source

quasiquote-2.0.lisp (file)

Function: inject-reader STREAM CHAR
Package

quasiquote-2.0

Source

readers.lisp (file)

Function: injector-form-p FORM
Package

quasiquote-2.0

Source

quasiquote-2.0.lisp (file)

Function: injector-level FORM
Package

quasiquote-2.0

Source

quasiquote-2.0.lisp (file)

Function: injector-subform FORM
Package

quasiquote-2.0

Source

quasiquote-2.0.lisp (file)

Function: look-into-dig FORM PATH
Package

quasiquote-2.0

Source

quasiquote-2.0.lisp (file)

Function: look-into-injector FORM PATH
Package

quasiquote-2.0

Source

quasiquote-2.0.lisp (file)

Function: macro-injector-p FORM
Package

quasiquote-2.0

Source

quasiquote-2.0.lisp (file)

Function: macroexpand-macroinjector PLACE
Package

quasiquote-2.0

Source

quasiquote-2.0.lisp (file)

Function: mk-splicing-injector-let X
Package

quasiquote-2.0

Source

quasiquote-2.0.lisp (file)

Function: mk-splicing-injector-setf PATH G!-LIST G!-SPLICEE
Package

quasiquote-2.0

Source

quasiquote-2.0.lisp (file)

Function: odig-reader STREAM CHAR
Package

quasiquote-2.0

Source

readers.lisp (file)

Function: path->setfable PATH VAR
Package

quasiquote-2.0

Source

quasiquote-2.0.lisp (file)

Function: read-n-chars STREAM CHAR
Package

quasiquote-2.0

Source

readers.lisp (file)

Function: really-transform-dig-form THE-FORM SITE-PATHS
Package

quasiquote-2.0

Source

quasiquote-2.0.lisp (file)

Function: reset-injectors ()
Package

quasiquote-2.0

Source

quasiquote-2.0.lisp (file)

Function: search-all-active-sites FORM PATH TOPLEVEL-P
Package

quasiquote-2.0

Source

quasiquote-2.0.lisp (file)

Function: splicing-injector FORM
Package

quasiquote-2.0

Source

quasiquote-2.0.lisp (file)

Function: transparent-p FORM
Package

quasiquote-2.0

Source

quasiquote-2.0.lisp (file)

Function: tree->cons-code TREE
Package

quasiquote-2.0

Source

quasiquote-2.0.lisp (file)


Previous: , Up: Top   [Contents][Index]

Appendix A Indexes


Next: , Previous: , Up: Indexes   [Contents][Index]

A.1 Concepts

Jump to:   F   L   Q  
Index Entry  Section

F
File, Lisp, quasiquote-2.0.asd: The quasiquote-2<dot>0<dot>asd file
File, Lisp, quasiquote-2.0/macros.lisp: The quasiquote-2<dot>0/macros<dot>lisp file
File, Lisp, quasiquote-2.0/package.lisp: The quasiquote-2<dot>0/package<dot>lisp file
File, Lisp, quasiquote-2.0/quasiquote-2.0.lisp: The quasiquote-2<dot>0/quasiquote-2<dot>0<dot>lisp file
File, Lisp, quasiquote-2.0/readers.lisp: The quasiquote-2<dot>0/readers<dot>lisp file

L
Lisp File, quasiquote-2.0.asd: The quasiquote-2<dot>0<dot>asd file
Lisp File, quasiquote-2.0/macros.lisp: The quasiquote-2<dot>0/macros<dot>lisp file
Lisp File, quasiquote-2.0/package.lisp: The quasiquote-2<dot>0/package<dot>lisp file
Lisp File, quasiquote-2.0/quasiquote-2.0.lisp: The quasiquote-2<dot>0/quasiquote-2<dot>0<dot>lisp file
Lisp File, quasiquote-2.0/readers.lisp: The quasiquote-2<dot>0/readers<dot>lisp file

Q
quasiquote-2.0.asd: The quasiquote-2<dot>0<dot>asd file
quasiquote-2.0/macros.lisp: The quasiquote-2<dot>0/macros<dot>lisp file
quasiquote-2.0/package.lisp: The quasiquote-2<dot>0/package<dot>lisp file
quasiquote-2.0/quasiquote-2.0.lisp: The quasiquote-2<dot>0/quasiquote-2<dot>0<dot>lisp file
quasiquote-2.0/readers.lisp: The quasiquote-2<dot>0/readers<dot>lisp file

Jump to:   F   L   Q  

Next: , Previous: , Up: Indexes   [Contents][Index]

A.2 Functions

Jump to:   %  
C   D   E   F   G   H   I   L   M   N   O   P   R   S   T  
Index Entry  Section

%
%codewalk-dig-form: Exported functions
%disable-quasiquote-2.0: Internal functions
%enable-quasiquote-2.0: Internal functions

C
codewalk-dig-form: Internal functions

D
define-dig-like-macro: Internal macros
define-dig-reader: Internal macros
define-nonsense-when-bare: Internal macros
dig: Exported macros
dig-form-p: Internal functions
dig-reader: Internal functions
disable-quasiquote-2.0: Exported macros

E
enable-quasiquote-2.0: Exported macros
expect-char: Internal functions

F
filter-out-voids: Internal functions
Function, %codewalk-dig-form: Exported functions
Function, %disable-quasiquote-2.0: Internal functions
Function, %enable-quasiquote-2.0: Internal functions
Function, codewalk-dig-form: Internal functions
Function, dig-form-p: Internal functions
Function, dig-reader: Internal functions
Function, expect-char: Internal functions
Function, filter-out-voids: Internal functions
Function, get-macro-handler: Internal functions
Function, guess-injector-name: Internal functions
Function, handle-macro-1: Internal functions
Function, handle-macro-all: Internal functions
Function, inject-reader: Internal functions
Function, injector-form-p: Internal functions
Function, injector-level: Internal functions
Function, injector-subform: Internal functions
Function, look-into-dig: Internal functions
Function, look-into-injector: Internal functions
Function, macro-injector-p: Internal functions
Function, macroexpand-macroinjector: Internal functions
Function, mk-splicing-injector-let: Internal functions
Function, mk-splicing-injector-setf: Internal functions
Function, odig-reader: Internal functions
Function, path->setfable: Internal functions
Function, read-n-chars: Internal functions
Function, really-transform-dig-form: Internal functions
Function, reset-injectors: Internal functions
Function, search-all-active-sites: Internal functions
Function, splicing-injector: Internal functions
Function, transform-dig-form: Exported functions
Function, transparent-p: Internal functions
Function, tree->cons-code: Internal functions

G
get-macro-handler: Internal functions
guess-injector-name: Internal functions

H
handle-macro-1: Internal functions
handle-macro-all: Internal functions

I
inject: Exported macros
inject-reader: Internal functions
injector-form-p: Internal functions
injector-level: Internal functions
injector-subform: Internal functions

L
look-into-dig: Internal functions
look-into-injector: Internal functions

M
Macro, define-dig-like-macro: Internal macros
Macro, define-dig-reader: Internal macros
Macro, define-nonsense-when-bare: Internal macros
Macro, dig: Exported macros
Macro, disable-quasiquote-2.0: Exported macros
Macro, enable-quasiquote-2.0: Exported macros
Macro, inject: Exported macros
Macro, macro-inject: Exported macros
Macro, make-list-form: Internal macros
Macro, nonsense-error: Internal macros
Macro, odig: Exported macros
Macro, oinject: Exported macros
Macro, osplice: Exported macros
Macro, splice: Exported macros
macro-inject: Exported macros
macro-injector-p: Internal functions
macroexpand-macroinjector: Internal functions
make-list-form: Internal macros
mk-splicing-injector-let: Internal functions
mk-splicing-injector-setf: Internal functions

N
nonsense-error: Internal macros

O
odig: Exported macros
odig-reader: Internal functions
oinject: Exported macros
osplice: Exported macros

P
path->setfable: Internal functions

R
read-n-chars: Internal functions
really-transform-dig-form: Internal functions
reset-injectors: Internal functions

S
search-all-active-sites: Internal functions
splice: Exported macros
splicing-injector: Internal functions

T
transform-dig-form: Exported functions
transparent-p: Internal functions
tree->cons-code: Internal functions

Jump to:   %  
C   D   E   F   G   H   I   L   M   N   O   P   R   S   T  

Next: , Previous: , Up: Indexes   [Contents][Index]

A.3 Variables

Jump to:   *  
S  
Index Entry  Section

*
*depth*: Internal special variables
*env*: Internal special variables
*injectors*: Internal special variables
*known-diggers*: Internal special variables
*known-injectors*: Internal special variables
*known-macro-injectors*: Internal special variables
*known-splicers*: Internal special variables
*macro-handlers*: Internal special variables
*opaque-injectors*: Internal special variables
*previous-readtables*: Internal special variables
*void-elt*: Internal special variables
*void-filter-needed*: Internal special variables

S
Special Variable, *depth*: Internal special variables
Special Variable, *env*: Internal special variables
Special Variable, *injectors*: Internal special variables
Special Variable, *known-diggers*: Internal special variables
Special Variable, *known-injectors*: Internal special variables
Special Variable, *known-macro-injectors*: Internal special variables
Special Variable, *known-splicers*: Internal special variables
Special Variable, *macro-handlers*: Internal special variables
Special Variable, *opaque-injectors*: Internal special variables
Special Variable, *previous-readtables*: Internal special variables
Special Variable, *void-elt*: Internal special variables
Special Variable, *void-filter-needed*: Internal special variables

Jump to:   *  
S  

Previous: , Up: Indexes   [Contents][Index]

A.4 Data types

Jump to:   P   Q   S  
Index Entry  Section

P
Package, quasiquote-2.0: The quasiquote-2<dot>0 package
Package, quasiquote-2.0-system: The quasiquote-2<dot>0-system package

Q
quasiquote-2.0: The quasiquote-2<dot>0 system
quasiquote-2.0: The quasiquote-2<dot>0 package
quasiquote-2.0-system: The quasiquote-2<dot>0-system package

S
System, quasiquote-2.0: The quasiquote-2<dot>0 system

Jump to:   P   Q   S