Commit d53e5d63 authored by Dave Cooper's avatar Dave Cooper
Browse files

continuing to build up the new tutorial manual

parent 8e8d605d
......@@ -9,11 +9,14 @@
:serial
t
:version
"2012111900"
"2012112000"
:depends-on
(:gdl-dom)
:components
((:file "source/package") (:file "source/parameters")
(:file "source/introduction") (:file "source/installation")
(:file "source/basic-operation") (:file "source/upgrade-notes")
(:file "source/assembly")))
\ No newline at end of file
(:gdl "source/understanding-common-lisp")
(:gdl "source/understanding-gendl")
(:gdl "source/advanced-common-lisp")
(:gdl "source/advanced-gendl") (:file "source/assembly")))
\ No newline at end of file
......@@ -112,4 +112,32 @@
\newlabel{sec:savingtheworld}{{3.5}{18}{Saving the World\relax }{section.3.5}{}}
\@writefile{toc}{\contentsline {section}{\numberline {3.6}Starting up a Saved World}{19}{section.3.6}}
\newlabel{sec:startingupasavedworld}{{3.6}{19}{Starting up a Saved World\relax }{section.3.6}{}}
\newlabel{chap:upgradenotes}{{3.6}{21}{Upgrade Notes\relax }{chapter*.5}{}}
\@writefile{toc}{\contentsline {chapter}{\numberline {4}Understanding Common Lisp}{21}{chapter.4}}
\@writefile{lof}{\addvspace {10\p@ }}
\@writefile{lot}{\addvspace {10\p@ }}
\newlabel{chap:understandingcommonlisp}{{4}{21}{Understanding Common Lisp\relax }{chapter.4}{}}
\@writefile{toc}{\contentsline {section}{\numberline {4.1}S-expression Fundamentals}{21}{section.4.1}}
\newlabel{sec:s-expressionfundamentals}{{4.1}{21}{S-expression Fundamentals\relax }{section.4.1}{}}
\@writefile{toc}{\contentsline {section}{\numberline {4.2}Fundamental CL Data Types}{22}{section.4.2}}
\newlabel{sec:fundamentalcldatatypes}{{4.2}{22}{Fundamental CL Data Types\relax }{section.4.2}{}}
\@writefile{toc}{\contentsline {subsection}{\numberline {4.2.1}Numbers}{22}{subsection.4.2.1}}
\newlabel{subsec:numbers}{{4.2.1}{22}{Numbers\relax }{subsection.4.2.1}{}}
\@writefile{toc}{\contentsline {subsection}{\numberline {4.2.2}Strings}{22}{subsection.4.2.2}}
\newlabel{subsec:strings}{{4.2.2}{22}{Strings\relax }{subsection.4.2.2}{}}
\@writefile{toc}{\contentsline {subsection}{\numberline {4.2.3}Symbols}{23}{subsection.4.2.3}}
\newlabel{subsec:symbols}{{4.2.3}{23}{Symbols\relax }{subsection.4.2.3}{}}
\@writefile{toc}{\contentsline {subsection}{\numberline {4.2.4}Lists}{24}{subsection.4.2.4}}
\newlabel{subsec:lists}{{4.2.4}{24}{Lists\relax }{subsection.4.2.4}{}}
\@writefile{toc}{\contentsline {chapter}{\numberline {5}Understanding Gendl}{25}{chapter.5}}
\@writefile{lof}{\addvspace {10\p@ }}
\@writefile{lot}{\addvspace {10\p@ }}
\newlabel{chap:understandinggendl}{{5}{25}{Understanding Gendl\relax }{chapter.5}{}}
\@writefile{toc}{\contentsline {chapter}{\numberline {6}More Common Lisp for Gendl}{27}{chapter.6}}
\@writefile{lof}{\addvspace {10\p@ }}
\@writefile{lot}{\addvspace {10\p@ }}
\newlabel{chap:morecommonlispforgendl}{{6}{27}{More Common Lisp for Gendl\relax }{chapter.6}{}}
\@writefile{toc}{\contentsline {chapter}{\numberline {7}Advanced Gendl}{29}{chapter.7}}
\@writefile{lof}{\addvspace {10\p@ }}
\@writefile{lot}{\addvspace {10\p@ }}
\newlabel{chap:advancedgendl}{{7}{29}{Advanced Gendl\relax }{chapter.7}{}}
\newlabel{chap:upgradenotes}{{7}{31}{Upgrade Notes\relax }{chapter*.5}{}}
This is pdfTeX, Version 3.1415926-2.4-1.40.13 (TeX Live 2012/MacPorts 2012_1) (format=pdflatex 2012.8.4) 19 NOV 2012 23:04
This is pdfTeX, Version 3.1415926-2.4-1.40.13 (TeX Live 2012/MacPorts 2012_1) (format=pdflatex 2012.8.4) 20 NOV 2012 18:49
entering extended mode
restricted \write18 enabled.
%&-line parsing enabled.
......@@ -386,7 +386,7 @@ Chapter 1.
]
Chapter 2.
<../images/gendl-installation.png, id=239, 127.40933pt x 70.12866pt>
<../images/gendl-installation.png, id=289, 127.40933pt x 70.12866pt>
File: ../images/gendl-installation.png Graphic file (type png)
<use ../images/gendl-installation.png>
......@@ -400,14 +400,14 @@ man-ager, right-mouse on the \OT1/cmtt/m/n/10.95 run-gdl.bat
[]
[6 <../images/gendl-installation.png>]
<../images/mini-buffer.png, id=267, 687.56876pt x 613.29124pt>
<../images/mini-buffer.png, id=318, 687.56876pt x 613.29124pt>
File: ../images/mini-buffer.png Graphic file (type png)
<use ../images/mini-buffer.png>
Package pdftex.def Info: ../images/mini-buffer.png used on input line 401.
(pdftex.def) Requested size: 216.80562pt x 216.8075pt.
<../images/genworks-gendl-console.png, id=269, 318.52333pt x 212.52733pt>
<../images/genworks-gendl-console.png, id=320, 318.52333pt x 212.52733pt>
File: ../images/genworks-gendl-console.png Graphic file (type png)
<use ../images/genworks-gendl-console.png>
......@@ -426,14 +426,14 @@ Overfull \hbox (16.66708pt too wide) in paragraph at lines 457--458
ys-tem, type: \OT1/cmtt/m/n/10.95 (ql:quickload :genworks-gdl)
[]
<../images/tasty-robot.png, id=290, 542.29266pt x 441.11467pt>
<../images/tasty-robot.png, id=340, 542.29266pt x 441.11467pt>
File: ../images/tasty-robot.png Graphic file (type png)
<use ../images/tasty-robot.png>
Package pdftex.def Info: ../images/tasty-robot.png used on input line 494.
(pdftex.def) Requested size: 216.81392pt x 216.8077pt.
<../images/tasty-robot-x3dom.png, id=291, 543.36333pt x 440.044pt>
<../images/tasty-robot-x3dom.png, id=341, 543.36333pt x 440.044pt>
File: ../images/tasty-robot-x3dom.png Graphic file (type png)
<use ../images/tasty-robot-x3dom.png>
......@@ -509,12 +509,47 @@ and I'll forget about whatever was undefined.
[19] [20
]
Chapter 4.
! LaTeX Error: Something's wrong--perhaps a missing \item.
See the LaTeX manual or LaTeX Companion for explanation.
Type H <return> for immediate help.
...
l.1098 \end{itemize}
Try typing <return> to proceed.
If that doesn't work, type X <return> to quit.
[21] [22] [23]
Missing character: There is no in font cmtt10!
Missing character: There is no in font cmtt10!
Missing character: There is no in font cmtt10!
Missing character: There is no in font cmtt10!
Missing character: There is no in font cmtt10!
Missing character: There is no in font cmtt10!
[24]
Chapter 5.
[25
] [26
LaTeX Warning: Reference `subsec:usingquicklisp' on page 21 undefined on input
line 1071.
]
Chapter 6.
[27] [28
]
Chapter 7.
[29] [30
]
LaTeX Warning: Reference `subsec:usingquicklisp' on page 31 undefined on input
line 1374.
! Undefined control sequence.
l.1082 \textt
l.1385 \textt
{"3rdpty/"} directory are no longer needed or available. Instea...
The control sequence at the end of the top line
of your error message was never \def'ed. If you have
......@@ -523,22 +558,22 @@ spelling (e.g., `I\hbox'). Otherwise just continue,
and I'll forget about whatever was undefined.
LaTeX Warning: Reference `subsec:usingquicklisp' on page 21 undefined on input
line 1084.
LaTeX Warning: Reference `subsec:usingquicklisp' on page 31 undefined on input
line 1387.
[21] [22] (./tutorial.ind [23
[31] [32] (./tutorial.ind [33
])
Package atveryend Info: Empty hook `BeforeClearDocument' on input line 1124.
Package atveryend Info: Empty hook `AfterLastShipout' on input line 1124.
Package atveryend Info: Empty hook `BeforeClearDocument' on input line 1427.
Package atveryend Info: Empty hook `AfterLastShipout' on input line 1427.
(./tutorial.aux)
Package atveryend Info: Executing hook `AtVeryEndDocument' on input line 1124.
Package atveryend Info: Executing hook `AtEndAfterFileList' on input line 1124.
Package atveryend Info: Executing hook `AtVeryEndDocument' on input line 1427.
Package atveryend Info: Executing hook `AtEndAfterFileList' on input line 1427.
Package rerunfilecheck Info: File `tutorial.out' has not changed.
(rerunfilecheck) Checksum: AA79E774B56C58CFEF5C99DEDD80CDC3;2637.
(rerunfilecheck) Checksum: DAC915B09C329CD8B950F8D61F0015D3;3251.
LaTeX Font Warning: Some font shapes were not available, defaults substituted.
......@@ -546,16 +581,16 @@ LaTeX Font Warning: Some font shapes were not available, defaults substituted.
LaTeX Warning: There were undefined references.
Package atveryend Info: Empty hook `AtVeryVeryEnd' on input line 1124.
Package atveryend Info: Empty hook `AtVeryVeryEnd' on input line 1427.
)
Here is how much of TeX's memory you used:
6025 strings out of 494751
90618 string characters out of 3171015
171706 words of memory out of 3000000
9034 multiletter control sequences out of 15000+200000
6065 strings out of 494751
91176 string characters out of 3171015
172166 words of memory out of 3000000
9054 multiletter control sequences out of 15000+200000
12647 words of font info for 44 fonts, out of 3000000 for 9000
142 hyphenation exceptions out of 8191
29i,8n,28p,362b,526s stack positions out of 5000i,500n,10000p,200000b,50000s
29i,8n,28p,395b,526s stack positions out of 5000i,500n,10000p,200000b,50000s
{/opt/local/share/texmf-texlive-dist/fonts/enc/dvips/cm-super/cm-super-ts1.en
c}</opt/local/share/texmf-texlive-dist/fonts/type1/public/amsfonts/cm/cmbx10.pf
b></opt/local/share/texmf-texlive-dist/fonts/type1/public/amsfonts/cm/cmbx12.pf
......@@ -573,10 +608,10 @@ ocal/share/texmf-texlive-dist/fonts/type1/public/amsfonts/cm/cmtt10.pfb></opt/l
ocal/share/texmf-texlive-dist/fonts/type1/public/amsfonts/cm/cmtt9.pfb></opt/lo
cal/share/texmf-texlive-dist/fonts/type1/public/cm-super/sfrm0900.pfb></opt/loc
al/share/texmf-texlive-dist/fonts/type1/public/cm-super/sfrm1095.pfb>
Output written on tutorial.pdf (27 pages, 421233 bytes).
Output written on tutorial.pdf (37 pages, 437482 bytes).
PDF statistics:
547 PDF objects out of 1000 (max. 8388607)
491 compressed objects within 5 object streams
158 named destinations out of 1000 (max. 500000)
306 words of extra memory for PDF output out of 10000 (max. 10000000)
645 PDF objects out of 1000 (max. 8388607)
578 compressed objects within 6 object streams
178 named destinations out of 1000 (max. 500000)
386 words of extra memory for PDF output out of 10000 (max. 10000000)
......@@ -33,3 +33,13 @@
\BOOKMARK [1][-]{section.3.4}{Customizing your Environment}{chapter.3}% 33
\BOOKMARK [1][-]{section.3.5}{Saving the World}{chapter.3}% 34
\BOOKMARK [1][-]{section.3.6}{Starting up a Saved World}{chapter.3}% 35
\BOOKMARK [0][-]{chapter.4}{Understanding Common Lisp}{}% 36
\BOOKMARK [1][-]{section.4.1}{S-expression Fundamentals}{chapter.4}% 37
\BOOKMARK [1][-]{section.4.2}{Fundamental CL Data Types}{chapter.4}% 38
\BOOKMARK [2][-]{subsection.4.2.1}{Numbers}{section.4.2}% 39
\BOOKMARK [2][-]{subsection.4.2.2}{Strings}{section.4.2}% 40
\BOOKMARK [2][-]{subsection.4.2.3}{Symbols}{section.4.2}% 41
\BOOKMARK [2][-]{subsection.4.2.4}{Lists}{section.4.2}% 42
\BOOKMARK [0][-]{chapter.5}{Understanding Gendl}{}% 43
\BOOKMARK [0][-]{chapter.6}{More Common Lisp for Gendl}{}% 44
\BOOKMARK [0][-]{chapter.7}{Advanced Gendl}{}% 45
......@@ -1048,6 +1048,309 @@ to stop it from loading redundant code which is already in the saved image.
\chapter{Understanding Common Lisp}
\label{chap:understandingcommonlisp}
Gendl is a superset of Common Lisp, and is embedded in Common
Lisp. This means that when working with Gendl, you have the full power
of CL available to you. The lowest-level expressions in a Gendl
definition are CL ``symbolic expressions,'' or ``s-expressions.''
This chapter will familiarize you with CL s-expressions.
\section{S-expression Fundamentals}
\label{sec:s-expressionfundamentals}
S-expressions can be used in your definitions to establish
the value of a particular \emph{slot} in an object, which will be computed on-demand. You can also
evaluate S-expressions at the toplevel \texttt{gdl-user\textgreater} prompt, and see the result immediately. In fact, this toplevel prompt is called a \emph{read-eval-print} loop, because its purpose is to \emph{read} each s-expression entered, \emph{evaluate} the expression to yield a result (or \emph{return-value}), and finally to \emph{print} that result.
CL s-expressions use a \emph{prefix} notation, which means that they consist of either an \emph{atom} (e.g. number, text string, symbol) or a list (one or more
items enclosed by parentheses, where the first item is
taken as a symbol which names an operator). Here is an example:
\begin{verbatim}(+ 2 2)
\end{verbatim}This expression consists of the function named by the symbol \texttt{+}, followed by the numeric arguments \texttt{2} and another \texttt{2}. As you may have guessed, when this expression is evaluated it will return the value 4.\emph{Try it: }try typing this expression at your command prompt, and see
the return-value being printed on the console. What is actually
happening here? When CL is asked to evaluate an expression, it
processes the expression according to the following rules:
\begin{itemize}
\item If the expression is an \emph{atom} (e.g. a non-list datatype such as a number, text
string, or literal symbol), it simply evaluates to itself. Examples:
\begin{itemize}
\end{itemize}
Note that numbers are represented directly (with decimal
points and slashes for fractions allowed), strings are surrounded by
double-quotes, and literal symbols are introduced with a preceding
single-quote. Symbols are allowed to have dashes (``-'') and most
other special characters. By convention, the dash is used as a word
separator in CL symbols.
\item If the expression is a list (i.e. is surrounded by
parentheses), CL processes the \emph{first} element in this list as an \emph{operator name}, and the \emph{rest} of the elements in the list represent the \emph{arguments} to the operator. An operator can take zero or more
arguments, and can return zero or more return-values. Some operators
evaluate their arguments immediately and work directly on those
values (these are called \emph{functions}. Other operators expand into other code. These are called \emph{special operators} or \emph{macros}. Macros are what give Lisp (and CL in particular) its
special power. Here are some examples of functional s-expressions:
\begin{itemize}
\item
\begin{verbatim}gdl-user> (expt 2 5)
32
\end{verbatim}
\item
\begin{verbatim}gdl-user> (+ 2 5)
7
\end{verbatim}
\item
\begin{verbatim}gdl-user> (+ 2)
2
\end{verbatim}
\item
\begin{verbatim}gdl-user> (+ (+ 2 2) (+ 3 3 ))
10
\end{verbatim}
\end{itemize}
\end{itemize}
\section{Fundamental CL Data Types}
\label{sec:fundamentalcldatatypes}
As we have seen, Common Lisp natively supports
many data types common to other languages, such as numbers and text
strings. CL also contains several compound data types such as lists,
arrays, and hash tables. CL contains \emph{symbols} as well, which typically are used as names for other data elements.
Regarding data types, CL follows a paradigm called dynamic
typing. Basically this means that values have type, but variables do
not necessarily have type, and typically variables are not
``pre-declared'' to be of a particular type.
\subsection{Numbers}
\label{subsec:numbers}
As we have seen, numbers in CL are a native
data type which simply evaluate to themselves when entered at the
toplevel or included in an expression.
Numbers in CL form a hierarchy of types, which includes Integers,
Ratios, Floating Point, and Complex numbers. For many purposes, you
only need to think of a value as a ``number'' without getting any more
specific than that. Most arithmetic operations, such as \texttt{+}, \texttt{-}, \texttt{*}, \texttt{/} etc, will automaticaly do any necessary type coercion on their
arguments and will return a number of the appropriate type.
CL supports a full range of floating-point decimal numbers, as well as
true Ratios, which means that \texttt{1/3} is a true one-third, not \texttt{0.333333333} rounded off at some arbitrary precision.
\subsection{Strings}
\label{subsec:strings}
Strings are actually a specialized kind of
array, namely a one-dimensional array (vector) made up of text
characters. These characters can be letters, numbers, or punctuation,
and in some cases can include characters from international character
sets (e.g. Unicode or UTF-8) such as Chinese Hanzi or Japanese
Kanji. The string delimiter in CL is the double-quote character.
As we have seen, strings in CL are a native data type which simply
evaluate to themselves when included in an expression.
\subsection{Symbols}
\label{subsec:symbols}
Symbols are such an important data structure in CL, that people
sometimes refer to CL as a ``Symbolic Computing Language.'' Symbols
are a type of CL object which provides your program with a built-in
mechanism to store and retrieve values and functions, as well as being
useful in their own right. A symbol is most often known by its name
(actually a string), but in fact there is much more to a symbol than
its name. In addition to the name, symbols also contain a \emph{function} slot, a \emph{value} slot, and an open-ended \emph{property-list} slot in which you can store an arbitrary number of named properties.
For a named function such as \texttt{+} the function-slot contains the actual function
object for performing numeric addition. The value-slot of a symbol can
contain any value, allowing the symbol to act as a global variable, or \emph{parameter}. And the property-list, also known as the \emph{plist} slot, can contain an arbitrary amount of information.
This separation of the symbol data structure into function, value, and
plist slots is one obvious distinction between Common Lisp and most
other Lisp dialects. Most other dialects allow only one (1) ``thing''
to be stored in the symbol data structure, other than its name
(e.g. either a function or a value, but not both at the same
time). Because Common Lisp does not impose this restriction, it is not
necessary to contrive names, for example for your variables, to avoid
conflicting with existing ``reserved words'' in the system. For
example, \texttt{list} is the name of a built-in function in CL. But you
may freely use \texttt{list} as a variable name as well. There is no need to
contrive arbitrary abbreviations such as \texttt{lst}.
How symbols are evaluated depends on where they occur in an
expression. As we have seen, if a symbol appears first in a list
expression, as with the \texttt{+} in \texttt{(+ 2 2)}, the symbol is evaluated for its function slot. If the first
element of an expression indeed has a function in its function slot, then any
subsequent symbol in the expression is taken as a variable, and it is evaluated
for its global or local value, depending on its scope (more on variables and
scope later).
As noted in Section 3.1.3, if you want a literal symbol itself, one
way to achieve this is to ``quote'' the symbol name:
\begin{verbatim}'a
\end{verbatim}
Another way is for the symbol to appear within a quoted list expression, for example:
\begin{verbatim}'(a b c)
\end{verbatim} or
\begin{verbatim}'(a (b c) d)
\end{verbatim}
Note that the quote (\texttt{'}) applies across everything in the list expression, including any sub- expressions.
\subsection{Lists}
\label{subsec:lists}
Lisp takes its name from its strong support for the list data
structure. The list concept is important to CL for more than this
reason alone --- most notably, lists are important because \emph{all CL programs are themselves lists.}
Having the list as a native data structure, as well as the form of all
programs, means that it is straightforward for CL programs to compute
and generate other CL programs. Likewise, CL programs can read and
manipulate other CL programs in a natural manner. This cannot be said
of most other languages, and is one of the primary distinguishing
characteristics of Lisp as a language.
Textually, a list is defined as zero or more elements surrounded by
parentheses. The elements can be objects of any valid CL data types,
such as numbers, strings, symbols, lists, or other kinds of
objects. As we have seen, you must quote a literal list to evaluate it
or CL will assume you are calling a function. Now look at the
following list:
\begin{verbatim}(defun hello () (write-string "Hello, World!"))
\end{verbatim}This list also happens to be a valid CL program (function definition,
in this case). Don't worry about analyzing the function definition
right now, but do take a few moments to convince yourself that it
meets the requirements for a list.
What are the types of the elements in this list?
In addition to using the quote (') to produce a literal list, another
way to produce a list is to call the function \texttt{list}. The function \texttt{list} takes any number of arguments, and returns a list made up
from the result of evaluating each argument. As with all functions,
the arguments to the \texttt{list} function get evaluated, from left to right, before being
processed by the function. For example:
\begin{verbatim}(list ’a ’b (+ 2 2))
\end{verbatim}will return the list
\begin{verbatim}(a b 4)
\end{verbatim}. The two quoted symbols evaluate to symbols, and the function
call \texttt{(+ 2 2)} evaluates to the number 4.
\chapter{Understanding Gendl}
\label{chap:understandinggendl}
\chapter{More Common Lisp for Gendl}
\label{chap:morecommonlispforgendl}
\chapter{Advanced Gendl}
\label{chap:advancedgendl}
\chapter*{Upgrade Notes}
\label{chap:upgradenotes}
......
......@@ -36,3 +36,13 @@
\contentsline {section}{\numberline {3.4}Customizing your Environment}{18}{section.3.4}
\contentsline {section}{\numberline {3.5}Saving the World}{18}{section.3.5}
\contentsline {section}{\numberline {3.6}Starting up a Saved World}{19}{section.3.6}
\contentsline {chapter}{\numberline {4}Understanding Common Lisp}{21}{chapter.4}
\contentsline {section}{\numberline {4.1}S-expression Fundamentals}{21}{section.4.1}
\contentsline {section}{\numberline {4.2}Fundamental CL Data Types}{22}{section.4.2}
\contentsline {subsection}{\numberline {4.2.1}Numbers}{22}{subsection.4.2.1}
\contentsline {subsection}{\numberline {4.2.2}Strings}{22}{subsection.4.2.2}
\contentsline {subsection}{\numberline {4.2.3}Symbols}{23}{subsection.4.2.3}
\contentsline {subsection}{\numberline {4.2.4}Lists}{24}{subsection.4.2.4}
\contentsline {chapter}{\numberline {5}Understanding Gendl}{25}{chapter.5}
\contentsline {chapter}{\numberline {6}More Common Lisp for Gendl}{27}{chapter.6}
\contentsline {chapter}{\numberline {7}Advanced Gendl}{29}{chapter.7}
;;
;; Copyright 2002, 2009, 2012 Genworks International
;;
;; This source file is part of the General-purpose Declarative
;; Language project (GDL).
;;
;; This source file contains free software: you can redistribute it
;; and/or modify it under the terms of the GNU Affero General Public
;; License as published by the Free Software Foundation, either
;; version 3 of the License, or (at your option) any later version.
;;
;; This source file is distributed in the hope that it will be useful,
;; but WITHOUT ANY WARRANTY; without even the implied warranty of
;; MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
;; Affero General Public License for more details.
;;
;; You should have received a copy of the GNU Affero General Public
;; License along with this source file. If not, see
;; <http://www.gnu.org/licenses/>.
;;
(in-package :gendl-doc)
(defparameter *advanced-common-lisp*
`((:chapter :title "More Common Lisp for Gendl")
))
;;
;; Copyright 2002, 2009, 2012 Genworks International
;;
;; This source file is part of the General-purpose Declarative
;; Language project (GDL).
;;
;; This source file contains free software: you can redistribute it
;; and/or modify it under the terms of the GNU Affero General Public
;; License as published by the Free Software Foundation, either
;; version 3 of the License, or (at your option) any later version.
;;
;; This source file is distributed in the hope that it will be useful,
;; but WITHOUT ANY WARRANTY; without even the implied warranty of
;; MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
;; Affero General Public License for more details.
;;
;; You should have received a copy of the GNU Affero General Public
;; License along with this source file. If not, see
;; <http://www.gnu.org/licenses/>.
;;
(in-package :gendl-doc)
(defparameter *advanced-gendl*
`((:chapter :title "Advanced Gendl")
))
......@@ -49,6 +49,10 @@ written consent from Genworks International.")
,*introduction*
,*installation*