diff --git a/changelog b/changelog index 8c3515b..f6eef17 100644 --- a/changelog +++ b/changelog @@ -1,3 +1,5 @@ +20140628 tpd src/axiom-website/patches.html 20140628.02.tpd.patch +20140628 tpd src/input/dbtest.input remove failing input file 20140628 tpd src/axiom-website/patches.html 20140628.01.tpd.patch 20140628 tpd Makefile modified, noweb removed 20140628 tpd Makefile.pamphlet modified, noweb removed diff --git a/patch b/patch index 64827ff..c8de758 100644 --- a/patch +++ b/patch @@ -1,163 +1,4 @@ -remove noweb +src/input/dbtest.input.pamphlet remove failing input file -This update removes all use of the noweb syntax so we can remove -the noweb package. Axiom used four parts of noweb, the notangle -function, the noweave function, the chunk syntax, and the [[ ]] -quoting mechanism. - -The notangle function is now both at the C level, from -books/tangle.c and the lisp level books/tangle.lisp. This is also -built into the Axiom image so that given - foo.input.pamphlet -you can extract and run foo.input with the command - )tangle foo - )read foo - -The noweave function is not used. Pamphlet files are now valid latex -files so the latex command can be used directly. - -The chunk syntax has been replaced - <>= becomes \begin{chunk}{foo} - <> becomes \getchunk{foo} - @ becomes \end{chunk} - -The [[foo]] quoting syntax is replaced with \verb|foo| - -The primary remaining use of noweb was in the Makefiles. -These have been rewritten to eliminate noweb use. - -# modified: Makefile -# modified: Makefile.pamphlet -# modified: lsp/Makefile.pamphlet -# modified: src/Makefile.pamphlet -# modified: src/algebra/Makefile.pamphlet -# modified: src/clef/Makefile.pamphlet -# modified: src/doc/Makefile.pamphlet -# modified: src/etc/Makefile.pamphlet -# modified: src/input/Makefile.pamphlet -# modified: src/interp/Makefile.pamphlet -# modified: src/lib/Makefile.pamphlet -# modified: src/scripts/Makefile.pamphlet -# modified: src/share/Makefile.pamphlet - -The src/sman directory only contained a Makefile. -This has been absorbed into other Makefiles and removed - -# deleted: src/sman/Makefile.pamphlet - -Many c and src/input file contained the original version using noweb. -These were updated to use the chunk syntax. - -# modified: faq -# modified: books/bookvol11.pamphlet -# modified: src/clef/edible.c.pamphlet -# modified: src/doc/booklet.c.pamphlet -# modified: src/etc/asq.c.pamphlet -# modified: src/input/aseg6.as.pamphlet -# modified: src/input/aseg7.as.pamphlet -# modified: src/input/cohen.input.pamphlet -# modified: src/input/draw2dsf.data.pamphlet -# modified: src/input/draw2dsf.input.pamphlet -# modified: src/input/ecfact.as.pamphlet -# modified: src/input/hilbert.as.pamphlet -# modified: src/input/matops.as.pamphlet -# modified: src/input/pdecomp0.as.pamphlet -# modified: src/input/romnum.as.pamphlet -# modified: src/lib/bsdsignal.c.pamphlet -# modified: src/lib/cfuns-c.c.pamphlet -# modified: src/lib/cursor.c.pamphlet -# modified: src/lib/edin.c.pamphlet -# modified: src/lib/emupty.c.pamphlet -# modified: src/lib/fnct-key.c.pamphlet -# modified: src/lib/halloc.c.pamphlet -# modified: src/lib/hash.c.pamphlet -# modified: src/lib/openpty.c.pamphlet -# modified: src/lib/pixmap.c.pamphlet -# modified: src/lib/prt.c.pamphlet -# modified: src/lib/sockio-c.c.pamphlet -# modified: src/lib/spadcolors.c.pamphlet -# modified: src/lib/util.c.pamphlet -# modified: src/lib/wct.c.pamphlet -# modified: src/lib/xdither.c.pamphlet -# modified: src/lib/xshade.c.pamphlet -# modified: src/lib/xspadfill.c.pamphlet - -Some newer pamphlet files were still using the old syntax. -In particular, the 'richxxx' files are the inputs for the -computer algebra test suite (CATS) effort. - -# new file: src/input/cohen1.input -# new file: src/input/dbtest.input.pamphlet -# new file: src/input/diffeqex.input.pamphlet -# new file: src/input/examples.input.pamphlet -# new file: src/input/fresnel.input.pamphlet -# new file: src/input/groebner.input.pamphlet -# new file: src/input/lyapunov.input.pamphlet -# new file: src/input/oktofail.input.pamphlet -# new file: src/input/rich13.input.pamphlet -# new file: src/input/rich14a.input.pamphlet -# new file: src/input/rich14b.input.pamphlet -# new file: src/input/rich14c.input.pamphlet -# new file: src/input/rich15.input.pamphlet -# new file: src/input/rich16.input.pamphlet -# new file: src/input/rich17.input.pamphlet -# new file: src/input/rich18.input.pamphlet -# new file: src/input/rich19.input.pamphlet -# new file: src/input/rich20a.input.pamphlet -# new file: src/input/rich20b.input.pamphlet -# new file: src/input/rich20c.input.pamphlet -# new file: src/input/rich21.input.pamphlet -# new file: src/input/rich22a.input.pamphlet -# new file: src/input/rich22b.input.pamphlet -# new file: src/input/rich22c.input.pamphlet -# new file: src/input/rich22d.input.pamphlet -# new file: src/input/rich23.input.pamphlet -# new file: src/input/rich24a.input.pamphlet -# new file: src/input/rich24b.input.pamphlet -# new file: src/input/rich24c.input.pamphlet -# new file: src/input/rich24d.input.pamphlet -# new file: src/input/rich25.input.pamphlet -# new file: src/input/richder13.input.pamphlet -# new file: src/input/richder14a.input.pamphlet -# new file: src/input/richder14b.input.pamphlet -# new file: src/input/richder14c.input.pamphlet -# new file: src/input/richder15.input.pamphlet -# new file: src/input/richder16.input.pamphlet -# new file: src/input/richder17.input.pamphlet -# new file: src/input/richder18.input.pamphlet -# new file: src/input/richder19.input.pamphlet -# new file: src/input/richder20a.input.pamphlet -# new file: src/input/richder20b.input.pamphlet -# new file: src/input/richder20c.input.pamphlet -# new file: src/input/richder21.input.pamphlet -# new file: src/input/richder22a.input.pamphlet -# new file: src/input/richder22b.input.pamphlet -# new file: src/input/richder22c.input.pamphlet -# new file: src/input/richder22d.input.pamphlet -# new file: src/input/richder23.input.pamphlet -# new file: src/input/richder24a.input.pamphlet -# new file: src/input/richder24b.input.pamphlet -# new file: src/input/richder24c.input.pamphlet -# new file: src/input/richder24d.input.pamphlet -# new file: src/input/richder8b.input.pamphlet -# new file: src/input/richder8c.input.pamphlet -# new file: src/input/richder8d.input.pamphlet -# new file: src/input/series3.input.pamphlet - -And now we can delete our copy of noweb and local changes. - -# deleted: zips/noweb-2.10a.tgz -# deleted: zips/noweb.modules.c.patch -# deleted: zips/noweb.modules.nw.patch -# deleted: zips/noweb.src.Makefile.nw.patch -# deleted: zips/noweb.src.Makefile.patch -# deleted: zips/noweb.src.awk.totex.nw.patch -# deleted: zips/noweb.src.awkname.patch -# deleted: zips/noweb.src.lib.toascii.nw.patch -# deleted: zips/noweb.src.lib.toascii.patch -# deleted: zips/noweb.src.shell.cpif.patch -# deleted: zips/noweb.src.shell.nonu.patch -# deleted: zips/noweb.src.shell.noroff.patch -# deleted: zips/noweb.src.shell.roff.mm.patch -# deleted: zips/noweb.src.shell.roff.nw.patch -# deleted: zips/noweb.src.shell.toroff.patch +This input file mixes hypertex and latex syntax in complex ways. +As a result it fails to be properly formatted. It has been removed. diff --git a/src/axiom-website/patches.html b/src/axiom-website/patches.html index 1197158..987e7d9 100644 --- a/src/axiom-website/patches.html +++ b/src/axiom-website/patches.html @@ -4500,6 +4500,8 @@ Makefile books/Makefile.pamphlet books/tangle.c books/extract Makefile.pamphlet src/Makefile.pamphlet use chunk syntax 20140628.01.tpd.patch zips/noweb-2.10a.tgz deleted, noweb removed +20140628.02.tpd.patch +src/input/dbtest.input remove failing input file diff --git a/src/input/dbtest.input.pamphlet b/src/input/dbtest.input.pamphlet deleted file mode 100644 index a2db639..0000000 --- a/src/input/dbtest.input.pamphlet +++ /dev/null @@ -1,1154 +0,0 @@ -\documentclass{article} -\setlength{\textwidth}{400pt} -\usepackage{axiom} -\begin{document} -\title{\$SPAD/src/input algaggr.input} -\author{Timothy Daly} -\maketitle -\begin{abstract} -\end{abstract} -\eject -\tableofcontents -\eject -\begin{verbatim} -Building A Query Facility - -We now turn to an entirely different kind of application, -building a query language for a database. - -Here is the practical problem to solve. The hyperdoc facility of -Axiom has a database for all operations and constructors which is -stored on disk and accessed by Hyperdoc. For our purposes here, we -regard each line of this file as having eight fields: -\begin{itemize} -\item class -\item name -\item type -\item nargs -\item exposed -\item kind -\item origin -\item condition -\end{itemize} - -\begin{chunk}{*} -\getchunk{ug13.ht} -\end{chunk} - -Here is an example entry: - -begin{verbatim} - o`determinant`$->R`1`x`d`Matrix(R)`has(R,commutative("*")) -end{verbatim} - -In English, the entry means that the operation -begin{verbatim} - determinant: $ -> R -end{verbatim} -with it 1 argument, is exposed and is exported by the domain -Matrix(R) if R has commutative("*"). - -Our task is to create a little query language that allows us -to get useful information from this database. - -First we design a simple language for accessing information from the -database. We have the following simple model in mind for its design. -Think of the database as a box of index cards. There is only one -search operation---it takes the name of a field and a predicate (a -boolean-valued function) defined on the fields of the index cards. -When applied, the search operation goes through the entire box -selecting only those index cards for which the predicate is true. The -result of a search is a new box of index cards. This process can be -repeated again and again. - -The predicates all have a particularly simple form: -begin{verbatim} - symbol = pattern -end{verbatim} -where symbol designates one of the fields, and pattern is a -``search string''---a string that may contain a ``*'' as a -wildcard. Wildcards match any substring, including the empty string. -Thus the pattern ``*ma*t'' matches ``mat'', ``doormat'' and ``smart''. - -To illustrate how queries are given, we give you a sneak preview -of the facility we are about to create. - -Extract the database of all Axiom operations. -begin{verbatim} - ops := getDatabase("o") -end{verbatim} - -How many exposed three-argument ``map'' operations involving streams? -begin{verbatim} - ops.(name="map").(nargs="3").(type="*Stream*") -end{verbatim} - -As usual, the arguments of elt associate to the left. -The first elt produces the set of all operations with -name {\tt map}. -The second elt produces the set of all map operations -with three arguments. -The third elt produces the set of all three-argument map -operations having a type mentioning Stream. - -Another thing we'd like to do is to extract one field from each of -the index cards in the box and look at the result. -Here is an example of that kind of request. - -What constructors explicitly export a determinant operation? - -elt(elt(elt(elt(ops,name="determinant"),origin),sort),unique) - - -The first elt produces the set of all index cards with -name {\tt determinant}. -The second elt extracts the {\tt origin} component from -each index card. Each origin component -is the name of a constructor which directly -exports the operation represented by the index card. -Extracting a component from each index card produces what we call -a {\it datalist}. -The third elt, {\tt sort}, causes the datalist of -origins to be sorted in alphabetic -order. -The fourth, {\tt unique}, causes duplicates to be removed. - -Before giving you a more extensive demo of this facility, -we now build the necessary domains and packages to implement it. -%We will introduce a few of our minor conveniences. - -\endscroll -\autobuttons -\end{page} - -\begin{patch}{ugDomainsQueryLanguagePagePatch1} -\begin{paste}{ugDomainsQueryLanguagePageFull1} -{ugDomainsQueryLanguagePageEmpty1} -\pastebutton{ugDomainsQueryLanguagePageFull1}{\hidepaste} -\tab{5}\spadcommand{ops := getDatabase("o")\bound{o1 }} -\indentrel{3}begin{verbatim} - (1) 6315 - Type: Database IndexCard -end{verbatim} -\indentrel{-3}\end{paste}\end{patch} - -\begin{patch}{ugDomainsQueryLanguagePageEmpty1} -\begin{paste}{ugDomainsQueryLanguagePageEmpty1} -{ugDomainsQueryLanguagePagePatch1} -\pastebutton{ugDomainsQueryLanguagePageEmpty1}{\showpaste} -\tab{5}\spadcommand{ops := getDatabase("o")\bound{o1 }} -\end{paste}\end{patch} - -\begin{patch}{ugDomainsQueryLanguagePagePatch2} -\begin{paste}{ugDomainsQueryLanguagePageFull2} -{ugDomainsQueryLanguagePageEmpty2} -\pastebutton{ugDomainsQueryLanguagePageFull2}{\hidepaste} -\tab{5} -\spadcommand{ops.(name="map").(nargs="3").(type="*Stream*") -\bound{o2 }\free{o1 }} -\indentrel{3}begin{verbatim} - (2) 3 - Type: Database IndexCard -end{verbatim} -\indentrel{-3}\end{paste}\end{patch} - -\begin{patch}{ugDomainsQueryLanguagePageEmpty2} -\begin{paste}{ugDomainsQueryLanguagePageEmpty2} -{ugDomainsQueryLanguagePagePatch2} -\pastebutton{ugDomainsQueryLanguagePageEmpty2}{\showpaste} -\tab{5} -\spadcommand{ops.(name="map").(nargs="3").(type="*Stream*") -\bound{o2 }\free{o1 }} -\end{paste}\end{patch} - -\begin{patch}{ugDomainsQueryLanguagePagePatch3} -\begin{paste}{ugDomainsQueryLanguagePageFull3} -{ugDomainsQueryLanguagePageEmpty3} -\pastebutton{ugDomainsQueryLanguagePageFull3}{\hidepaste} -\tab{5} -\spadcommand{elt(elt(elt(elt(ops,name="determinant"),origin),sort),unique) -\free{o1 }} -\indentrel{3}begin{verbatim} - (3) - ["InnerMatrixLinearAlgebraFunctions", - "MatrixCategory", "MatrixLinearAlgebraFunctions", - "SquareMatrixCategory"] - Type: DataList String -end{verbatim} -\indentrel{-3}\end{paste}\end{patch} - -\begin{patch}{ugDomainsQueryLanguagePageEmpty3} -\begin{paste}{ugDomainsQueryLanguagePageEmpty3} -{ugDomainsQueryLanguagePagePatch3} -\pastebutton{ugDomainsQueryLanguagePageEmpty3}{\showpaste} -\tab{5} -\spadcommand{elt(elt(elt(elt(ops,name="determinant"),origin),sort),unique) -\free{o1 }} -\end{paste}\end{patch} - -@ -\pagehead{ugDomainsDatabaseConstructorPage}{ug13.ht} -{The Database Constructor} -\begin{chunk}{ug13.ht} -\begin{page}{ugDomainsDatabaseConstructorPage} -{13.13.2. The Database Constructor} -\beginscroll - -We work from the top down. First, we define a database, -our box of index cards, as an abstract datatype. -For sake of illustration and generality, -we assume that an index card is some type S, and -that a database is a box of objects of type S. -Here is the Axiom program defining the \pspadtype{Database} -domain. - -\beginImportant - -\noindent -{\tt 1.\ \ \ PI\ ==>\ PositiveInteger}\newline -{\tt 2.\ \ \ Database(S):\ Exports\ ==\ Implementation\ where}\newline -{\tt 3.\ \ \ \ \ S:\ Object\ with\ }\newline -{\tt 4.\ \ \ \ \ \ \ elt:\ (\$,\ Symbol)\ ->\ String}\newline -{\tt 5.\ \ \ \ \ \ \ display:\ \$\ ->\ Void}\newline -{\tt 6.\ \ \ \ \ \ \ fullDisplay:\ \$\ ->\ Void}\newline -{\tt 7.\ \ \ }\newline -{\tt 8.\ \ \ \ \ Exports\ ==\ with}\newline -{\tt 9.\ \ \ \ \ \ \ elt:\ (\$,QueryEquation)\ ->\ \$}\newline -{\tt 10.\ \ \ \ \ \ elt:\ (\$,\ Symbol)\ ->\ DataList\ String}\newline -{\tt 11.\ \ \ \ \ \ "+":\ (\$,\$)\ ->\ \$}\newline -{\tt 12.\ \ \ \ \ \ "-":\ (\$,\$)\ ->\ \$}\newline -{\tt 13.\ \ \ \ \ \ display:\ \$\ ->\ Void}\newline -{\tt 14.\ \ \ \ \ \ fullDisplay:\ \$\ ->\ Void}\newline -{\tt 15.\ \ \ \ \ \ fullDisplay:\ (\$,PI,PI)\ ->\ Void}\newline -{\tt 16.\ \ \ \ \ \ coerce:\ \$\ ->\ OutputForm}\newline -{\tt 17.\ \ \ \ Implementation\ ==\ add}\newline -{\tt 18.\ \ \ \ \ \ \ \ ...}\newline -\endImportant - -The domain constructor takes a parameter S, which -stands for the class of index cards. -We describe an index card later. -Here think of an index card as a string which has -the eight fields mentioned above. - -First, we tell Axiom what operations we are going to require -from index cards. -We need an elt to extract the contents of a field -(such as {\tt name} and {\tt type}) as a string. -For example, c.name returns a string that is the content of the -name field on the index card c. -We need to display an index card in two ways: -\pspadfun{display} shows only the name and type of an -operation; -\pspadfun{fullDisplay} displays all fields. -The display operations return no useful information and thus have -return type Void. - -Next, we tell Axiom what operations the user can apply -to the database. -This part defines our little query language. -The most important operation is -{\frenchspacing\tt db . field = pattern} which -returns a new database, consisting of all index -cards of {\tt db} such that the field part of the index -card is matched by the string pattern called pattern. -The expression {\tt field = pattern} is an object of type -QueryEquation (defined in the next section). - -Another elt is needed to produce a DataList object. -Operation + is to merge two databases together; -- is used to subtract away common entries in a second -database from an initial database. -There are three display functions. -The \pspadfun{fullDisplay} function has two versions: one -that prints all the records, the other that prints only a fixed -number of records. -A coerce to OutputForm creates a display object. - -The {\tt Implementation} part of Database is straightforward. -\beginImportant - -\noindent -{\tt 1.\ \ \ \ \ Implementation\ ==\ add}\newline -{\tt 2.\ \ \ \ \ \ \ s:\ Symbol}\newline -{\tt 3.\ \ \ \ \ \ \ Rep\ :=\ List\ S}\newline -{\tt 4.\ \ \ \ \ \ \ elt(db,equation)\ ==\ ...}\newline -{\tt 5.\ \ \ \ \ \ \ -elt(db,key)\ ==\ [x.key\ for\ x\ in\ db]::DataList(String)}\newline -{\tt 6.\ \ \ \ \ \ \ -display(db)\ ==\ \ for\ x\ in\ db\ repeat\ display\ x}\newline -{\tt 7.\ \ \ \ \ \ \ -fullDisplay(db)\ ==\ for\ x\ in\ db\ repeat\ fullDisplay\ x}\newline -{\tt 8.\ \ \ \ \ \ \ -fullDisplay(db,\ n,\ m)\ ==\ for\ x\ in\ db\ for\ i\ in\ 1..m}\newline -{\tt 9.\ \ \ \ \ \ \ \ \ repeat}\newline -{\tt 10.\ \ \ \ \ \ \ \ \ \ if\ i\ >=\ n\ then\ fullDisplay\ x}\newline -{\tt 11.\ \ \ \ \ \ x+y\ ==\ removeDuplicates!\ merge(x,y)}\newline -{\tt 12.\ \ \ \ \ \ x-y\ ==\ mergeDifference(copy(x::Rep),}\newline -{\tt 13.\ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ -y::Rep)\$MergeThing(S)}\newline -{\tt 14.\ \ \ \ \ \ coerce(db):\ OutputForm\ ==\ (\#db)::\ OutputForm} -\newline -\endImportant - -The database is represented by a list of elements of S -(index cards). -We leave the definition of the first elt operation -(on line 4) until the next section. -The second elt collects all the strings with field name -{\it key} into a list. -The display function and first fullDisplay function -simply call the corresponding functions from S. -The second fullDisplay function provides an efficient way of -printing out a portion of a large list. -The + is defined by using the existing -\spadfunFrom{merge}{List} operation defined on lists, then -removing duplicates from the result. -The - operation requires writing a corresponding -subtraction operation. -A package MergeThing (not shown) provides this. - -The coerce function converts the database to an -OutputForm by computing the number of index cards. -This is a good example of the independence of -the representation of an Axiom object from how it presents -itself to the user. We usually do not want to look at a database---but -do care how many ``hits'' we get for a given query. -So we define the output representation of a database to be simply -the number of index cards our query finds. -\endscroll -\autobuttons -\end{page} - -\end{chunk} -\pagehead{ugDomainsQueryEquationsPage}{ug13.ht}{Query Equations} -\begin{chunk}{ug13.ht} -\begin{page}{ugDomainsQueryEquationsPage}{13.13.3. Query Equations} -\beginscroll - -The predicate for our search is given by an object of type -\pspadtype{QueryEquation}. -Axiom does not have such an object yet so we -have to invent it. - -\beginImportant - -\noindent -{\tt 1.\ \ \ QueryEquation():\ Exports\ ==\ Implementation\ where}\newline -{\tt 2.\ \ \ \ \ Exports\ ==\ with}\newline -{\tt 3.\ \ \ \ \ \ \ equation:\ (Symbol,\ String)\ ->\ \$}\newline -{\tt 4.\ \ \ \ \ \ \ variable:\ \$\ ->\ Symbol}\newline -{\tt 5.\ \ \ \ \ \ \ value:\\ \\ \\ \\ \$\ ->\ String}\newline -{\tt 6.\ \ \ }\newline -{\tt 7.\ \ \ \ \ Implementation\ ==\ add}\newline -{\tt 8.\ \ \ \ \ \ \ Rep\ :=\ Record(var:Symbol,\ val:String)}\newline -{\tt 9.\ \ \ \ \ \ \ equation(x,\ s)\ ==\ [x,\ s]}\newline -{\tt 10.\ \ \ \ \ \ variable\ q\ ==\ q.var}\newline -{\tt 11.\ \ \ \ \ \ value\\ \\ \\ \\ q\ ==\ q.val}\newline -\endImportant - -Axiom converts an input expression of the form -{\it a} = {\it b} to equation({\it a, b}}. -Our equations always have a symbol on the left and a string -on the right. -The {\tt Exports} part thus specifies an operation -equation to create a query equation, and -\pspadfun{variable} and \pspadfun{value} to select the left- and -right-hand sides. -The {\tt Implementation} part uses \pspadtype{Record} for a -space-efficient representation of an equation. - -Here is the missing definition for the elt function of -\pspadtype{Database} in the last section: - -\beginImportant - -\noindent -{\tt 1.\ \ \ \ \ \ \ elt(db,eq)\ ==}\newline -{\tt 2.\ \ \ \ \ \ \ \ \ field\\ \ :=\ variable\ eq}\newline -{\tt 3.\ \ \ \ \ \ \ \ \ value\ :=\ value\ eq}\newline -{\tt 4.\ \ \ \ \ \ \ \ \ -[x\ for\ x\ in\ db\ |\ matches?(value,x.field)]}\newline -\endImportant - -Recall that a database is represented by a list. -Line 4 simply runs over that list collecting all elements -such that the pattern (that is, value) -matches the selected field of the element. - -\endscroll -\autobuttons -\end{page} - -\end{chunk} -\pagehead{ugDomainsDataListsPage}{ug13.ht}{DataLists} -\begin{chunk}{ug13.ht} -\begin{page}{ugDomainsDataListsPage}{13.13.4. DataLists} -\beginscroll - -Type \pspadtype{DataList} is a new type invented to hold the result -of selecting one field from each of the index cards in the box. -It is useful to make datalists extensions of lists---lists that -have special elt operations defined on them for -sorting and removing duplicates. - -\beginImportant - -\noindent -{\tt 1.\ \ \ DataList(S:OrderedSet)\ :\ Exports\ ==\ -Implementation\ where}\newline -{\tt 2.\ \ \ \ \ Exports\ ==\ ListAggregate(S)\ with}\newline -{\tt 3.\ \ \ \ \ \ \ elt:\ (\$,"unique")\ ->\ \$}\newline -{\tt 4.\ \ \ \ \ \ \ elt:\ (\$,"sort")\ ->\ \$}\newline -{\tt 5.\ \ \ \ \ \ \ elt:\ (\$,"count")\ ->\ NonNegativeInteger}\newline -{\tt 6.\ \ \ \ \ \ \ coerce:\ List\ S\ ->\ \$}\newline -{\tt 7.\ \ \ }\newline -{\tt 8.\ \ \ \ \ Implementation\ ==\ \ List(S)\ add}\newline -{\tt 9.\ \ \ \ \ \ \ Rep\ :=\ List\ S}\newline -{\tt 10.\ \ \ \ \ \ elt(x,"unique")\ ==\ removeDuplicates(x)}\newline -{\tt 11.\ \ \ \ \ \ elt(x,"sort")\ ==\ sort(x)}\newline -{\tt 12.\ \ \ \ \ \ elt(x,"count")\ ==\ \#x}\newline -{\tt 13.\ \ \ \ \ \ coerce(x:List\ S)\ ==\ x\ ::\ \$}\newline -\endImportant - -The {\tt Exports} part asserts that datalists belong to the -category ListAggregate. -Therefore, you can use all the usual list operations on datalists, -such as \spadfunFrom{first}{List}, \spadfunFrom{rest}{List}, and -\spadfunFrom{concat}{List}. -In addition, datalists have four explicit operations. -Besides the three elt operations, there is a -coerce operation that creates datalists from lists. - -The {\tt Implementation} part needs only to define four functions. -All the rest are obtained from List(S). - -\endscroll -\autobuttons -\end{page} - -\end{chunk} -\pagehead{ugDomainsDatabasePage}{ug13.ht}{Index Cards} -\begin{chunk}{ug13.ht} -\begin{page}{ugDomainsDatabasePage}{13.13.5. Index Cards} -\beginscroll - -An index card comes from a file as one long string. We define -functions that extract substrings from the long string. Each field -has a name that is passed as a second argument to elt. - -\beginImportant - -\noindent -{\tt 1.\ \ \ IndexCard()\ ==\ Implementation\ where}\newline -{\tt 2.\ \ \ \ \ Exports\ ==\ with}\newline -{\tt 3.\ \ \ \ \ \ \ elt:\ (\$,\ Symbol)\ ->\ String}\newline -{\tt 4.\ \ \ \ \ \ \ display:\ \$\ ->\ Void}\newline -{\tt 5.\ \ \ \ \ \ \ fullDisplay:\ \$\ ->\ Void}\newline -{\tt 6.\ \ \ \ \ \ \ coerce:\ String\ ->\ \$}\newline -{\tt 7.\ \ \ \ \ Implementation\ ==\ String\ add\ ...}\newline -\endImportant - -We leave the {\tt Implementation} part to the reader. -All operations involve straightforward string manipulations. - -\endscroll -\autobuttons -\end{page} - -\end{chunk} -\pagehead{ugDomainsCreatingPage}{ug13.ht}{Creating a Database} -\begin{chunk}{ug13.ht} -\begin{page}{ugDomainsCreatingPage}{13.13.6. Creating a Database} -\beginscroll - -We must not forget one important operation: one that builds the -database in the first place! We'll name it \pspadfun{getDatabase} and -put it in a package. This function is implemented by calling the -\Lisp{} function getBrowseDatabase(s) to get appropriate -information from \Browse{}. This operation takes a string indicating -which lines you want from the database: "o" gives you all -operation lines, and "k", all constructor lines. Similarly, -"c", "d", and "p" give you all category, -domain and package lines respectively. - -\beginImportant - -\noindent -{\tt 1.\ \ \ OperationsQuery():\ Exports\ ==\ Implementation\ where} -\newline -{\tt 2.\ \ \ \ \ Exports\ ==\ with}\newline -{\tt 3.\ \ \ \ \ \ \ getDatabase:\ String\ ->\ Database(IndexCard)} -\newline -{\tt 4.\ \ \ }\newline -{\tt 5.\ \ \ \ \ Implementation\ ==\ add}\newline -{\tt 6.\ \ \ \ \ \ \ getDatabase(s)\ ==\ getBrowseDatabase(s)\$Lisp} -\newline -\endImportant - -We do not bother creating a special name for databases of index -cards. -\pspadtype{Database (IndexCard)} will do. -Notice that we used the package \pspadtype{OperationsQuery} to -create, in effect, -a new kind of domain: \pspadtype{Database(IndexCard)}. - -\endscroll -\autobuttons -\end{page} - -\end{chunk} -\pagehead{ugDomainsPuttingPage}{ug13.ht}{Putting It All Together} -\begin{chunk}{ug13.ht} -\begin{page}{ugDomainsPuttingPage}{13.13.7. Putting It All Together} -\beginscroll - -To create the database facility, you put all these constructors -into one file.\footnote{You could use separate files, but we -are putting them all together because, organizationally, that is -the logical thing to do.} -At the top of the file put \spadcmd{)abbrev} commands, giving the -constructor abbreviations you created. - -\beginImportant - -\noindent -{\tt 1.\ \ \ )abbrev\ domain\ \ ICARD\ \ \ IndexCard}\newline -{\tt 2.\ \ \ )abbrev\ domain\ \ QEQUAT\ \ QueryEquation}\newline -{\tt 3.\ \ \ )abbrev\ domain\ \ MTHING\ \ MergeThing}\newline -{\tt 4.\ \ \ )abbrev\ domain\ \ DLIST\ \ \ DataList}\newline -{\tt 5.\ \ \ )abbrev\ domain\ \ DBASE\ \ \ Database}\newline -{\tt 6.\ \ \ )abbrev\ package\ OPQUERY\ OperationsQuery}\newline -\endImportant - -With all this in {\bf alql.spad}, for example, compile it using -begin{verbatim} -)compile alql -end{verbatim} -and then load each of the constructors: -begin{verbatim} -)load ICARD QEQUAT MTHING DLIST DBASE OPQUERY -end{verbatim} -You are ready to try some sample queries. - -\endscroll -\autobuttons -\end{page} - -\end{chunk} -\pagehead{ugDomainsExamplesPage}{ug13.ht}{Example Queries} -\begin{chunk}{ug13.ht} -\begin{page}{ugDomainsExamplesPage}{13.13.8. Example Queries} -\beginscroll - -Our first set of queries give some statistics on constructors in -the current Axiom system. - -\xtc{ -How many constructors does Axiom have? -}{ -\spadpaste{ks := getDatabase "k"\bound{q1}} -} -\xtc{ -Break this down into the number of categories, domains, and packages. -}{ -\spadpaste{[ks.(kind=k) for k in ["c","d","p"]]\bound{q3}\free{q1}} -} -\xtc{ -What are all the domain constructors that take no parameters? -}{ -\spadpaste{elt(ks.(kind="d").(nargs="0"),name)\bound{q4}\free{q1}} -} -\xtc{ -How many constructors have ``Matrix'' in their name? -}{ -\spadpaste{mk := ks.(name="*Matrix*")\bound{q5}\free{q1}} -} -\xtc{ -What are the names of those that are domains? -}{ -\spadpaste{elt(mk.(kind="d"),name)\bound{q6}\free{q5}} -} -\xtc{ -How many operations are there in the library? -}{ -\spadpaste{o := getDatabase "o"\bound{o1}} -} -\xtc{ -Break this down into categories, domains, and packages. -}{ -\spadpaste{[o.(kind=k) for k in ["c","d","p"]]\free{o1}} -} - -The query language is helpful in getting information about a -particular operation you might like to apply. -While this information can be obtained with -\Browse{}, the use of the query database gives you data that you -can manipulate in the workspace. - -\xtc{ -How many operations have ``eigen'' in the name? -}{ -\spadpaste{eigens := o.(name="*eigen*")\bound{eigens}\free{o1}} -} -\xtc{ -What are their names? -}{ -\spadpaste{elt(eigens,name)\free{eigens}} -} -\xtc{ -Where do they come from? -}{ -\spadpaste{elt(elt(elt(eigens,origin),sort),unique) \free{eigens}} -} - -The operations + and - are useful for -constructing small databases and combining them. -However, remember that the only matching you can do is string -matching. -Thus a pattern such as {\tt "*Matrix*"} on the type field -matches -any type containing Matrix, MatrixCategory, SquareMatrix, and so on. - -\xtc{ -How many operations mention ``Matrix'' in their type? -}{ -\spadpaste{tm := o.(type="*Matrix*")\bound{x10}\free{o1}} -} -\xtc{ -How many operations come from constructors with ``Matrix'' in -their name? -}{ -\spadpaste{fm := o.(origin="*Matrix*")\bound{x11}\free{o1}} -} -\xtc{ -How many operations are in fm but not in tm? -}{ -\spadpaste{fm-tm \bound{x12}\free{x10 x11}} -} -\xtc{ -Display the operations that both mention ``Matrix'' in their type -and come from a constructor having ``Matrix'' in their name. -}{ -\spadpaste{fullDisplay(fm-\%) \bound{x13}\free{x12}} -} -\xtc{ -How many operations involve matrices? -}{ -\spadpaste{m := tm+fm \bound{x14}\free{x10 x11}} -} -\xtc{ -Display 4 of them. -}{ -\spadpaste{fullDisplay(m, 202, 205) \free{x14}} -} -\xtc{ -How many distinct names of operations involving matrices are there? -}{ -\spadpaste{elt(elt(elt(m,name),unique),count) \free{x14}} -} - -\endscroll -\autobuttons -\end{page} - -\begin{patch}{ugDomainsExamplesPagePatch1} -\begin{paste}{ugDomainsExamplesPageFull1}{ugDomainsExamplesPageEmpty1} -\pastebutton{ugDomainsExamplesPageFull1}{\hidepaste} -\tab{5}\spadcommand{ks := getDatabase "k"\bound{q1 }} -\indentrel{3}begin{verbatim} - (1) 1067 - Type: Database IndexCard -end{verbatim} -\indentrel{-3}\end{paste}\end{patch} - -\begin{patch}{ugDomainsExamplesPageEmpty1} -\begin{paste}{ugDomainsExamplesPageEmpty1}{ugDomainsExamplesPagePatch1} -\pastebutton{ugDomainsExamplesPageEmpty1}{\showpaste} -\tab{5}\spadcommand{ks := getDatabase "k"\bound{q1 }} -\end{paste}\end{patch} - -\begin{patch}{ugDomainsExamplesPagePatch2} -\begin{paste}{ugDomainsExamplesPageFull2}{ugDomainsExamplesPageEmpty2} -\pastebutton{ugDomainsExamplesPageFull2}{\hidepaste} -\tab{5}\spadcommand{[ks.(kind=k) for k in ["c","d","p"]]\bound{q3 }\free{q1 }} -\indentrel{3}begin{verbatim} - (2) [205,393,469] - Type: List Database IndexCard -end{verbatim} -\indentrel{-3}\end{paste}\end{patch} - -\begin{patch}{ugDomainsExamplesPageEmpty2} -\begin{paste}{ugDomainsExamplesPageEmpty2}{ugDomainsExamplesPagePatch2} -\pastebutton{ugDomainsExamplesPageEmpty2}{\showpaste} -\tab{5}\spadcommand{[ks.(kind=k) for k in ["c","d","p"]]\bound{q3 }\free{q1 }} -\end{paste}\end{patch} - -\begin{patch}{ugDomainsExamplesPagePatch3} -\begin{paste}{ugDomainsExamplesPageFull3}{ugDomainsExamplesPageEmpty3} -\pastebutton{ugDomainsExamplesPageFull3}{\hidepaste} -\tab{5}\spadcommand{elt(ks.(kind="d").(nargs="0"),name)\bound{q4 }\free{q1 }} -\indentrel{3}begin{verbatim} - (3) - ["AlgebraicNumber", "AnonymousFunction", "Any", - "AttributeButtons", "BasicFunctions", - "BasicOperator", "BinaryExpansion", "BinaryFile", - "Bits", "Boolean", "CardinalNumber", - "CharacterClass", "Character", "Color", "Commutator", - "DecimalExpansion", "DoubleFloat", "DrawOption", - "Exit", "ExtAlgBasis", "FileName", "Float", - "FortranCode", "FortranScalarType", - "FortranTemplate", "FortranType", "GraphImage", - "HexadecimalExpansion", "IVBaseColor", "IVBasicNode", - "IVCoordinate3", "IVCoordinate4", "IVFaceSet", - "IVField", "IVGroup", "IVIndexedLineSet", - "IVNodeConnection", "IVNodeObject", "IVPointSet", - "IVQuadMesh", "IVSeparator", "IVSimpleInnerNode", - "IVUtilities", "IVValue", "IndexCard", - "InnerAlgebraicNumber", "InputForm", "Integer", - "IntegrationFunctionsTable", "InventorDataSink", - "InventorRenderPackage", "InventorViewPort", - "Library", "MachineComplex", "MachineFloat", - "MachineInteger", - "NagDiscreteFourierTransformInterfacePackage", - "NagEigenInterfacePackage", - "NagOptimisationInterfacePackage", - "NagQuadratureInterfacePackage", "NagResultChecks", - "NagSpecialFunctionsInterfacePackage", - "NonNegativeInteger", "None", - "NumericalIntegrationProblem", "NumericalODEProblem", - "NumericalOptimizationProblem", - "NumericalPDEProblem", "ODEIntensityFunctionsTable", - "OrdSetInts", "OutputForm", "Palette", "Partition", - "Pi", "PlaneAlgebraicCurvePlot", "Plot3D", "Plot", - "PositiveInteger", "QueryEquation", "RenderTools", - "Result", "RomanNumeral", "RoutinesTable", - "SExpression", "ScriptFormulaFormat", - "SingleInteger", "SingletonAsOrderedSet", "String", - "SubSpaceComponentProperty", "Switch", "SymbolTable", - "Symbol", "TexFormat", "TextFile", "TheSymbolTable", - "ThreeDimensionalViewport", "Timer", - "TwoDimensionalViewport", "Void", - "d01TransformFunctionType", "d01ajfAnnaType", - "d01akfAnnaType", "d01alfAnnaType", "d01amfAnnaType", - "d01anfAnnaType", "d01apfAnnaType", "d01aqfAnnaType", - "d01asfAnnaType", "d01fcfAnnaType", "d01gbfAnnaType", - "d02bbfAnnaType", "d02bhfAnnaType", "d02cjfAnnaType", - "d02ejfAnnaType", "d03eefAnnaType", "d03fafAnnaType", - "e04dgfAnnaType", "e04fdfAnnaType", "e04gcfAnnaType", - "e04jafAnnaType", "e04mbfAnnaType", "e04nafAnnaType", - "e04ucfAnnaType"] - Type: DataList String -end{verbatim} -\indentrel{-3}\end{paste}\end{patch} - -\begin{patch}{ugDomainsExamplesPageEmpty3} -\begin{paste}{ugDomainsExamplesPageEmpty3}{ugDomainsExamplesPagePatch3} -\pastebutton{ugDomainsExamplesPageEmpty3}{\showpaste} -\tab{5}\spadcommand{elt(ks.(kind="d").(nargs="0"),name)\bound{q4 }\free{q1 }} -\end{paste}\end{patch} - -\begin{patch}{ugDomainsExamplesPagePatch4} -\begin{paste}{ugDomainsExamplesPageFull4}{ugDomainsExamplesPageEmpty4} -\pastebutton{ugDomainsExamplesPageFull4}{\hidepaste} -\tab{5}\spadcommand{mk := ks.(name="*Matrix*")\bound{q5 }\free{q1 }} -\indentrel{3}begin{verbatim} - (4) 26 - Type: Database IndexCard -end{verbatim} -\indentrel{-3}\end{paste}\end{patch} - -\begin{patch}{ugDomainsExamplesPageEmpty4} -\begin{paste}{ugDomainsExamplesPageEmpty4}{ugDomainsExamplesPagePatch4} -\pastebutton{ugDomainsExamplesPageEmpty4}{\showpaste} -\tab{5}\spadcommand{mk := ks.(name="*Matrix*")\bound{q5 }\free{q1 }} -\end{paste}\end{patch} - -\begin{patch}{ugDomainsExamplesPagePatch5} -\begin{paste}{ugDomainsExamplesPageFull5}{ugDomainsExamplesPageEmpty5} -\pastebutton{ugDomainsExamplesPageFull5}{\hidepaste} -\tab{5}\spadcommand{elt(mk.(kind="d"),name)\bound{q6 }\free{q5 }} -\indentrel{3}begin{verbatim} - (5) - ["DenavitHartenbergMatrix", - "DirectProductMatrixModule", "IndexedMatrix", - "LieSquareMatrix", "Matrix", "RectangularMatrix", - "SquareMatrix", "ThreeDimensionalMatrix"] - Type: DataList String -end{verbatim} -\indentrel{-3}\end{paste}\end{patch} - -\begin{patch}{ugDomainsExamplesPageEmpty5} -\begin{paste}{ugDomainsExamplesPageEmpty5}{ugDomainsExamplesPagePatch5} -\pastebutton{ugDomainsExamplesPageEmpty5}{\showpaste} -\tab{5}\spadcommand{elt(mk.(kind="d"),name)\bound{q6 }\free{q5 }} -\end{paste}\end{patch} - -\begin{patch}{ugDomainsExamplesPagePatch6} -\begin{paste}{ugDomainsExamplesPageFull6}{ugDomainsExamplesPageEmpty6} -\pastebutton{ugDomainsExamplesPageFull6}{\hidepaste} -\tab{5}\spadcommand{o := getDatabase "o"\bound{o1 }} -\indentrel{3}begin{verbatim} - (6) 6315 - Type: Database IndexCard -end{verbatim} -\indentrel{-3}\end{paste}\end{patch} - -\begin{patch}{ugDomainsExamplesPageEmpty6} -\begin{paste}{ugDomainsExamplesPageEmpty6}{ugDomainsExamplesPagePatch6} -\pastebutton{ugDomainsExamplesPageEmpty6}{\showpaste} -\tab{5}\spadcommand{o := getDatabase "o"\bound{o1 }} -\end{paste}\end{patch} - -\begin{patch}{ugDomainsExamplesPagePatch7} -\begin{paste}{ugDomainsExamplesPageFull7}{ugDomainsExamplesPageEmpty7} -\pastebutton{ugDomainsExamplesPageFull7}{\hidepaste} -\tab{5}\spadcommand{[o.(kind=k) for k in ["c","d","p"]]\free{o1 }} -\indentrel{3}begin{verbatim} - (7) [1646,2040,2629] - Type: List Database IndexCard -end{verbatim} -\indentrel{-3}\end{paste}\end{patch} - -\begin{patch}{ugDomainsExamplesPageEmpty7} -\begin{paste}{ugDomainsExamplesPageEmpty7}{ugDomainsExamplesPagePatch7} -\pastebutton{ugDomainsExamplesPageEmpty7}{\showpaste} -\tab{5}\spadcommand{[o.(kind=k) for k in ["c","d","p"]]\free{o1 }} -\end{paste}\end{patch} - -\begin{patch}{ugDomainsExamplesPagePatch8} -\begin{paste}{ugDomainsExamplesPageFull8}{ugDomainsExamplesPageEmpty8} -\pastebutton{ugDomainsExamplesPageFull8}{\hidepaste} -\tab{5}\spadcommand{eigens := o.(name="*eigen*")\bound{eigens }\free{o1 }} -\indentrel{3}begin{verbatim} - (8) 4 - Type: Database IndexCard -end{verbatim} -\indentrel{-3}\end{paste}\end{patch} - -\begin{patch}{ugDomainsExamplesPageEmpty8} -\begin{paste}{ugDomainsExamplesPageEmpty8}{ugDomainsExamplesPagePatch8} -\pastebutton{ugDomainsExamplesPageEmpty8}{\showpaste} -\tab{5}\spadcommand{eigens := o.(name="*eigen*")\bound{eigens }\free{o1 }} -\end{paste}\end{patch} - -\begin{patch}{ugDomainsExamplesPagePatch9} -\begin{paste}{ugDomainsExamplesPageFull9}{ugDomainsExamplesPageEmpty9} -\pastebutton{ugDomainsExamplesPageFull9}{\hidepaste} -\tab{5}\spadcommand{elt(eigens,name)\free{eigens }} -\indentrel{3}begin{verbatim} - (9) - ["eigenMatrix", "eigenvalues", "eigenvector", - "eigenvectors"] - Type: DataList String -end{verbatim} -\indentrel{-3}\end{paste}\end{patch} - -\begin{patch}{ugDomainsExamplesPageEmpty9} -\begin{paste}{ugDomainsExamplesPageEmpty9}{ugDomainsExamplesPagePatch9} -\pastebutton{ugDomainsExamplesPageEmpty9}{\showpaste} -\tab{5}\spadcommand{elt(eigens,name)\free{eigens }} -\end{paste}\end{patch} - -\begin{patch}{ugDomainsExamplesPagePatch10} -\begin{paste}{ugDomainsExamplesPageFull10}{ugDomainsExamplesPageEmpty10} -\pastebutton{ugDomainsExamplesPageFull10}{\hidepaste} -\tab{5}\spadcommand{elt(elt(elt(eigens,origin),sort),unique)\free{eigens }} -\indentrel{3}begin{verbatim} - (10) ["EigenPackage","RadicalEigenPackage"] - Type: DataList String -end{verbatim} -\indentrel{-3}\end{paste}\end{patch} - -\begin{patch}{ugDomainsExamplesPageEmpty10} -\begin{paste}{ugDomainsExamplesPageEmpty10}{ugDomainsExamplesPagePatch10} -\pastebutton{ugDomainsExamplesPageEmpty10}{\showpaste} -\tab{5}\spadcommand{elt(elt(elt(eigens,origin),sort),unique)\free{eigens }} -\end{paste}\end{patch} - -\begin{patch}{ugDomainsExamplesPagePatch11} -\begin{paste}{ugDomainsExamplesPageFull11}{ugDomainsExamplesPageEmpty11} -\pastebutton{ugDomainsExamplesPageFull11}{\hidepaste} -\tab{5}\spadcommand{tm := o.(type="*Matrix*")\bound{x10 }\free{o1 }} -\indentrel{3}begin{verbatim} - (11) 353 - Type: Database IndexCard -end{verbatim} -\indentrel{-3}\end{paste}\end{patch} - -\begin{patch}{ugDomainsExamplesPageEmpty11} -\begin{paste}{ugDomainsExamplesPageEmpty11}{ugDomainsExamplesPagePatch11} -\pastebutton{ugDomainsExamplesPageEmpty11}{\showpaste} -\tab{5}\spadcommand{tm := o.(type="*Matrix*")\bound{x10 }\free{o1 }} -\end{paste}\end{patch} - -\begin{patch}{ugDomainsExamplesPagePatch12} -\begin{paste}{ugDomainsExamplesPageFull12}{ugDomainsExamplesPageEmpty12} -\pastebutton{ugDomainsExamplesPageFull12}{\hidepaste} -\tab{5}\spadcommand{fm := o.(origin="*Matrix*")\bound{x11 }\free{o1 }} -\indentrel{3}begin{verbatim} - (12) 192 - Type: Database IndexCard -end{verbatim} -\indentrel{-3}\end{paste}\end{patch} - -\begin{patch}{ugDomainsExamplesPageEmpty12} -\begin{paste}{ugDomainsExamplesPageEmpty12}{ugDomainsExamplesPagePatch12} -\pastebutton{ugDomainsExamplesPageEmpty12}{\showpaste} -\tab{5}\spadcommand{fm := o.(origin="*Matrix*")\bound{x11 }\free{o1 }} -\end{paste}\end{patch} - -\begin{patch}{ugDomainsExamplesPagePatch13} -\begin{paste}{ugDomainsExamplesPageFull13}{ugDomainsExamplesPageEmpty13} -\pastebutton{ugDomainsExamplesPageFull13}{\hidepaste} -\tab{5}\spadcommand{fm-tm\bound{x12 }\free{x10 x11 }} -\indentrel{3}begin{verbatim} - (13) 146 - Type: Database IndexCard -end{verbatim} -\indentrel{-3}\end{paste}\end{patch} - -\begin{patch}{ugDomainsExamplesPageEmpty13} -\begin{paste}{ugDomainsExamplesPageEmpty13}{ugDomainsExamplesPagePatch13} -\pastebutton{ugDomainsExamplesPageEmpty13}{\showpaste} -\tab{5}\spadcommand{fm-tm\bound{x12 }\free{x10 x11 }} -\end{paste}\end{patch} - -\begin{patch}{ugDomainsExamplesPagePatch14} -\begin{paste}{ugDomainsExamplesPageFull14}{ugDomainsExamplesPageEmpty14} -\pastebutton{ugDomainsExamplesPageFull14}{\hidepaste} -\tab{5}\spadcommand{fullDisplay(fm-\%)\bound{x13 }\free{x12 }} -\indentrel{3}begin{verbatim} - ** : (Matrix(R),NonNegativeInteger)->Matrix(R) - from StorageEfficientMatrixOperations(R) (unexposed) - clearDenominator : (Matrix(Q))->Matrix(R) - from MatrixCommonDenominator(R,Q) - coerceP - : (Vector(Matrix(R)))->Vector(Matrix(Polynomial(R))) - from CoerceVectorMatrixPackage(R) (unexposed) - coerce - : - (Vector(Matrix(R)))->Vector(Matrix(Fraction(Polynom - ial(R)))) - from CoerceVectorMatrixPackage(R) (unexposed) - coerce : (_$)->Matrix(R) - from RectangularMatrix(m,n,R) (unexposed) - coerce : (_$)->Matrix(R) - from SquareMatrix(ndim,R) (unexposed) - coerce : (Matrix(MachineFloat))->_$ - from FortranMatrixCategory - commonDenominator : (Matrix(Q))->R - from MatrixCommonDenominator(R,Q) - copy! : (Matrix(R),Matrix(R))->Matrix(R) - from StorageEfficientMatrixOperations(R) (unexposed) - f01brf - : - (Integer,Integer,Integer,Integer,DoubleFloat,Boolea - n,Boolean,List(Boolean),Matrix(DoubleFloat),Matrix( - Integer),Matrix(Integer),Integer)->Result - from NagMatrixOperationsPackage - f01bsf - : - (Integer,Integer,Integer,Matrix(Integer),Matrix(Int - eger),Matrix(Integer),Matrix(Integer),Boolean,Doubl - eFloat,Boolean,Matrix(Integer),Matrix(DoubleFloat), - Integer)->Result - from NagMatrixOperationsPackage - f01maf - : - (Integer,Integer,Integer,Integer,List(Boolean),Matr - ix(DoubleFloat),Matrix(Integer),Matrix(Integer),Dou - bleFloat,DoubleFloat,Integer)->Result - from NagMatrixOperationsPackage - f01mcf - : - (Integer,Matrix(DoubleFloat),Integer,Matrix(Integer - ),Integer)->Result - from NagMatrixOperationsPackage - f01qcf - : - (Integer,Integer,Integer,Matrix(DoubleFloat),Intege - r)->Result - from NagMatrixOperationsPackage - f01qdf - : - (String,String,Integer,Integer,Matrix(DoubleFloat), - Integer,Matrix(DoubleFloat),Integer,Integer,Matrix( - DoubleFloat),Integer)->Result - from NagMatrixOperationsPackage - f01qef - : - (String,Integer,Integer,Integer,Integer,Matrix(Doub - leFloat),Matrix(DoubleFloat),Integer)->Result - from NagMatrixOperationsPackage - f01rcf - : - (Integer,Integer,Integer,Matrix(Complex(DoubleFloat - )),Integer)->Result - from NagMatrixOperationsPackage - f01rdf - : - (String,String,Integer,Integer,Matrix(Complex(Doubl - eFloat)),Integer,Matrix(Complex(DoubleFloat)),Integ - er,Integer,Matrix(Complex(DoubleFloat)),Integer)->R - esult - from NagMatrixOperationsPackage - f01ref - : - (String,Integer,Integer,Integer,Integer,Matrix(Comp - lex(DoubleFloat)),Matrix(Complex(DoubleFloat)),Inte - ger)->Result - from NagMatrixOperationsPackage - hasSolution? : (Matrix(F),Vector(F))->Boolean - from LinearSystemMatrixPackage1(F) - leftScalarTimes! : (Matrix(R),R,Matrix(R))->Matrix(R) - from StorageEfficientMatrixOperations(R) (unexposed) - minus! : (Matrix(R),Matrix(R))->Matrix(R) - from StorageEfficientMatrixOperations(R) (unexposed) - minus! : (Matrix(R),Matrix(R),Matrix(R))->Matrix(R) - from StorageEfficientMatrixOperations(R) (unexposed) - particularSolution - : (Matrix(F),Vector(F))->Union(Vector(F),"failed") - from LinearSystemMatrixPackage1(F) - plus! : (Matrix(R),Matrix(R),Matrix(R))->Matrix(R) - from StorageEfficientMatrixOperations(R) (unexposed) - power! - : - (Matrix(R),Matrix(R),Matrix(R),Matrix(R),NonNegativ - eInteger)->Matrix(R) - from StorageEfficientMatrixOperations(R) (unexposed) - rank : (Matrix(F),Vector(F))->NonNegativeInteger - from LinearSystemMatrixPackage1(F) - rectangularMatrix : (Matrix(R))->_$ - from RectangularMatrix(m,n,R) (unexposed) - retractIfCan - : (Matrix(Expression(Float)))->Union(_$,"failed") - from FortranMatrixFunctionCategory - retractIfCan - : (Matrix(Expression(Integer)))->Union(_$,"failed") - from FortranMatrixFunctionCategory - retractIfCan - : - (Matrix(Fraction(Polynomial(Float))))->Union(_$,"fa - iled") - from FortranMatrixFunctionCategory - retractIfCan - : - (Matrix(Fraction(Polynomial(Integer))))->Union(_$," - failed") - from FortranMatrixFunctionCategory - retractIfCan - : (Matrix(Polynomial(Float)))->Union(_$,"failed") - from FortranMatrixFunctionCategory - retractIfCan - : (Matrix(Polynomial(Integer)))->Union(_$,"failed") - from FortranMatrixFunctionCategory - retract : (Matrix(Expression(Float)))->_$ - from FortranMatrixFunctionCategory - retract : (Matrix(Expression(Integer)))->_$ - from FortranMatrixFunctionCategory - retract : (Matrix(Fraction(Polynomial(Float))))->_$ - from FortranMatrixFunctionCategory - retract : (Matrix(Fraction(Polynomial(Integer))))->_$ - from FortranMatrixFunctionCategory - retract : (Matrix(Polynomial(Float)))->_$ - from FortranMatrixFunctionCategory - retract : (Matrix(Polynomial(Integer)))->_$ - from FortranMatrixFunctionCategory - rightScalarTimes! : (Matrix(R),Matrix(R),R)->Matrix(R) - from StorageEfficientMatrixOperations(R) (unexposed) - solve - : - (Matrix(F),List(Vector(F)))->List(Record(particular - :Union(Vector(F),"failed"),basis:List(Vector(F)))) - from LinearSystemMatrixPackage1(F) - solve - : - (Matrix(F),Vector(F))->Record(particular:Union(Vect - or(F),"failed"),basis:List(Vector(F))) - from LinearSystemMatrixPackage1(F) - splitDenominator - : (Matrix(Q))->Record(num:Matrix(R),den:R) - from MatrixCommonDenominator(R,Q) - squareMatrix : (Matrix(R))->_$ - from SquareMatrix(ndim,R) (unexposed) - times! : (Matrix(R),Matrix(R),Matrix(R))->Matrix(R) - from StorageEfficientMatrixOperations(R) (unexposed) - Type: Void -end{verbatim} -\indentrel{-3}\end{paste}\end{patch} - -\begin{patch}{ugDomainsExamplesPageEmpty14} -\begin{paste}{ugDomainsExamplesPageEmpty14}{ugDomainsExamplesPagePatch14} -\pastebutton{ugDomainsExamplesPageEmpty14}{\showpaste} -\tab{5}\spadcommand{fullDisplay(fm-\%)\bound{x13 }\free{x12 }} -\end{paste}\end{patch} - -\begin{patch}{ugDomainsExamplesPagePatch15} -\begin{paste}{ugDomainsExamplesPageFull15}{ugDomainsExamplesPageEmpty15} -\pastebutton{ugDomainsExamplesPageFull15}{\hidepaste} -\tab{5}\spadcommand{m := tm+fm\bound{x14 }\free{x10 x11 }} -\indentrel{3}begin{verbatim} - (15) 499 - Type: Database IndexCard -end{verbatim} -\indentrel{-3}\end{paste}\end{patch} - -\begin{patch}{ugDomainsExamplesPageEmpty15} -\begin{paste}{ugDomainsExamplesPageEmpty15}{ugDomainsExamplesPagePatch15} -\pastebutton{ugDomainsExamplesPageEmpty15}{\showpaste} -\tab{5}\spadcommand{m := tm+fm\bound{x14 }\free{x10 x11 }} -\end{paste}\end{patch} - -\begin{patch}{ugDomainsExamplesPagePatch16} -\begin{paste}{ugDomainsExamplesPageFull16}{ugDomainsExamplesPageEmpty16} -\pastebutton{ugDomainsExamplesPageFull16}{\hidepaste} -\tab{5}\spadcommand{fullDisplay(m, 202, 205)\free{x14 }} -\indentrel{3}begin{verbatim} - elt : (_$,List(Integer),List(Integer))->_$ - from MatrixCategory(R,Row,Col) - elt : (_$,Integer,Integer,R)->R - from RectangularMatrixCategory(m,n,R,Row,Col) - elt - : - (_$,NonNegativeInteger,NonNegativeInteger,NonNegati - veInteger)->R - from ThreeDimensionalMatrix(R) - eval - : - (Matrix(Expression(DoubleFloat)),List(Symbol),Vecto - r(Expression(DoubleFloat)))->Matrix(Expression(Doub - leFloat)) - from d02AgentsPackage - Type: Void -end{verbatim} -\indentrel{-3}\end{paste}\end{patch} - -\begin{patch}{ugDomainsExamplesPageEmpty16} -\begin{paste}{ugDomainsExamplesPageEmpty16}{ugDomainsExamplesPagePatch16} -\pastebutton{ugDomainsExamplesPageEmpty16}{\showpaste} -\tab{5}\spadcommand{fullDisplay(m, 202, 205)\free{x14 }} -\end{paste}\end{patch} - -\begin{patch}{ugDomainsExamplesPagePatch17} -\begin{paste}{ugDomainsExamplesPageFull17}{ugDomainsExamplesPageEmpty17} -\pastebutton{ugDomainsExamplesPageFull17}{\hidepaste} -\tab{5}\spadcommand{elt(elt(elt(m,name),unique),count)\free{x14 }} -\indentrel{3}begin{verbatim} - (17) 317 - Type: PositiveInteger -end{verbatim} -\indentrel{-3}\end{paste}\end{patch} - -\begin{patch}{ugDomainsExamplesPageEmpty17} -\begin{paste}{ugDomainsExamplesPageEmpty17}{ugDomainsExamplesPagePatch17} -\pastebutton{ugDomainsExamplesPageEmpty17}{\showpaste} -\tab{5}\spadcommand{elt(elt(elt(m,name),unique),count)\free{x14 }} -\end{paste}\end{patch} -\end{verbatim} - -\end{chunk} -\begin{thebibliography}{99} -\bibitem{1} nothing -\end{thebibliography} -\end{document}