diff --git a/books/bookvol10.pamphlet b/books/bookvol10.pamphlet index 86f0b99..f836ded 100644 --- a/books/bookvol10.pamphlet +++ b/books/bookvol10.pamphlet @@ -8,12 +8,28 @@ %% %% pagehead consolidates standard page indexing %% -\newcommand{\pagehead}[3]{% e.g. \pagehead{page}{file.ht}{title} -\subsection{#3}% -\label{#1} -\index{pages!#1!#2}% -\index{#1!#2!pages}% -\index{#2!pages!#1}} +\newcommand{\pagehead}[2]{% e.g. \pagehead{name}{abb} +\section{#1} +\label{#1}% +\label{#2}% +\index{{#1}}% +\index{{#2}}}% +%% +%% pagepic adds an image and an index entry +%% +\newcommand{\pagepic}[2]{% e.g. \pagepic{pathandfile}{abb} +\includegraphics{#1}% +\index{images!#2}} +%% +%% pageto is a forward link to a referenced page +%% +\newcommand{\pageto}[2]{% e.g. \pageto{abb}{name} +\ \\${\bf\Rightarrow{}}${``#1''} (#2) \ref{#1} on page~\pageref{#1}} +%% +%% pageback is a backward link to a referencing page +%% +\newcommand{\pagefrom}[2]{% e.g. \pagefrom{name}{abb} +\ \\${\bf\Leftarrow{}}${``#1''} (#2) \ref{#1} on page~\pageref{#1}} %% % special meanings for math characters \providecommand{\N}{\mbox{\bbold N}} @@ -1982,8 +1998,289 @@ constructing the divisors $\delta_j$ and the $u_j$'s as in that case. Again, the details are quite technical and can be found in \cite{2,12,13}. -\chapter{Categories Layers} -\section{category AGG Aggregate} +\chapter{Category Layer 1} +\pagehead{Category}{CATEGORY} +This is the root of the category hierarchy and is not represented by code. + +See:\\ +\pageto{Eltable}{ELTAB} +\pageto{CoercibleTo}{KOERCE} +\pageto{ConvertibleTo}{KONVERT} +\pageto{RetractableTo}{RETRACT} +\pageto{Type}{TYPE} + +%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% +\pagehead{CoercibleTo}{KOERCE} +\pagepic{ps/v10koerce.ps}{KOERCE} + +See:\\ +\pagefrom{Category}{CATEGORY} +<>= +)abbrev category KOERCE CoercibleTo +++ Category for coerce +++ Author: Manuel Bronstein +++ Date Created: ??? +++ Date Last Updated: 14 May 1991 +++ Description: +++ A is coercible to B means any element of A can automatically be +++ converted into an element of B by the interpreter. +CoercibleTo(S:Type): Category == with + coerce: % -> S + ++ coerce(a) transforms a into an element of S. + +@ +<>= +"KOERCE" [color=lightblue,href="books/bookvol10.pamphlet"]; +"KOERCE" -> "CATEGORY" + +@ +<>= +"CoercibleTo(a:Type)" [color=lightblue,href="books/bookvol10.pamphlet"]; +"CoercibleTo(a:Type)" -> "Category" + +"CoercibleTo(OutputForm)" [color=seagreen,href="books/bookvol10.pamphlet"]; +"CoercibleTo(OutputForm)" -> + "CoercibleTo(a:Type)" +@ +%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% +\pagehead{ConvertibleTo}{KONVERT} +\pagepic{ps/v10konvert.ps}{KONVERT} + +See:\\ +\pagefrom{Category}{CATEGORY} +<>= +)abbrev category KONVERT ConvertibleTo +++ Category for convert +++ Author: Manuel Bronstein +++ Date Created: ??? +++ Date Last Updated: 14 May 1991 +++ Description: +++ A is convertible to B means any element of A +++ can be converted into an element of B, +++ but not automatically by the interpreter. +ConvertibleTo(S:Type): Category == with + convert: % -> S + ++ convert(a) transforms a into an element of S. + +@ +<>= +"KONVERT" [color=lightblue,href="books/bookvol10.pamphlet"]; +"KONVERT" -> "CATEGORY" + +@ +<>= +"ConvertibleTo(a:Type)" + [color=lightblue,href="books/bookvol10.pamphlet"]; +"ConvertibleTo(a:Type)" -> "Category" + +"ConvertibleTo(DoubleFloat)" + [color=seagreen,href="books/bookvol10.pamphlet"]; +"ConvertibleTo(DoubleFloat)" -> "ConvertibleTo(a:Type)" + +"ConvertibleTo(Float)" + [color=seagreen,href="books/bookvol10.pamphlet"]; +"ConvertibleTo(Float)" -> "ConvertibleTo(a:Type)" + +"ConvertibleTo(InputForm)" + [color=seagreen,href="books/bookvol10.pamphlet"]; +"ConvertibleTo(InputForm)" -> "ConvertibleTo(a:Type)" + +"ConvertibleTo(Integer)" + [color=seagreen,href="books/bookvol10.pamphlet"]; +"ConvertibleTo(Integer)" -> "ConvertibleTo(a:Type)" + +"ConvertibleTo(Pattern(Integer))" + [color=seagreen,href="books/bookvol10.pamphlet"]; +"ConvertibleTo(Pattern(Integer))" -> "ConvertibleTo(a:Type)" + +"ConvertibleTo(Pattern(Float))" + [color=seagreen,href="books/bookvol10.pamphlet"]; +"ConvertibleTo(Pattern(Float))" -> "ConvertibleTo(a:Type)" + +"ConvertibleTo(Complex(Float))" + [color=seagreen,href="books/bookvol10.pamphlet"]; +"ConvertibleTo(Complex(Float))" -> "ConvertibleTo(a:Type)" + +"ConvertibleTo(Complex(DoubleFloat))" + [color=seagreen,href="books/bookvol10.pamphlet"]; +"ConvertibleTo(Complex(DoubleFloat))" -> "ConvertibleTo(a:Type)" + +"ConvertibleTo(String)" + [color=seagreen,href="books/bookvol10.pamphlet"]; +"ConvertibleTo(String)" -> "ConvertibleTo(a:Type)" + +"ConvertibleTo(Symbol)" + [color=seagreen,href="books/bookvol10.pamphlet"]; +"ConvertibleTo(Symbol)" -> "ConvertibleTo(a:Type)" + +"ConvertibleTo(SExpression)" + [color=seagreen,href="books/bookvol10.pamphlet"]; +"ConvertibleTo(SExpression)" -> "ConvertibleTo(a:Type)" + +"ConvertibleTo(Pattern(Base))" + [color=seagreen,href="books/bookvol10.pamphlet"]; +"ConvertibleTo(Pattern(Base))" -> "ConvertibleTo(a:Type)" + +"ConvertibleTo(List(Integer))" + [color=seagreen,href="books/bookvol10.pamphlet"]; +"ConvertibleTo(List(Integer))" -> "ConvertibleTo(a:Type)" + +"ConvertibleTo(List(Character))" + [color=seagreen,href="books/bookvol10.pamphlet"]; +"ConvertibleTo(List(Character))" -> "ConvertibleTo(a:Type)" + +"ConvertibleTo(UnivariatePolynomialCategory(CommutativeRing))" + [color=seagreen,href="books/bookvol10.pamphlet"]; +"ConvertibleTo(UnivariatePolynomialCategory(CommutativeRing))" -> + "ConvertibleTo(a:Type)" +@ +%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% +\pagehead{Eltable}{ELTAB} +\pagepic{ps/v10eltab.ps}{ELTAB} + +See:\\ +\pagefrom{Category}{CATEGORY} +<>= +)abbrev category ELTAB Eltable +++ Author: Michael Monagan; revised by Manuel Bronstein and Manuel Bronstein +++ Date Created: August 87 through August 88 +++ Date Last Updated: April 1991 +++ Basic Operations: +++ Related Constructors: +++ Also See: +++ AMS Classifications: +++ Keywords: +++ References: +++ Description: +++ An eltable over domains D and I is a structure which can be viewed +++ as a function from D to I. +++ Examples of eltable structures range from data structures, e.g. those +++ of type \spadtype{List}, to algebraic structures like \spadtype{Polynomial}. +Eltable(S:SetCategory, Index:Type): Category == with + elt : (%, S) -> Index + ++ elt(u,i) (also written: u . i) returns the element of u indexed by i. + ++ Error: if i is not an index of u. + +@ +<>= +"ELTAB" [color=lightblue,href="books/bookvol10.pamphlet"]; +"ELTAB" -> "CATEGORY" + +@ +<>= +"Eltable(a:SetCategory,b:Type)" + [color=lightblue,href="books/bookvol10.pamphlet"]; +"Eltable(a:SetCategory,b:Type)" -> "Category" + +@ +%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% +\pagehead{RetractableTo}{RETRACT} +\pagepic{ps/v10retractableto.ps}{RETRACT} + +See:\\ +\pagefrom{Category}{CATEGORY} +<>= +)abbrev category RETRACT RetractableTo +++ Category for retract +++ Author: ??? +++ Date Created: ??? +++ Date Last Updated: 14 May 1991 +++ Description: +++ A is retractable to B means that some elementsif A can be converted +++ into elements of B and any element of B can be converted into an +++ element of A. +RetractableTo(S: Type): Category == with + coerce: S -> % + ++ coerce(a) transforms a into an element of %. + retractIfCan: % -> Union(S,"failed") + ++ retractIfCan(a) transforms a into an element of S if possible. + ++ Returns "failed" if a cannot be made into an element of S. + retract: % -> S + ++ retract(a) transforms a into an element of S if possible. + ++ Error: if a cannot be made into an element of S. + add + retract(s) == + (u:=retractIfCan s) case "failed" => error "not retractable" + u + +@ +<>= +"RETRACT" [color=lightblue,href="books/bookvol10.pamphlet"]; +"RETRACT" -> "CATEGORY" + +@ +<>= +"RetractableTo(a:Type)" + [color=lightblue,href="books/bookvol10.pamphlet"]; +"RetractableTo(a:Type)" -> "Category" + +"RetractableTo(SetCategory)" + [color=seagreen,href="books/bookvol10.pamphlet"]; +"RetractableTo(SetCategory)" -> "RetractableTo(a:Type)" + +"RetractableTo(Symbol)" + [color=seagreen,href="books/bookvol10.pamphlet"]; +"RetractableTo(Symbol)" -> "RetractableTo(a:Type)" + +"RetractableTo(Integer)" + [color=seagreen,href="books/bookvol10.pamphlet"]; +"RetractableTo(Integer)" -> "RetractableTo(a:Type)" + +"RetractableTo(NonNegativeInteger)" + [color=seagreen,href="books/bookvol10.pamphlet"]; +"RetractableTo(NonNegativeInteger)" -> "RetractableTo(a:Type)" + +"RetractableTo(Fraction(Integer))" + [color=seagreen,href="books/bookvol10.pamphlet"]; +"RetractableTo(Fraction(Integer))" -> "RetractableTo(a:Type)" + +"RetractableTo(Float)" + [color=seagreen,href="books/bookvol10.pamphlet"]; +"RetractableTo(Float)" -> "RetractableTo(a:Type)" + +"RetractableTo(Kernel(ExpressionSpace))" + [color=seagreen,href="books/bookvol10.pamphlet"]; +"RetractableTo(Kernel(ExpressionSpace))" -> "RetractableTo(a:Type)" + +"RetractableTo(CommutativeRing)" + [color=seagreen,href="books/bookvol10.pamphlet"]; +"RetractableTo(CommutativeRing)" -> "RetractableTo(a:Type)" +@ +%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% +\pagehead{Type}{TYPE} +\pagepic{ps/v10type.ps}{TYPE} + +See:\\ +\pageto{Aggregate}{AGG} +\pagefrom{Category}{CATEGORY} +<>= +)abbrev category TYPE Type +++ The new fundamental Type (keeping Object for 1.5 as well) +++ Author: Richard Jenks +++ Date Created: 14 May 1992 +++ Date Last Updated: 14 May 1992 +++ Description: The fundamental Type; +Type(): Category == with nil + +@ +<>= +"TYPE" [color=lightblue,href="books/bookvol10.pamphlet"]; +"TYPE" -> "CATEGORY" + +@ +<>= +"Type()" [color=lightblue,href="books/bookvol10.pamphlet"]; +"Type()" -> "Category" + +@ +\chapter{Category Layer 2} +%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% +\pagehead{Aggregate}{AGG} +\pagepic{ps/v10agg.ps}{AGG} + +See:\\ +\pageto{HomogeneousAggregate}{HOAGG} +\pagefrom{Type}{TYPE} <>= )abbrev category AGG Aggregate ++ Author: Michael Monagan; revised by Manuel Bronstein and Richard Jenks @@ -2047,9 +2344,17 @@ Aggregate: Category == Type with "Aggregate()" -> "Type()" @ -\section{category ALAGG AssociationListAggregate} -<>= -)abbrev category ALAGG AssociationListAggregate +%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% +\pagehead{EltableAggregate}{ELTAGG} +%\pagepic{ps/v10eltableaggregate.ps}{ELTAGG} +\includegraphics[scale=0.75]{ps/v10eltableaggregate.ps} +\index{images!STAGG} + +See:\\ +\pageto{IndexedAggregate}{IXAGG} +\pagefrom{Eltable}{ELTAB} +<>= +)abbrev category ELTAGG EltableAggregate ++ Author: Michael Monagan; revised by Manuel Bronstein and Richard Jenks ++ Date Created: August 87 through August 88 ++ Date Last Updated: April 1991 @@ -2060,100 +2365,1859 @@ Aggregate: Category == Type with ++ Keywords: ++ References: ++ Description: -++ An association list is a list of key entry pairs which may be viewed -++ as a table. It is a poor mans version of a table: -++ searching for a key is a linear operation. -AssociationListAggregate(Key:SetCategory,Entry:SetCategory): Category == - Join(TableAggregate(Key, Entry), ListAggregate Record(key:Key,entry:Entry)) with - assoc: (Key, %) -> Union(Record(key:Key,entry:Entry), "failed") - ++ assoc(k,u) returns the element x in association list u stored - ++ with key k, or "failed" if u has no key k. +++ An eltable aggregate is one which can be viewed as a function. +++ For example, the list \axiom{[1,7,4]} can applied to 0,1, and 2 respectively +++ will return the integers 1,7, and 4; thus this list may be viewed +++ as mapping 0 to 1, 1 to 7 and 2 to 4. In general, an aggregate +++ can map members of a domain {\em Dom} to an image domain {\em Im}. +EltableAggregate(Dom:SetCategory, Im:Type): Category == +-- This is separated from Eltable +-- and series won't have to support qelt's and setelt's. + Eltable(Dom, Im) with + elt : (%, Dom, Im) -> Im + ++ elt(u, x, y) applies u to x if x is in the domain of u, + ++ and returns y otherwise. + ++ For example, if u is a polynomial in \axiom{x} over the rationals, + ++ \axiom{elt(u,n,0)} may define the coefficient of \axiom{x} + ++ to the power n, returning 0 when n is out of range. + qelt: (%, Dom) -> Im + ++ qelt(u, x) applies \axiom{u} to \axiom{x} without checking whether + ++ \axiom{x} is in the domain of \axiom{u}. If \axiom{x} is not in the + ++ domain of \axiom{u} a memory-access violation may occur. If a check + ++ on whether \axiom{x} is in the domain of \axiom{u} is required, use + ++ the function \axiom{elt}. + if % has shallowlyMutable then + setelt : (%, Dom, Im) -> Im + ++ setelt(u,x,y) sets the image of x to be y under u, + ++ assuming x is in the domain of u. + ++ Error: if x is not in the domain of u. + -- this function will soon be renamed as setelt!. + qsetelt_!: (%, Dom, Im) -> Im + ++ qsetelt!(u,x,y) sets the image of \axiom{x} to be \axiom{y} under + ++ \axiom{u}, without checking that \axiom{x} is in the domain of + ++ \axiom{u}. + ++ If such a check is required use the function \axiom{setelt}. + add + qelt(a, x) == elt(a, x) + if % has shallowlyMutable then + qsetelt_!(a, x, y) == (a.x := y) @ -<>= -"ALAGG" [color=lightblue,href="books/bookvol10.pamphlet"]; -"ALAGG" -> "TBAGG" -"ALAGG" -> "LSAGG" +<>= +"ELTAGG" [color=lightblue,href="books/bookvol10.pamphlet"]; +"ELTAGG" -> "ELTAB" @ -<>= -"AssociationListAggregate(a:SetCategory,b:SetCategory)" +<>= +"EltableAggregate(a:SetCategory,b:Type)" [color=lightblue,href="books/bookvol10.pamphlet"]; -"AssociationListAggregate(a:SetCategory,b:SetCategory)" -> - "TableAggregate(a:SetCategory,b:SetCategory)" -"AssociationListAggregate(a:SetCategory,b:SetCategory)" -> - "ListAggregate(Record(a:SetCategory,b:SetCategory))" +"EltableAggregate(a:SetCategory,b:Type)" -> "Eltable(a:SetCategory,b:Type)" @ -\section{ALAGG.lsp BOOTSTRAP} -{\bf ALAGG} depends on a chain of files. We need to break this cycle to build -the algebra. So we keep a cached copy of the translated {\bf ALAGG} -category which we can write into the {\bf MID} directory. We compile -the lisp code and copy the {\bf ALAGG.o} file to the {\bf OUT} directory. -This is eventually forcibly replaced by a recompiled version. +\chapter{Category Layer 3} +%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% +\pagehead{HomogeneousAggregate}{HOAGG} +\pagepic{ps/v10homogeneousaggregate.ps}{HOAGG} + +See:\\ +\pageto{BagAggregate}{BGAGG} +\pageto{Collection}{CLAGG} +\pageto{IndexedAggregate}{IXAGG} +\pageto{RecursiveAggregate}{RCAGG} +\pagefrom{Aggregate}{AGG} +<>= +)abbrev category HOAGG HomogeneousAggregate +++ Author: Michael Monagan; revised by Manuel Bronstein and Richard Jenks +++ Date Created: August 87 through August 88 +++ Date Last Updated: April 1991, May 1995 +++ Basic Operations: +++ Related Constructors: +++ Also See: +++ AMS Classifications: +++ Keywords: +++ References: +++ Description: +++ A homogeneous aggregate is an aggregate of elements all of the +++ same type. +++ In the current system, all aggregates are homogeneous. +++ Two attributes characterize classes of aggregates. +++ Aggregates from domains with attribute \spadatt{finiteAggregate} +++ have a finite number of members. +++ Those with attribute \spadatt{shallowlyMutable} allow an element +++ to be modified or updated without changing its overall value. +HomogeneousAggregate(S:Type): Category == Aggregate with + if S has SetCategory then SetCategory + if S has SetCategory then + if S has Evalable S then Evalable S + map : (S->S,%) -> % + ++ map(f,u) returns a copy of u with each element x replaced by f(x). + ++ For collections, \axiom{map(f,u) = [f(x) for x in u]}. + if % has shallowlyMutable then + map_!: (S->S,%) -> % + ++ map!(f,u) destructively replaces each element x of u + ++ by \axiom{f(x)}. + if % has finiteAggregate then + any?: (S->Boolean,%) -> Boolean + ++ any?(p,u) tests if \axiom{p(x)} is true for any element x of u. + ++ Note: for collections, + ++ \axiom{any?(p,u) = reduce(or,map(f,u),false,true)}. + every?: (S->Boolean,%) -> Boolean + ++ every?(f,u) tests if p(x) is true for all elements x of u. + ++ Note: for collections, + ++ \axiom{every?(p,u) = reduce(and,map(f,u),true,false)}. + count: (S->Boolean,%) -> NonNegativeInteger + ++ count(p,u) returns the number of elements x in u + ++ such that \axiom{p(x)} is true. For collections, + ++ \axiom{count(p,u) = reduce(+,[1 for x in u | p(x)],0)}. + parts: % -> List S + ++ parts(u) returns a list of the consecutive elements of u. + ++ For collections, \axiom{parts([x,y,...,z]) = (x,y,...,z)}. + members: % -> List S + ++ members(u) returns a list of the consecutive elements of u. + ++ For collections, \axiom{parts([x,y,...,z]) = (x,y,...,z)}. + if S has SetCategory then + count: (S,%) -> NonNegativeInteger + ++ count(x,u) returns the number of occurrences of x in u. For + ++ collections, \axiom{count(x,u) = reduce(+,[x=y for y in u],0)}. + member?: (S,%) -> Boolean + ++ member?(x,u) tests if x is a member of u. + ++ For collections, + ++ \axiom{member?(x,u) = reduce(or,[x=y for y in u],false)}. + add + if S has Evalable S then + eval(u:%,l:List Equation S):% == map(eval(#1,l),u) + if % has finiteAggregate then + #c == # parts c + any?(f, c) == _or/[f x for x in parts c] + every?(f, c) == _and/[f x for x in parts c] + count(f:S -> Boolean, c:%) == _+/[1 for x in parts c | f x] + members x == parts x + if S has SetCategory then + count(s:S, x:%) == count(s = #1, x) + member?(e, c) == any?(e = #1,c) + x = y == + size?(x, #y) and _and/[a = b for a in parts x for b in parts y] + coerce(x:%):OutputForm == + bracket + commaSeparate [a::OutputForm for a in parts x]$List(OutputForm) -Note that this code is not included in the generated catdef.spad file. +@ +<>= +"HOAGG" [color=lightblue,href="books/bookvol10.pamphlet"]; +"HOAGG" -> "AGG" -<>= +@ +<>= +"HomogeneousAggregate(a:Type)" + [color=lightblue,href="books/bookvol10.pamphlet"]; +"HomogeneousAggregate(a:Type)" -> "Aggregate()" -(|/VERSIONCHECK| 2) +@ +\chapter{Category Layer 4} +%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% +\pagehead{BagAggregate}{BGAGG} +\pagepic{ps/v10bagaggregate.ps}{BGAGG} + +See:\\ +\pageto{DictionaryOperations}{DIOPS} +\pageto{PriorityQueueAggregate}{PRQAGG} +\pageto{QueueAggregate}{QUAGG} +\pageto{StackAggregate}{SKAGG} +\pagefrom{HomogeneousAggregate}{HOAGG} +<>= +)abbrev category BGAGG BagAggregate +++ Author: Michael Monagan; revised by Manuel Bronstein and Richard Jenks +++ Date Created: August 87 through August 88 +++ Date Last Updated: April 1991 +++ Basic Operations: +++ Related Constructors: +++ Also See: +++ AMS Classifications: +++ Keywords: +++ References: +++ Description: +++ A bag aggregate is an aggregate for which one can insert and extract +++ objects, and where the order in which objects are inserted determines +++ the order of extraction. +++ Examples of bags are stacks, queues, and dequeues. +BagAggregate(S:Type): Category == HomogeneousAggregate S with + shallowlyMutable + ++ shallowlyMutable means that elements of bags may be + ++ destructively changed. + bag: List S -> % + ++ bag([x,y,...,z]) creates a bag with elements x,y,...,z. + extract_!: % -> S + ++ extract!(u) destructively removes a (random) item from bag u. + insert_!: (S,%) -> % + ++ insert!(x,u) inserts item x into bag u. + inspect: % -> S + ++ inspect(u) returns an (random) element from a bag. + add + bag(l) == + x:=empty() + for s in l repeat x:=insert_!(s,x) + x -(SETQ |AssociationListAggregate;CAT| (QUOTE NIL)) +@ +<>= +"BGAGG" [color=lightblue,href="books/bookvol10.pamphlet"]; +"BGAGG" -> "HOAGG" -(SETQ |AssociationListAggregate;AL| (QUOTE NIL)) +@ +<>= +"BagAggregate(a:Type)" [color=lightblue,href="books/bookvol10.pamphlet"]; +"BagAggregate(a:Type)" -> "HomogeneousAggregate(a:Type)" -(DEFUN |AssociationListAggregate| - (|&REST| #1=#:G88404 |&AUX| #2=#:G88402) - (DSETQ #2# #1#) - (LET (#3=#:G88403) - (COND - ((SETQ #3# (|assoc| (|devaluateList| #2#) |AssociationListAggregate;AL|)) - (CDR #3#)) - (T - (SETQ |AssociationListAggregate;AL| - (|cons5| - (CONS - (|devaluateList| #2#) - (SETQ #3# (APPLY (FUNCTION |AssociationListAggregate;|) #2#))) - |AssociationListAggregate;AL|)) #3#)))) +"BagAggregate(a:SetCategory)" [color=seagreen,href="books/bookvol10.pamphlet"]; +"BagAggregate(a:SetCategory)" -> "BagAggregate(a:Type)" + +@ +%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% +\pagehead{Collection}{CLAGG} +\pagepic{ps/v10collection.ps}{CLAGG} + +See:\\ +\pageto{DictionaryOperations}{DIOPS} +\pageto{LinearAggregate}{LNAGG} +\pagefrom{HomogeneousAggregate}{HOAGG} +<>= +)abbrev category CLAGG Collection +++ Author: Michael Monagan; revised by Manuel Bronstein and Richard Jenks +++ Date Created: August 87 through August 88 +++ Date Last Updated: April 1991 +++ Basic Operations: +++ Related Constructors: +++ Also See: +++ AMS Classifications: +++ Keywords: +++ References: +++ Description: +++ A collection is a homogeneous aggregate which can built from +++ list of members. The operation used to build the aggregate is +++ generically named \spadfun{construct}. However, each collection +++ provides its own special function with the same name as the +++ data type, except with an initial lower case letter, e.g. +++ \spadfun{list} for \spadtype{List}, +++ \spadfun{flexibleArray} for \spadtype{FlexibleArray}, and so on. +Collection(S:Type): Category == HomogeneousAggregate(S) with + construct: List S -> % + ++ \axiom{construct(x,y,...,z)} returns the collection of elements + ++ \axiom{x,y,...,z} ordered as given. Equivalently written as + ++ \axiom{[x,y,...,z]$D}, where + ++ D is the domain. D may be omitted for those of type List. + find: (S->Boolean, %) -> Union(S, "failed") + ++ find(p,u) returns the first x in u such that \axiom{p(x)} is true, and + ++ "failed" otherwise. + if % has finiteAggregate then + reduce: ((S,S)->S,%) -> S + ++ reduce(f,u) reduces the binary operation f across u. For example, + ++ if u is \axiom{[x,y,...,z]} then \axiom{reduce(f,u)} + ++ returns \axiom{f(..f(f(x,y),...),z)}. + ++ Note: if u has one element x, \axiom{reduce(f,u)} returns x. + ++ Error: if u is empty. + ++ + ++C )clear all + ++X reduce(+,[C[i]*x**i for i in 1..5]) + + reduce: ((S,S)->S,%,S) -> S + ++ reduce(f,u,x) reduces the binary operation f across u, where x is + ++ the identity operation of f. + ++ Same as \axiom{reduce(f,u)} if u has 2 or more elements. + ++ Returns \axiom{f(x,y)} if u has one element y, + ++ x if u is empty. + ++ For example, \axiom{reduce(+,u,0)} returns the + ++ sum of the elements of u. + remove: (S->Boolean,%) -> % + ++ remove(p,u) returns a copy of u removing all elements x such that + ++ \axiom{p(x)} is true. + ++ Note: \axiom{remove(p,u) == [x for x in u | not p(x)]}. + select: (S->Boolean,%) -> % + ++ select(p,u) returns a copy of u containing only those elements such + ++ \axiom{p(x)} is true. + ++ Note: \axiom{select(p,u) == [x for x in u | p(x)]}. + if S has SetCategory then + reduce: ((S,S)->S,%,S,S) -> S + ++ reduce(f,u,x,z) reduces the binary operation f across u, stopping + ++ when an "absorbing element" z is encountered. + ++ As for \axiom{reduce(f,u,x)}, x is the identity operation of f. + ++ Same as \axiom{reduce(f,u,x)} when u contains no element z. + ++ Thus the third argument x is returned when u is empty. + remove: (S,%) -> % + ++ remove(x,u) returns a copy of u with all + ++ elements \axiom{y = x} removed. + ++ Note: \axiom{remove(y,c) == [x for x in c | x ^= y]}. + removeDuplicates: % -> % + ++ removeDuplicates(u) returns a copy of u with all duplicates + ++ removed. + if S has ConvertibleTo InputForm then ConvertibleTo InputForm + add + if % has finiteAggregate then + #c == # parts c + count(f:S -> Boolean, c:%) == _+/[1 for x in parts c | f x] + any?(f, c) == _or/[f x for x in parts c] + every?(f, c) == _and/[f x for x in parts c] + find(f:S -> Boolean, c:%) == find(f, parts c) + reduce(f:(S,S)->S, x:%) == reduce(f, parts x) + reduce(f:(S,S)->S, x:%, s:S) == reduce(f, parts x, s) + remove(f:S->Boolean, x:%) == + construct remove(f, parts x) + select(f:S->Boolean, x:%) == + construct select(f, parts x) + + if S has SetCategory then + remove(s:S, x:%) == remove(#1 = s, x) + reduce(f:(S,S)->S, x:%, s1:S, s2:S) == reduce(f, parts x, s1, s2) + removeDuplicates(x) == construct removeDuplicates parts x + +@ +<>= +"CLAGG" [color=lightblue,href="books/bookvol10.pamphlet"]; +"CLAGG" -> "HOAGG" + +@ +<>= +"Collection(a:Type)" [color=lightblue,href="books/bookvol10.pamphlet"]; +"Collection(a:Type)" -> "HomogeneousAggregate(a:Type)" + +"Collection(a:SetCategory)" [color=seagreen,href="books/bookvol10.pamphlet"]; +"Collection(a:SetCategory)" -> "Collection(a:Type)" + +@ +%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% +\pagehead{IndexedAggregate}{IXAGG} +\pagepic{ps/v10indexedaggregate.ps}{IXAGG} + +See:\\ +\pageto{LinearAggregate}{LNAGG} +\pageto{TableAggregate}{TBAGG} +\pagefrom{EltableAggregate}{ELTAGG} +\pagefrom{HomogeneousAggregate}{HOAGG} +<>= +)abbrev category IXAGG IndexedAggregate +++ Author: Michael Monagan; revised by Manuel Bronstein and Richard Jenks +++ Date Created: August 87 through August 88 +++ Date Last Updated: April 1991 +++ Basic Operations: +++ Related Constructors: +++ Also See: +++ AMS Classifications: +++ Keywords: +++ References: +++ Description: +++ An indexed aggregate is a many-to-one mapping of indices to entries. +++ For example, a one-dimensional-array is an indexed aggregate where +++ the index is an integer. Also, a table is an indexed aggregate +++ where the indices and entries may have any type. +IndexedAggregate(Index: SetCategory, Entry: Type): Category == + Join(HomogeneousAggregate(Entry), EltableAggregate(Index, Entry)) with + entries: % -> List Entry + ++ entries(u) returns a list of all the entries of aggregate u + ++ in no assumed order. + -- to become entries: % -> Entry* and entries: % -> Iterator(Entry,Entry) + index?: (Index,%) -> Boolean + ++ index?(i,u) tests if i is an index of aggregate u. + indices: % -> List Index + ++ indices(u) returns a list of indices of aggregate u in no + ++ particular order. to become indices: + -- % -> Index* and indices: % -> Iterator(Index,Index). +-- map: ((Entry,Entry)->Entry,%,%,Entry) -> % +-- ++ exists c = map(f,a,b,x), i:Index where +-- ++ c.i = f(a(i,x),b(i,x)) | index?(i,a) or index?(i,b) + if Entry has SetCategory and % has finiteAggregate then + entry?: (Entry,%) -> Boolean + ++ entry?(x,u) tests if x equals \axiom{u . i} for some index i. + if Index has OrderedSet then + maxIndex: % -> Index + ++ maxIndex(u) returns the maximum index i of aggregate u. + ++ Note: in general, + ++ \axiom{maxIndex(u) = reduce(max,[i for i in indices u])}; + ++ if u is a list, \axiom{maxIndex(u) = #u}. + minIndex: % -> Index + ++ minIndex(u) returns the minimum index i of aggregate u. + ++ Note: in general, + ++ \axiom{minIndex(a) = reduce(min,[i for i in indices a])}; + ++ for lists, \axiom{minIndex(a) = 1}. + first : % -> Entry + ++ first(u) returns the first element x of u. + ++ Note: for collections, \axiom{first([x,y,...,z]) = x}. + ++ Error: if u is empty. + + if % has shallowlyMutable then + fill_!: (%,Entry) -> % + ++ fill!(u,x) replaces each entry in aggregate u by x. + ++ The modified u is returned as value. + swap_!: (%,Index,Index) -> Void + ++ swap!(u,i,j) interchanges elements i and j of aggregate u. + ++ No meaningful value is returned. + add + elt(a, i, x) == (index?(i, a) => qelt(a, i); x) + + if % has finiteAggregate then + entries x == parts x + if Entry has SetCategory then + entry?(x, a) == member?(x, a) + + if Index has OrderedSet then + maxIndex a == "max"/indices(a) + minIndex a == "min"/indices(a) + first a == a minIndex a + + if % has shallowlyMutable then + map(f, a) == map_!(f, copy a) + + map_!(f, a) == + for i in indices a repeat qsetelt_!(a, i, f qelt(a, i)) + a + + fill_!(a, x) == + for i in indices a repeat qsetelt_!(a, i, x) + a + + swap_!(a, i, j) == + t := a.i + qsetelt_!(a, i, a.j) + qsetelt_!(a, j, t) + void + +@ +<>= +"IXAGG" [color=lightblue,href="books/bookvol10.pamphlet"]; +"IXAGG" -> "HOAGG" +"IXAGG" -> "ELTAGG" + +@ +<>= +"IndexedAggregate(a:SetCategory,b:Type)" + [color=lightblue,href="books/bookvol10.pamphlet"]; +"IndexedAggregate(a:SetCategory,b:Type)" -> + "HomogeneousAggregate(a:Type)" +"IndexedAggregate(a:SetCategory,b:Type)" -> + "EltableAggregate(a:SetCategory,b:Type)" + +"IndexedAggregate(a:SetCategory,b:SetCategory)" + [color=seagreen,href="books/bookvol10.pamphlet"]; +"IndexedAggregate(a:SetCategory,b:SetCategory)" -> + "IndexedAggregate(a:SetCategory,b:Type)" + +"IndexedAggregate(b:Integer,a:Type)" + [color=seagreen,href="books/bookvol10.pamphlet"]; +"IndexedAggregate(b:Integer,a:Type)" -> + "IndexedAggregate(a:SetCategory,b:Type)" + +@ +%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% +\pagehead{RecursiveAggregate}{RCAGG} +\pagepic{ps/v10recursiveaggregate.ps}{RCAGG} + +See:\\ +\pageto{BinaryRecursiveAggregate}{BRAGG} +\pageto{DoublyLinkedAggregate}{DLAGG} +\pageto{StreamAggregate}{STAGG} +\pageto{UnaryRecursiveAggregate}{URAGG} +\pagefrom{HomogeneousAggregate}{HOAGG} +<>= +)abbrev category RCAGG RecursiveAggregate +++ Author: Michael Monagan; revised by Manuel Bronstein and Richard Jenks +++ Date Created: August 87 through August 88 +++ Date Last Updated: April 1991 +++ Basic Operations: +++ Related Constructors: +++ Also See: +++ AMS Classifications: +++ Keywords: +++ References: +++ Description: +++ A recursive aggregate over a type S is a model for a +++ a directed graph containing values of type S. +++ Recursively, a recursive aggregate is a {\em node} +++ consisting of a \spadfun{value} from S and 0 or more \spadfun{children} +++ which are recursive aggregates. +++ A node with no children is called a \spadfun{leaf} node. +++ A recursive aggregate may be cyclic for which some operations as noted +++ may go into an infinite loop. +RecursiveAggregate(S:Type): Category == HomogeneousAggregate(S) with + children: % -> List % + ++ children(u) returns a list of the children of aggregate u. + -- should be % -> %* and also needs children: % -> Iterator(S,S) + nodes: % -> List % + ++ nodes(u) returns a list of all of the nodes of aggregate u. + -- to become % -> %* and also nodes: % -> Iterator(S,S) + leaf?: % -> Boolean + ++ leaf?(u) tests if u is a terminal node. + value: % -> S + ++ value(u) returns the value of the node u. + elt: (%,"value") -> S + ++ elt(u,"value") (also written: \axiom{a. value}) is + ++ equivalent to \axiom{value(a)}. + cyclic?: % -> Boolean + ++ cyclic?(u) tests if u has a cycle. + leaves: % -> List S + ++ leaves(t) returns the list of values in obtained by visiting the + ++ nodes of tree \axiom{t} in left-to-right order. + distance: (%,%) -> Integer + ++ distance(u,v) returns the path length (an integer) from node u to v. + if S has SetCategory then + child?: (%,%) -> Boolean + ++ child?(u,v) tests if node u is a child of node v. + node?: (%,%) -> Boolean + ++ node?(u,v) tests if node u is contained in node v + ++ (either as a child, a child of a child, etc.). + if % has shallowlyMutable then + setchildren_!: (%,List %)->% + ++ setchildren!(u,v) replaces the current children of node u + ++ with the members of v in left-to-right order. + setelt: (%,"value",S) -> S + ++ setelt(a,"value",x) (also written \axiom{a . value := x}) + ++ is equivalent to \axiom{setvalue!(a,x)} + setvalue_!: (%,S) -> S + ++ setvalue!(u,x) sets the value of node u to x. + add + elt(x,"value") == value x + if % has shallowlyMutable then + setelt(x,"value",y) == setvalue_!(x,y) + if S has SetCategory then + child?(x,l) == member?(x,children(l)) + +@ +<>= +"RCAGG" [color=lightblue,href="books/bookvol10.pamphlet"]; +"RCAGG" -> "HOAGG" + +@ +<>= +"RecursiveAggregate(a:Type)" + [color=lightblue,href="books/bookvol10.pamphlet"]; +"RecursiveAggregate(a:Type)" -> "HomogeneousAggregate(a:Type)" + +@ +\chapter{Category Layer 5} +%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% +\pagehead{BinaryRecursiveAggregate}{BRAGG} +\pagepic{ps/v10binaryrecursiveaggregate.ps}{BRAGG} + +See:\\ +\pagefrom{RecursiveAggregate}{RCAGG} +<>= +)abbrev category BRAGG BinaryRecursiveAggregate +++ Author: Michael Monagan; revised by Manuel Bronstein and Richard Jenks +++ Date Created: August 87 through August 88 +++ Date Last Updated: April 1991 +++ Basic Operations: +++ Related Constructors: +++ Also See: +++ AMS Classifications: +++ Keywords: +++ References: +++ Description: +++ A binary-recursive aggregate has 0, 1 or 2 children and +++ serves as a model for a binary tree or a doubly-linked aggregate structure +BinaryRecursiveAggregate(S:Type):Category == RecursiveAggregate S with + -- needs preorder, inorder and postorder iterators + left: % -> % + ++ left(u) returns the left child. + elt: (%,"left") -> % + ++ elt(u,"left") (also written: \axiom{a . left}) is + ++ equivalent to \axiom{left(a)}. + right: % -> % + ++ right(a) returns the right child. + elt: (%,"right") -> % + ++ elt(a,"right") (also written: \axiom{a . right}) + ++ is equivalent to \axiom{right(a)}. + if % has shallowlyMutable then + setelt: (%,"left",%) -> % + ++ setelt(a,"left",b) (also written \axiom{a . left := b}) is + ++ equivalent to \axiom{setleft!(a,b)}. + setleft_!: (%,%) -> % + ++ setleft!(a,b) sets the left child of \axiom{a} to be b. + setelt: (%,"right",%) -> % + ++ setelt(a,"right",b) (also written \axiom{b . right := b}) + ++ is equivalent to \axiom{setright!(a,b)}. + setright_!: (%,%) -> % + ++ setright!(a,x) sets the right child of t to be x. + add + cycleMax ==> 1000 + + elt(x,"left") == left x + elt(x,"right") == right x + leaf? x == empty? x or empty? left x and empty? right x + leaves t == + empty? t => empty()$List(S) + leaf? t => [value t] + concat(leaves left t,leaves right t) + nodes x == + l := empty()$List(%) + empty? x => l + concat(nodes left x,concat([x],nodes right x)) + children x == + l := empty()$List(%) + empty? x => l + empty? left x => [right x] + empty? right x => [left x] + [left x, right x] + if % has SetAggregate(S) and S has SetCategory then + node?(u,v) == + empty? v => false + u = v => true + for y in children v repeat node?(u,y) => return true + false + x = y == + empty?(x) => empty?(y) + empty?(y) => false + value x = value y and left x = left y and right x = right y + if % has finiteAggregate then + member?(x,u) == + empty? u => false + x = value u => true + member?(x,left u) or member?(x,right u) + + if S has SetCategory then + coerce(t:%): OutputForm == + empty? t => "[]"::OutputForm + v := value(t):: OutputForm + empty? left t => + empty? right t => v + r := coerce(right t)@OutputForm + bracket ["."::OutputForm, v, r] + l := coerce(left t)@OutputForm + r := + empty? right t => "."::OutputForm + coerce(right t)@OutputForm + bracket [l, v, r] + + if % has finiteAggregate then + aggCount: (%,NonNegativeInteger) -> NonNegativeInteger + #x == aggCount(x,0) + aggCount(x,k) == + empty? x => 0 + k := k + 1 + k = cycleMax and cyclic? x => error "cyclic tree" + for y in children x repeat k := aggCount(y,k) + k + + isCycle?: (%, List %) -> Boolean + eqMember?: (%, List %) -> Boolean + cyclic? x == not empty? x and isCycle?(x,empty()$(List %)) + isCycle?(x,acc) == + empty? x => false + eqMember?(x,acc) => true + for y in children x | not empty? y repeat + isCycle?(y,acc) => return true + false + eqMember?(y,l) == + for x in l repeat eq?(x,y) => return true + false + if % has shallowlyMutable then + setelt(x,"left",b) == setleft_!(x,b) + setelt(x,"right",b) == setright_!(x,b) + +@ +<>= +"BRAGG" [color=lightblue,href="books/bookvol10.pamphlet"]; +"BRAGG" -> "RCAGG" + +@ +<>= +"BinaryRecursiveAggregate(a:Type)" + [color=lightblue,href="books/bookvol10.pamphlet"]; +"BinaryRecursiveAggregate(a:Type)" -> "RecursiveAggregate(a:Type)" + +@ +%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% +\pagehead{DictionaryOperations}{DIOPS} +\pagepic{ps/v10dictionaryoperations.ps}{DIOPS} + +See:\\ +\pageto{Dictionary}{DIAGG} +\pageto{MultiDictionary}{MDAGG} +\pagefrom{BagAggregate}{BGAGG} +\pagefrom{Collection}{CLAGG} +<>= +)abbrev category DIOPS DictionaryOperations +++ Author: Michael Monagan; revised by Manuel Bronstein and Richard Jenks +++ Date Created: August 87 through August 88 +++ Date Last Updated: April 1991 +++ Basic Operations: +++ Related Constructors: +++ Also See: +++ AMS Classifications: +++ Keywords: +++ References: +++ Description: +++ This category is a collection of operations common to both +++ categories \spadtype{Dictionary} and \spadtype{MultiDictionary} +DictionaryOperations(S:SetCategory): Category == + Join(BagAggregate S, Collection(S)) with + dictionary: () -> % + ++ dictionary()$D creates an empty dictionary of type D. + dictionary: List S -> % + ++ dictionary([x,y,...,z]) creates a dictionary consisting of + ++ entries \axiom{x,y,...,z}. +-- insert: (S,%) -> S ++ insert an entry +-- member?: (S,%) -> Boolean ++ search for an entry +-- remove_!: (S,%,NonNegativeInteger) -> % +-- ++ remove!(x,d,n) destructively changes dictionary d by removing +-- ++ up to n entries y such that \axiom{y = x}. +-- remove_!: (S->Boolean,%,NonNegativeInteger) -> % +-- ++ remove!(p,d,n) destructively changes dictionary d by removing +-- ++ up to n entries x such that \axiom{p(x)} is true. + if % has finiteAggregate then + remove_!: (S,%) -> % + ++ remove!(x,d) destructively changes dictionary d by removing + ++ all entries y such that \axiom{y = x}. + remove_!: (S->Boolean,%) -> % + ++ remove!(p,d) destructively changes dictionary d by removeing + ++ all entries x such that \axiom{p(x)} is true. + select_!: (S->Boolean,%) -> % + ++ select!(p,d) destructively changes dictionary d by removing + ++ all entries x such that \axiom{p(x)} is not true. + add + construct l == dictionary l + dictionary() == empty() + if % has finiteAggregate then + copy d == dictionary parts d + coerce(s:%):OutputForm == + prefix("dictionary"@String :: OutputForm, + [x::OutputForm for x in parts s]) + +@ +<>= +"DIOPS" [color=lightblue,href="books/bookvol10.pamphlet"]; +"DIOPS" -> "BGAGG" +"DIOPS" -> "CLAGG" + +@ +<>= +"DictionaryOperations(a:SetCategory)" + [color=lightblue,href="books/bookvol10.pamphlet"]; +"DictionaryOperations(a:SetCategory)" -> "BagAggregate(a:SetCategory)" +"DictionaryOperations(a:SetCategory)" -> "Collection(a:SetCategory)" + +@ +%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% +\pagehead{DoublyLinkedAggregate}{DLAGG} +\pagepic{ps/v10doublylinkedaggregate.ps}{DLAGG} + +See:\\ +\pagefrom{RecursiveAggregate}{RCAGG} +<>= +)abbrev category DLAGG DoublyLinkedAggregate +++ Author: Michael Monagan; revised by Manuel Bronstein and Richard Jenks +++ Date Created: August 87 through August 88 +++ Date Last Updated: April 1991 +++ Basic Operations: +++ Related Constructors: +++ Also See: +++ AMS Classifications: +++ Keywords: +++ References: +++ Description: +++ A doubly-linked aggregate serves as a model for a doubly-linked +++ list, that is, a list which can has links to both next and previous +++ nodes and thus can be efficiently traversed in both directions. +DoublyLinkedAggregate(S:Type): Category == RecursiveAggregate S with + last: % -> S + ++ last(l) returns the last element of a doubly-linked aggregate l. + ++ Error: if l is empty. + head: % -> % + ++ head(l) returns the first element of a doubly-linked aggregate l. + ++ Error: if l is empty. + tail: % -> % + ++ tail(l) returns the doubly-linked aggregate l starting at + ++ its second element. + ++ Error: if l is empty. + previous: % -> % + ++ previous(l) returns the doubly-link list beginning with its previous + ++ element. + ++ Error: if l has no previous element. + ++ Note: \axiom{next(previous(l)) = l}. + next: % -> % + ++ next(l) returns the doubly-linked aggregate beginning with its next + ++ element. + ++ Error: if l has no next element. + ++ Note: \axiom{next(l) = rest(l)} and \axiom{previous(next(l)) = l}. + if % has shallowlyMutable then + concat_!: (%,%) -> % + ++ concat!(u,v) destructively concatenates doubly-linked aggregate v + ++ to the end of doubly-linked aggregate u. + setprevious_!: (%,%) -> % + ++ setprevious!(u,v) destructively sets the previous node of + ++ doubly-linked aggregate u to v, returning v. + setnext_!: (%,%) -> % + ++ setnext!(u,v) destructively sets the next node of doubly-linked + ++ aggregate u to v, returning v. + +@ +<>= +"DLAGG" [color=lightblue,href="books/bookvol10.pamphlet"]; +"DLAGG" -> "RCAGG" + +@ +<>= +"DoublyLinkedAggregate(a:Type)" + [color=lightblue,href="books/bookvol10.pamphlet"]; +"DoublyLinkedAggregate(a:Type)" -> "RecursiveAggregate(a:Type)" + +@ +%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% +\pagehead{LinearAggregate}{LNAGG} +\pagepic{ps/v10linearaggregate.ps}{LNAGG} + +See:\\ +\pageto{ExtensibleLinearAggregate}{ELAGG} +\pageto{FiniteLinearAggregate}{FLAGG} +\pageto{StreamAggregate}{STAGG} +\pagefrom{Collection}{CLAGG} +\pagefrom{IndexedAggregate}{IXAGG} +<>= +)abbrev category LNAGG LinearAggregate +++ Author: Michael Monagan; revised by Manuel Bronstein and Richard Jenks +++ Date Created: August 87 through August 88 +++ Date Last Updated: April 1991 +++ Basic Operations: +++ Related Constructors: +++ Also See: +++ AMS Classifications: +++ Keywords: +++ References: +++ Description: +++ A linear aggregate is an aggregate whose elements are indexed by integers. +++ Examples of linear aggregates are strings, lists, and +++ arrays. +++ Most of the exported operations for linear aggregates are non-destructive +++ but are not always efficient for a particular aggregate. +++ For example, \spadfun{concat} of two lists needs only to copy its first +++ argument, whereas \spadfun{concat} of two arrays needs to copy both +++ arguments. Most of the operations exported here apply to infinite +++ objects (e.g. streams) as well to finite ones. +++ For finite linear aggregates, see \spadtype{FiniteLinearAggregate}. +LinearAggregate(S:Type): Category == + Join(IndexedAggregate(Integer, S), Collection(S)) with + new : (NonNegativeInteger,S) -> % + ++ new(n,x) returns \axiom{fill!(new n,x)}. + concat: (%,S) -> % + ++ concat(u,x) returns aggregate u with additional element x at the end. + ++ Note: for lists, \axiom{concat(u,x) == concat(u,[x])} + concat: (S,%) -> % + ++ concat(x,u) returns aggregate u with additional element at the front. + ++ Note: for lists: \axiom{concat(x,u) == concat([x],u)}. + concat: (%,%) -> % + ++ concat(u,v) returns an aggregate consisting of the elements of u + ++ followed by the elements of v. + ++ Note: if \axiom{w = concat(u,v)} then + ++ \axiom{w.i = u.i for i in indices u} + ++ and \axiom{w.(j + maxIndex u) = v.j for j in indices v}. + concat: List % -> % + ++ concat(u), where u is a lists of aggregates \axiom{[a,b,...,c]}, + ++ returns a single aggregate consisting of the elements of \axiom{a} + ++ followed by those + ++ of b followed ... by the elements of c. + ++ Note: \axiom{concat(a,b,...,c) = concat(a,concat(b,...,c))}. + map: ((S,S)->S,%,%) -> % + ++ map(f,u,v) returns a new collection w with elements \axiom{z = f(x,y)} + ++ for corresponding elements x and y from u and v. + ++ Note: for linear aggregates, \axiom{w.i = f(u.i,v.i)}. + elt: (%,UniversalSegment(Integer)) -> % + ++ elt(u,i..j) (also written: \axiom{a(i..j)}) returns the aggregate of + ++ elements \axiom{u} for k from i to j in that order. + ++ Note: in general, \axiom{a.s = [a.k for i in s]}. + delete: (%,Integer) -> % + ++ delete(u,i) returns a copy of u with the \axiom{i}th element deleted. + ++ Note: for lists, + ++ \axiom{delete(a,i) == concat(a(0..i - 1),a(i + 1,..))}. + delete: (%,UniversalSegment(Integer)) -> % + ++ delete(u,i..j) returns a copy of u with the \axiom{i}th through + ++ \axiom{j}th element deleted. + ++ Note: \axiom{delete(a,i..j) = concat(a(0..i-1),a(j+1..))}. + insert: (S,%,Integer) -> % + ++ insert(x,u,i) returns a copy of u having x as its \axiom{i}th element. + ++ Note: \axiom{insert(x,a,k) = concat(concat(a(0..k-1),x),a(k..))}. + insert: (%,%,Integer) -> % + ++ insert(v,u,k) returns a copy of u having v inserted beginning at the + ++ \axiom{i}th element. + ++ Note: \axiom{insert(v,u,k) = concat( u(0..k-1), v, u(k..) )}. + if % has shallowlyMutable then setelt: (%,UniversalSegment(Integer),S) -> S + ++ setelt(u,i..j,x) (also written: \axiom{u(i..j) := x}) destructively + ++ replaces each element in the segment \axiom{u(i..j)} by x. + ++ The value x is returned. + ++ Note: u is destructively change so + ++ that \axiom{u.k := x for k in i..j}; + ++ its length remains unchanged. + add + indices a == [i for i in minIndex a .. maxIndex a] + index?(i, a) == i >= minIndex a and i <= maxIndex a + concat(a:%, x:S) == concat(a, new(1, x)) + concat(x:S, y:%) == concat(new(1, x), y) + insert(x:S, a:%, i:Integer) == insert(new(1, x), a, i) + if % has finiteAggregate then + maxIndex l == #l - 1 + minIndex l + +--if % has shallowlyMutable then new(n, s) == fill_!(new n, s) + +@ +<>= +"LNAGG" [color=lightblue,href="books/bookvol10.pamphlet"]; +"LNAGG" -> "IXAGG" +"LNAGG" -> "CLAGG" + +@ +<>= +"LinearAggregate(a:Type)" [color=lightblue,href="books/bookvol10.pamphlet"]; +"LinearAggregate(a:Type)" -> "IndexedAggregate(b:Integer,a:Type)" +"LinearAggregate(a:Type)" -> "Collection(a:Type)" + +@ +%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% +\pagehead{PriorityQueueAggregate}{PRQAGG} +\pagepic{ps/v10priorityqueueaggregate.ps}{PRQAGG} + +See:\\ +\pagefrom{BagAggregate}{BGAGG} +<>= +)abbrev category PRQAGG PriorityQueueAggregate +++ Author: Michael Monagan; revised by Manuel Bronstein and Richard Jenks +++ Date Created: August 87 through August 88 +++ Date Last Updated: April 1991 +++ Basic Operations: +++ Related Constructors: +++ Also See: +++ AMS Classifications: +++ Keywords: +++ References: +++ Description: +++ A priority queue is a bag of items from an ordered set where the item +++ extracted is always the maximum element. +PriorityQueueAggregate(S:OrderedSet): Category == BagAggregate S with + finiteAggregate + max: % -> S + ++ max(q) returns the maximum element of priority queue q. + merge: (%,%) -> % + ++ merge(q1,q2) returns combines priority queues q1 and q2 to return + ++ a single priority queue q. + merge_!: (%,%) -> % + ++ merge!(q,q1) destructively changes priority queue q to include the + ++ values from priority queue q1. + +@ +<>= +"PRQAGG" [color=lightblue,href="books/bookvol10.pamphlet"]; +"PRQAGG" -> "BGAGG" + +@ +<>= +"PriorityQueueAggregate(a:Type)" + [color=lightblue,href="books/bookvol10.pamphlet"]; +"PriorityQueueAggregate(a:Type)" -> "BagAggregate(a:Type)" + +"PriorityQueueAggregate(a:SetCategory)" + [color=seagreen,href="books/bookvol10.pamphlet"]; +"PriorityQueueAggregate(a:SetCategory)" -> "PriorityQueueAggregate(a:Type)" + +"PriorityQueueAggregate(a:OrderedSet)" + [color=seagreen,href="books/bookvol10.pamphlet"]; +"PriorityQueueAggregate(a:OrderedSet)" -> + "PriorityQueueAggregate(a:SetCategory)" + +@ +%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% +\pagehead{QueueAggregate}{QUAGG} +\pagepic{ps/v10queueaggregate.ps}{QUAGG} + +See:\\ +\pageto{DequeueAggregate}{DQAGG} +\pagefrom{BagAggregate}{BGAGG} +<>= +)abbrev category QUAGG QueueAggregate +++ Author: Michael Monagan; revised by Manuel Bronstein and Richard Jenks +++ Date Created: August 87 through August 88 +++ Date Last Updated: April 1991 +++ Basic Operations: +++ Related Constructors: +++ Also See: +++ AMS Classifications: +++ Keywords: +++ References: +++ Description: +++ A queue is a bag where the first item inserted is the first item extracted. +QueueAggregate(S:Type): Category == BagAggregate S with + finiteAggregate + enqueue_!: (S, %) -> S + ++ enqueue!(x,q) inserts x into the queue q at the back end. + dequeue_!: % -> S + ++ dequeue! s destructively extracts the first (top) element from queue q. + ++ The element previously second in the queue becomes the first element. + ++ Error: if q is empty. + rotate_!: % -> % + ++ rotate! q rotates queue q so that the element at the front of + ++ the queue goes to the back of the queue. + ++ Note: rotate! q is equivalent to enqueue!(dequeue!(q)). + length: % -> NonNegativeInteger + ++ length(q) returns the number of elements in the queue. + ++ Note: \axiom{length(q) = #q}. + front: % -> S + ++ front(q) returns the element at the front of the queue. + ++ The queue q is unchanged by this operation. + ++ Error: if q is empty. + back: % -> S + ++ back(q) returns the element at the back of the queue. + ++ The queue q is unchanged by this operation. + ++ Error: if q is empty. + +@ +<>= +"QUAGG" [color=lightblue,href="books/bookvol10.pamphlet"]; +"QUAGG" -> "BGAGG" + +@ +<>= +"QueueAggregate(a:Type)" [color=lightblue,href="books/bookvol10.pamphlet"]; +"QueueAggregate(a:Type)" -> "BagAggregate(a:Type)" + +"QueueAggregate(a:SetCategory)" + [color=seagreen,href="books/bookvol10.pamphlet"]; +"QueueAggregate(a:SetCategory)" -> "QueueAggregate(a:Type)" + +@ +%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% +\pagehead{StackAggregate}{SKAGG} +\pagepic{ps/v10stackaggregate.ps}{SKAGG} + +See:\\ +\pageto{DequeueAggregate}{DQAGG} +\pagefrom{BagAggregate}{BGAGG} +<>= +)abbrev category SKAGG StackAggregate +++ Author: Michael Monagan; revised by Manuel Bronstein and Richard Jenks +++ Date Created: August 87 through August 88 +++ Date Last Updated: April 1991 +++ Basic Operations: +++ Related Constructors: +++ Also See: +++ AMS Classifications: +++ Keywords: +++ References: +++ Description: +++ A stack is a bag where the last item inserted is the first item extracted. +StackAggregate(S:Type): Category == BagAggregate S with + finiteAggregate + push_!: (S,%) -> S + ++ push!(x,s) pushes x onto stack s, i.e. destructively changing s + ++ so as to have a new first (top) element x. + ++ Afterwards, pop!(s) produces x and pop!(s) produces the original s. + pop_!: % -> S + ++ pop!(s) returns the top element x, destructively removing x from s. + ++ Note: Use \axiom{top(s)} to obtain x without removing it from s. + ++ Error: if s is empty. + top: % -> S + ++ top(s) returns the top element x from s; s remains unchanged. + ++ Note: Use \axiom{pop!(s)} to obtain x and remove it from s. + depth: % -> NonNegativeInteger + ++ depth(s) returns the number of elements of stack s. + ++ Note: \axiom{depth(s) = #s}. + + +@ +<>= +"SKAGG" [color=lightblue,href="books/bookvol10.pamphlet"]; +"SKAGG" -> "BGAGG" + +@ +<>= +"StackAggregate(a:Type)" [color=lightblue,href="books/bookvol10.pamphlet"]; +"StackAggregate(a:Type)" -> "BagAggregate(a:Type)" + +"StackAggregate(a:SetCategory)" + [color=seagreen,href="books/bookvol10.pamphlet"]; +"StackAggregate(a:SetCategory)" -> "StackAggregate(a:Type)" + +@ +%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% +\pagehead{UnaryRecursiveAggregate}{URAGG} +\pagepic{ps/v10unaryrecursiveaggregate.ps}{URAGG} + +See:\\ +\pagefrom{RecursiveAggregate}{RCAGG} +<>= +)abbrev category URAGG UnaryRecursiveAggregate +++ Author: Michael Monagan; revised by Manuel Bronstein and Richard Jenks +++ Date Created: August 87 through August 88 +++ Date Last Updated: April 1991 +++ Basic Operations: +++ Related Constructors: +++ Also See: +++ AMS Classifications: +++ Keywords: +++ References: +++ Description: +++ A unary-recursive aggregate is a one where nodes may have either +++ 0 or 1 children. +++ This aggregate models, though not precisely, a linked +++ list possibly with a single cycle. +++ A node with one children models a non-empty list, with the +++ \spadfun{value} of the list designating the head, or \spadfun{first}, of the +++ list, and the child designating the tail, or \spadfun{rest}, of the list. +++ A node with no child then designates the empty list. +++ Since these aggregates are recursive aggregates, they may be cyclic. +UnaryRecursiveAggregate(S:Type): Category == RecursiveAggregate S with + concat: (%,%) -> % + ++ concat(u,v) returns an aggregate w consisting of the elements of u + ++ followed by the elements of v. + ++ Note: \axiom{v = rest(w,#a)}. + concat: (S,%) -> % + ++ concat(x,u) returns aggregate consisting of x followed by + ++ the elements of u. + ++ Note: if \axiom{v = concat(x,u)} then \axiom{x = first v} + ++ and \axiom{u = rest v}. + first: % -> S + ++ first(u) returns the first element of u + ++ (equivalently, the value at the current node). + elt: (%,"first") -> S + ++ elt(u,"first") (also written: \axiom{u . first}) + ++ is equivalent to first u. + first: (%,NonNegativeInteger) -> % + ++ first(u,n) returns a copy of the first n (\axiom{n >= 0}) + ++ elements of u. + rest: % -> % + ++ rest(u) returns an aggregate consisting of all but the first + ++ element of u + ++ (equivalently, the next node of u). + elt: (%,"rest") -> % + ++ elt(%,"rest") (also written: \axiom{u.rest}) is + ++ equivalent to \axiom{rest u}. + rest: (%,NonNegativeInteger) -> % + ++ rest(u,n) returns the \axiom{n}th (n >= 0) node of u. + ++ Note: \axiom{rest(u,0) = u}. + last: % -> S + ++ last(u) resturn the last element of u. + ++ Note: for lists, \axiom{last(u) = u . (maxIndex u) = u . (# u - 1)}. + elt: (%,"last") -> S + ++ elt(u,"last") (also written: \axiom{u . last}) is equivalent + ++ to last u. + last: (%,NonNegativeInteger) -> % + ++ last(u,n) returns a copy of the last n (\axiom{n >= 0}) nodes of u. + ++ Note: \axiom{last(u,n)} is a list of n elements. + tail: % -> % + ++ tail(u) returns the last node of u. + ++ Note: if u is \axiom{shallowlyMutable}, + ++ \axiom{setrest(tail(u),v) = concat(u,v)}. + second: % -> S + ++ second(u) returns the second element of u. + ++ Note: \axiom{second(u) = first(rest(u))}. + third: % -> S + ++ third(u) returns the third element of u. + ++ Note: \axiom{third(u) = first(rest(rest(u)))}. + cycleEntry: % -> % + ++ cycleEntry(u) returns the head of a top-level cycle contained in + ++ aggregate u, or \axiom{empty()} if none exists. + cycleLength: % -> NonNegativeInteger + ++ cycleLength(u) returns the length of a top-level cycle + ++ contained in aggregate u, or 0 is u has no such cycle. + cycleTail: % -> % + ++ cycleTail(u) returns the last node in the cycle, or + ++ empty if none exists. + if % has shallowlyMutable then + concat_!: (%,%) -> % + ++ concat!(u,v) destructively concatenates v to the end of u. + ++ Note: \axiom{concat!(u,v) = setlast_!(u,v)}. + concat_!: (%,S) -> % + ++ concat!(u,x) destructively adds element x to the end of u. + ++ Note: \axiom{concat!(a,x) = setlast!(a,[x])}. + cycleSplit_!: % -> % + ++ cycleSplit!(u) splits the aggregate by dropping off the cycle. + ++ The value returned is the cycle entry, or nil if none exists. + ++ For example, if \axiom{w = concat(u,v)} is the cyclic list where + ++ v is the head of the cycle, \axiom{cycleSplit!(w)} will drop v + ++ off w thus destructively changing w to u, and returning v. + setfirst_!: (%,S) -> S + ++ setfirst!(u,x) destructively changes the first element of a to x. + setelt: (%,"first",S) -> S + ++ setelt(u,"first",x) (also written: \axiom{u.first := x}) is + ++ equivalent to \axiom{setfirst!(u,x)}. + setrest_!: (%,%) -> % + ++ setrest!(u,v) destructively changes the rest of u to v. + setelt: (%,"rest",%) -> % + ++ setelt(u,"rest",v) (also written: \axiom{u.rest := v}) is + ++ equivalent to \axiom{setrest!(u,v)}. + setlast_!: (%,S) -> S + ++ setlast!(u,x) destructively changes the last element of u to x. + setelt: (%,"last",S) -> S + ++ setelt(u,"last",x) (also written: \axiom{u.last := b}) + ++ is equivalent to \axiom{setlast!(u,v)}. + split_!: (%,Integer) -> % + ++ split!(u,n) splits u into two aggregates: \axiom{v = rest(u,n)} + ++ and \axiom{w = first(u,n)}, returning \axiom{v}. + ++ Note: afterwards \axiom{rest(u,n)} returns \axiom{empty()}. + add + cycleMax ==> 1000 + + findCycle: % -> % + + elt(x, "first") == first x + elt(x, "last") == last x + elt(x, "rest") == rest x + second x == first rest x + third x == first rest rest x + cyclic? x == not empty? x and not empty? findCycle x + last x == first tail x + + nodes x == + l := empty()$List(%) + while not empty? x repeat + l := concat(x, l) + x := rest x + reverse_! l + + children x == + l := empty()$List(%) + empty? x => l + concat(rest x,l) + + leaf? x == empty? x + + value x == + empty? x => error "value of empty object" + first x + + less?(l, n) == + i := n::Integer + while i > 0 and not empty? l repeat (l := rest l; i := i - 1) + i > 0 + + more?(l, n) == + i := n::Integer + while i > 0 and not empty? l repeat (l := rest l; i := i - 1) + zero?(i) and not empty? l + + size?(l, n) == + i := n::Integer + while not empty? l and i > 0 repeat (l := rest l; i := i - 1) + empty? l and zero? i + + #x == + for k in 0.. while not empty? x repeat + k = cycleMax and cyclic? x => error "cyclic list" + x := rest x + k + + tail x == + empty? x => error "empty list" + y := rest x + for k in 0.. while not empty? y repeat + k = cycleMax and cyclic? x => error "cyclic list" + y := rest(x := y) + x + + findCycle x == + y := rest x + while not empty? y repeat + if eq?(x, y) then return x + x := rest x + y := rest y + if empty? y then return y + if eq?(x, y) then return y + y := rest y + y + + cycleTail x == + empty?(y := x := cycleEntry x) => x + z := rest x + while not eq?(x,z) repeat (y := z; z := rest z) + y + + cycleEntry x == + empty? x => x + empty?(y := findCycle x) => y + z := rest y + for l in 1.. while not eq?(y,z) repeat z := rest z + y := x + for k in 1..l repeat y := rest y + while not eq?(x,y) repeat (x := rest x; y := rest y) + x + + cycleLength x == + empty? x => 0 + empty?(x := findCycle x) => 0 + y := rest x + for k in 1.. while not eq?(x,y) repeat y := rest y + k + + rest(x, n) == + for i in 1..n repeat + empty? x => error "Index out of range" + x := rest x + x + + if % has finiteAggregate then + last(x, n) == + n > (m := #x) => error "index out of range" + copy rest(x, (m - n)::NonNegativeInteger) + + if S has SetCategory then + x = y == + eq?(x, y) => true + for k in 0.. while not empty? x and not empty? y repeat + k = cycleMax and cyclic? x => error "cyclic list" + first x ^= first y => return false + x := rest x + y := rest y + empty? x and empty? y + + node?(u, v) == + for k in 0.. while not empty? v repeat + u = v => return true + k = cycleMax and cyclic? v => error "cyclic list" + v := rest v + u=v + + if % has shallowlyMutable then + setelt(x, "first", a) == setfirst_!(x, a) + setelt(x, "last", a) == setlast_!(x, a) + setelt(x, "rest", a) == setrest_!(x, a) + concat(x:%, y:%) == concat_!(copy x, y) + + setlast_!(x, s) == + empty? x => error "setlast: empty list" + setfirst_!(tail x, s) + s + + setchildren_!(u,lv) == + #lv=1 => setrest_!(u, first lv) + error "wrong number of children specified" + + setvalue_!(u,s) == setfirst_!(u,s) + + split_!(p, n) == + n < 1 => error "index out of range" + p := rest(p, (n - 1)::NonNegativeInteger) + q := rest p + setrest_!(p, empty()) + q + + cycleSplit_! x == + empty?(y := cycleEntry x) or eq?(x, y) => y + z := rest x + while not eq?(z, y) repeat (x := z; z := rest z) + setrest_!(x, empty()) + y + +@ +<>= +"URAGG" [color=lightblue,href="books/bookvol10.pamphlet"]; +"URAGG" -> "RCAGG" + +@ +<>= +"UnaryRecursiveAggregate(a:Type)" + [color=lightblue,href="books/bookvol10.pamphlet"]; +"UnaryRecursiveAggregate(a:Type)" -> "RecursiveAggregate(a:Type)" + +@ +\chapter{Category Layer 6} +%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% +\pagehead{Dictionary}{DIAGG} +\pagepic{ps/v10dictionary.ps}{DIAGG} + +See:\\ +\pageto{KeyedDictionary}{KDAGG} +\pagefrom{DictionaryOperations}{DIOPS} +<>= +)abbrev category DIAGG Dictionary +++ Author: Michael Monagan; revised by Manuel Bronstein and Richard Jenks +++ Date Created: August 87 through August 88 +++ Date Last Updated: April 1991 +++ Basic Operations: +++ Related Constructors: +++ Also See: +++ AMS Classifications: +++ Keywords: +++ References: +++ Description: +++ A dictionary is an aggregate in which entries can be inserted, +++ searched for and removed. Duplicates are thrown away on insertion. +++ This category models the usual notion of dictionary which involves +++ large amounts of data where copying is impractical. +++ Principal operations are thus destructive (non-copying) ones. +Dictionary(S:SetCategory): Category == + DictionaryOperations S add + dictionary l == + d := dictionary() + for x in l repeat insert_!(x, d) + d + + if % has finiteAggregate then + -- remove(f:S->Boolean,t:%) == remove_!(f, copy t) + -- select(f, t) == select_!(f, copy t) + select_!(f, t) == remove_!(not f #1, t) + + --extract_! d == + -- empty? d => error "empty dictionary" + -- remove_!(x := first parts d, d, 1) + -- x + + s = t == + eq?(s,t) => true + #s ^= #t => false + _and/[member?(x, t) for x in parts s] + + remove_!(f:S->Boolean, t:%) == + for m in parts t repeat if f m then remove_!(m, t) + t + +@ +<>= +"DIAGG" [color=lightblue,href="books/bookvol10.pamphlet"]; +"DIAGG" -> "DIOPS" + +@ +<>= +"Dictionary(a:SetCategory)" [color=lightblue,href="books/bookvol10.pamphlet"]; +"Dictionary(a:SetCategory)" -> "DictionaryOperations(a:SetCategory)" + +"Dictionary(Record(a:SetCategory,b:SetCategory))" + [color=seagreen,href="books/bookvol10.pamphlet"]; +"Dictionary(Record(a:SetCategory,b:SetCategory))" -> + "Dictionary(a:SetCategory)" + +@ +%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% +\pagehead{DequeueAggregate}{DQAGG} +\pagepic{ps/v10dequeueaggregate.ps}{DQAGG} + +See:\\ +\pagefrom{QueueAggregate}{QUAGG} +\pagefrom{StackAggregate}{SKAGG} +<>= +)abbrev category DQAGG DequeueAggregate +++ Author: Michael Monagan; revised by Manuel Bronstein and Richard Jenks +++ Date Created: August 87 through August 88 +++ Date Last Updated: April 1991 +++ Basic Operations: +++ Related Constructors: +++ Also See: +++ AMS Classifications: +++ Keywords: +++ References: +++ Description: +++ A dequeue is a doubly ended stack, that is, a bag where first items +++ inserted are the first items extracted, at either the front or the back end +++ of the data structure. +DequeueAggregate(S:Type): + Category == Join(StackAggregate S,QueueAggregate S) with + dequeue: () -> % + ++ dequeue()$D creates an empty dequeue of type D. + dequeue: List S -> % + ++ dequeue([x,y,...,z]) creates a dequeue with first (top or front) + ++ element x, second element y,...,and last (bottom or back) element z. + height: % -> NonNegativeInteger + ++ height(d) returns the number of elements in dequeue d. + ++ Note: \axiom{height(d) = # d}. + top_!: % -> S + ++ top!(d) returns the element at the top (front) of the dequeue. + bottom_!: % -> S + ++ bottom!(d) returns the element at the bottom (back) of the dequeue. + insertTop_!: (S,%) -> S + ++ insertTop!(x,d) destructively inserts x into the dequeue d, that is, + ++ at the top (front) of the dequeue. + ++ The element previously at the top of the dequeue becomes the + ++ second in the dequeue, and so on. + insertBottom_!: (S,%) -> S + ++ insertBottom!(x,d) destructively inserts x into the dequeue d + ++ at the bottom (back) of the dequeue. + extractTop_!: % -> S + ++ extractTop!(d) destructively extracts the top (front) element + ++ from the dequeue d. + ++ Error: if d is empty. + extractBottom_!: % -> S + ++ extractBottom!(d) destructively extracts the bottom (back) element + ++ from the dequeue d. + ++ Error: if d is empty. + reverse_!: % -> % + ++ reverse!(d) destructively replaces d by its reverse dequeue, i.e. + ++ the top (front) element is now the bottom (back) element, and so on. + +@ +<>= +"DQAGG" [color=lightblue,href="books/bookvol10.pamphlet"]; +"DQAGG" -> "SKAGG" +"DQAGG" -> "QUAGG" + +@ +<>= +"DequeueAggregate(a:Type)" [color=lightblue,href="books/bookvol10.pamphlet"]; +"DequeueAggregate(a:Type)" -> "StackAggregate(a:Type)" +"DequeueAggregate(a:Type)" -> "QueueAggregate(a:Type)" + +"DequeueAggregate(a:SetCategory)" + [color=seagreen,href="books/bookvol10.pamphlet"]; +"DequeueAggregate(a:SetCategory)" -> "DequeueAggregate(a:Type)" + +@ +%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% +\pagehead{ExtensibleLinearAggregate}{ELAGG} +\pagepic{ps/v10extensiblelinearaggregate.ps}{ELAGG} + +See:\\ +\pageto{ListAggregate}{LSAGG} +\pagefrom{LinearAggregate}{LNAGG} +<>= +)abbrev category ELAGG ExtensibleLinearAggregate +++ Author: Michael Monagan; revised by Manuel Bronstein and Richard Jenks +++ Date Created: August 87 through August 88 +++ Date Last Updated: April 1991 +++ Basic Operations: +++ Related Constructors: +++ Also See: +++ AMS Classifications: +++ Keywords: +++ References: +++ Description: +++ An extensible aggregate is one which allows insertion and deletion of +++ entries. These aggregates are models of lists and streams which are +++ represented by linked structures so as to make insertion, deletion, and +++ concatenation efficient. However, access to elements of these +++ extensible aggregates is generally slow since access is made from the end. +++ See \spadtype{FlexibleArray} for an exception. +ExtensibleLinearAggregate(S:Type):Category == LinearAggregate S with + shallowlyMutable + concat_!: (%,S) -> % + ++ concat!(u,x) destructively adds element x to the end of u. + concat_!: (%,%) -> % + ++ concat!(u,v) destructively appends v to the end of u. + ++ v is unchanged + delete_!: (%,Integer) -> % + ++ delete!(u,i) destructively deletes the \axiom{i}th element of u. + ++ + ++E Data:=Record(age:Integer,gender:String) + ++E a1:AssociationList(String,Data):=table() + ++E a1."tim":=[55,"male"]$Data + ++E delete!(a1,1) + + delete_!: (%,UniversalSegment(Integer)) -> % + ++ delete!(u,i..j) destructively deletes elements u.i through u.j. + remove_!: (S->Boolean,%) -> % + ++ remove!(p,u) destructively removes all elements x of + ++ u such that \axiom{p(x)} is true. + insert_!: (S,%,Integer) -> % + ++ insert!(x,u,i) destructively inserts x into u at position i. + insert_!: (%,%,Integer) -> % + ++ insert!(v,u,i) destructively inserts aggregate v into u at position i. + merge_!: ((S,S)->Boolean,%,%) -> % + ++ merge!(p,u,v) destructively merges u and v using predicate p. + select_!: (S->Boolean,%) -> % + ++ select!(p,u) destructively changes u by keeping only values x such that + ++ \axiom{p(x)}. + if S has SetCategory then + remove_!: (S,%) -> % + ++ remove!(x,u) destructively removes all values x from u. + removeDuplicates_!: % -> % + ++ removeDuplicates!(u) destructively removes duplicates from u. + if S has OrderedSet then merge_!: (%,%) -> % + ++ merge!(u,v) destructively merges u and v in ascending order. + add + delete(x:%, i:Integer) == delete_!(copy x, i) + delete(x:%, i:UniversalSegment(Integer)) == delete_!(copy x, i) + remove(f:S -> Boolean, x:%) == remove_!(f, copy x) + insert(s:S, x:%, i:Integer) == insert_!(s, copy x, i) + insert(w:%, x:%, i:Integer) == insert_!(copy w, copy x, i) + select(f, x) == select_!(f, copy x) + concat(x:%, y:%) == concat_!(copy x, y) + concat(x:%, y:S) == concat_!(copy x, new(1, y)) + concat_!(x:%, y:S) == concat_!(x, new(1, y)) + if S has SetCategory then + remove(s:S, x:%) == remove_!(s, copy x) + remove_!(s:S, x:%) == remove_!(#1 = s, x) + removeDuplicates(x:%) == removeDuplicates_!(copy x) + + if S has OrderedSet then + merge_!(x, y) == merge_!(_<$S, x, y) + +@ +<>= +"ELAGG" [color=lightblue,href="books/bookvol10.pamphlet"]; +"ELAGG" -> "LNAGG" + +@ +<>= +"ExtensibleLinearAggregate(a:Type)" + [color=lightblue,href="books/bookvol10.pamphlet"]; +"ExtensibleLinearAggregate(a:Type)" -> "LinearAggregate(a:Type)" + +@ +%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% +\pagehead{FiniteLinearAggregate}{FLAGG} +\pagepic{ps/v10finitelinearaggregate.ps}{FLAGG} + +See:\\ +\pageto{OneDimensionalArrayAggregate}{A1AGG} +\pageto{ListAggregate}{LSAGG} +\pagefrom{LinearAggregate}{LNAGG} +<>= +)abbrev category FLAGG FiniteLinearAggregate +++ Author: Michael Monagan; revised by Manuel Bronstein and Richard Jenks +++ Date Created: August 87 through August 88 +++ Date Last Updated: April 1991 +++ Basic Operations: +++ Related Constructors: +++ Also See: +++ AMS Classifications: +++ Keywords: +++ References: +++ Description: +++ A finite linear aggregate is a linear aggregate of finite length. +++ The finite property of the aggregate adds several exports to the +++ list of exports from \spadtype{LinearAggregate} such as +++ \spadfun{reverse}, \spadfun{sort}, and so on. +FiniteLinearAggregate(S:Type): Category == LinearAggregate S with + finiteAggregate + merge: ((S,S)->Boolean,%,%) -> % + ++ merge(p,a,b) returns an aggregate c which merges \axiom{a} and b. + ++ The result is produced by examining each element x of \axiom{a} and y + ++ of b successively. If \axiom{p(x,y)} is true, then x is inserted into + ++ the result; otherwise y is inserted. If x is chosen, the next element + ++ of \axiom{a} is examined, and so on. When all the elements of one + ++ aggregate are examined, the remaining elements of the other + ++ are appended. + ++ For example, \axiom{merge(<,[1,3],[2,7,5])} returns + ++ \axiom{[1,2,3,7,5]}. + reverse: % -> % + ++ reverse(a) returns a copy of \axiom{a} with elements in reverse order. + sort: ((S,S)->Boolean,%) -> % + ++ sort(p,a) returns a copy of \axiom{a} sorted using total ordering + ++ predicate p. + sorted?: ((S,S)->Boolean,%) -> Boolean + ++ sorted?(p,a) tests if \axiom{a} is sorted according to predicate p. + position: (S->Boolean, %) -> Integer + ++ position(p,a) returns the index i of the first x in \axiom{a} + ++ such that \axiom{p(x)} is true, and \axiom{minIndex(a) - 1} + ++ if there is no such x. + if S has SetCategory then + position: (S, %) -> Integer + ++ position(x,a) returns the index i of the first occurrence of x in a, + ++ and \axiom{minIndex(a) - 1} if there is no such x. + position: (S,%,Integer) -> Integer + ++ position(x,a,n) returns the index i of the first occurrence of x in + ++ \axiom{a} where \axiom{i >= n}, and \axiom{minIndex(a) - 1} + ++ if no such x is found. + if S has OrderedSet then + OrderedSet + merge: (%,%) -> % + ++ merge(u,v) merges u and v in ascending order. + ++ Note: \axiom{merge(u,v) = merge(<=,u,v)}. + sort: % -> % + ++ sort(u) returns an u with elements in ascending order. + ++ Note: \axiom{sort(u) = sort(<=,u)}. + sorted?: % -> Boolean + ++ sorted?(u) tests if the elements of u are in ascending order. + if % has shallowlyMutable then + copyInto_!: (%,%,Integer) -> % + ++ copyInto!(u,v,i) returns aggregate u containing a copy of + ++ v inserted at element i. + reverse_!: % -> % + ++ reverse!(u) returns u with its elements in reverse order. + sort_!: ((S,S)->Boolean,%) -> % + ++ sort!(p,u) returns u with its elements ordered by p. + if S has OrderedSet then sort_!: % -> % + ++ sort!(u) returns u with its elements in ascending order. + add + if S has SetCategory then + position(x:S, t:%) == position(x, t, minIndex t) + + if S has OrderedSet then +-- sorted? l == sorted?(_<$S, l) + sorted? l == sorted?(#1 < #2 or #1 = #2, l) + merge(x, y) == merge(_<$S, x, y) + sort l == sort(_<$S, l) + + if % has shallowlyMutable then + reverse x == reverse_! copy x + sort(f, l) == sort_!(f, copy l) + reverse x == reverse_! copy x + + if S has OrderedSet then + sort_! l == sort_!(_<$S, l) -(DEFUN |AssociationListAggregate;| (|t#1| |t#2|) - (PROG (#1=#:G88401) - (RETURN - (PROG1 - (LETT #1# - (|sublisV| - (PAIR - (QUOTE (|t#1| |t#2|)) (LIST (|devaluate| |t#1|) (|devaluate| |t#2|))) - (|sublisV| - (PAIR - (QUOTE (#2=#:G88400)) - (LIST (QUOTE (|Record| (|:| |key| |t#1|) (|:| |entry| |t#2|))))) - (COND - (|AssociationListAggregate;CAT|) - ((QUOTE T) - (LETT |AssociationListAggregate;CAT| - (|Join| - (|TableAggregate| (QUOTE |t#1|) (QUOTE |t#2|)) - (|ListAggregate| (QUOTE #2#)) - (|mkCategory| - (QUOTE |domain|) - (QUOTE - (((|assoc| - ((|Union| - (|Record| (|:| |key| |t#1|) (|:| |entry| |t#2|)) "failed") - |t#1| |$|)) - T))) - NIL (QUOTE NIL) NIL)) - . #3=(|AssociationListAggregate|)))))) - . #3#) - (SETELT #1# 0 - (LIST - (QUOTE |AssociationListAggregate|) - (|devaluate| |t#1|) - (|devaluate| |t#2|))))))) @ -\section{category A1AGG OneDimensionalArrayAggregate} +<>= +"FLAGG" [color=lightblue,href="books/bookvol10.pamphlet"]; +"FLAGG" -> "LNAGG" + +@ +<>= +"FiniteLinearAggregate(a:Type)" + [color=lightblue,href="books/bookvol10.pamphlet"]; +"FiniteLinearAggregate(a:Type)" -> "LinearAggregate(a:Type)" + +@ +%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% +\pagehead{MultiDictionary}{MDAGG} +\pagepic{ps/v10multidictionary.ps}{MDAGG} + +See:\\ +\pagefrom{DictionaryOperations}{DIOPS} +<>= +)abbrev category MDAGG MultiDictionary +++ Author: Michael Monagan; revised by Manuel Bronstein and Richard Jenks +++ Date Created: August 87 through August 88 +++ Date Last Updated: April 1991 +++ Basic Operations: +++ Related Constructors: +++ Also See: +++ AMS Classifications: +++ Keywords: +++ References: +++ Description: +++ A multi-dictionary is a dictionary which may contain duplicates. +++ As for any dictionary, its size is assumed large so that +++ copying (non-destructive) operations are generally to be avoided. +MultiDictionary(S:SetCategory): Category == DictionaryOperations S with +-- count: (S,%) -> NonNegativeInteger ++ multiplicity count + insert_!: (S,%,NonNegativeInteger) -> % + ++ insert!(x,d,n) destructively inserts n copies of x into dictionary d. +-- remove_!: (S,%,NonNegativeInteger) -> % +-- ++ remove!(x,d,n) destructively removes (up to) n copies of x from +-- ++ dictionary d. + removeDuplicates_!: % -> % + ++ removeDuplicates!(d) destructively removes any duplicate values + ++ in dictionary d. + duplicates: % -> List Record(entry:S,count:NonNegativeInteger) + ++ duplicates(d) returns a list of values which have duplicates in d +-- ++ duplicates(d) returns a list of ++ duplicates iterator +-- to become duplicates: % -> Iterator(D,D) + +@ +<>= +"MDAGG" [color=lightblue,href="books/bookvol10.pamphlet"]; +"MDAGG" -> "DIOPS" + +@ +<>= +"MultiDictionary(a:SetCategory)" + [color=lightblue,href="books/bookvol10.pamphlet"]; +"MultiDictionary(a:SetCategory)" -> "DictionaryOperations(a:SetCategory)" + +@ +%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% +\pagehead{StreamAggregate}{STAGG} +%\pagepic{ps/v10streamaggregate.ps}{STAGG} +\includegraphics[scale=0.75]{ps/v10streamaggregate.ps} +\index{images!STAGG} + +See:\\ +\pagefrom{LinearAggregate}{LNAGG} +\pagefrom{RecursiveAggregate}{RCAGG} +<>= +)abbrev category STAGG StreamAggregate +++ Author: Michael Monagan; revised by Manuel Bronstein and Richard Jenks +++ Date Created: August 87 through August 88 +++ Date Last Updated: April 1991 +++ Basic Operations: +++ Related Constructors: +++ Also See: +++ AMS Classifications: +++ Keywords: +++ References: +++ Description: +++ A stream aggregate is a linear aggregate which possibly has an infinite +++ number of elements. A basic domain constructor which builds stream +++ aggregates is \spadtype{Stream}. From streams, a number of infinite +++ structures such power series can be built. A stream aggregate may +++ also be infinite since it may be cyclic. +++ For example, see \spadtype{DecimalExpansion}. +StreamAggregate(S:Type): Category == + Join(UnaryRecursiveAggregate S, LinearAggregate S) with + explicitlyFinite?: % -> Boolean + ++ explicitlyFinite?(s) tests if the stream has a finite + ++ number of elements, and false otherwise. + ++ Note: for many datatypes, + ++ \axiom{explicitlyFinite?(s) = not possiblyInfinite?(s)}. + possiblyInfinite?: % -> Boolean + ++ possiblyInfinite?(s) tests if the stream s could possibly + ++ have an infinite number of elements. + ++ Note: for many datatypes, + ++ \axiom{possiblyInfinite?(s) = not explictlyFinite?(s)}. + add + c2: (%, %) -> S + + explicitlyFinite? x == not cyclic? x + possiblyInfinite? x == cyclic? x + first(x, n) == construct [c2(x, x := rest x) for i in 1..n] + + c2(x, r) == + empty? x => error "Index out of range" + first x + + elt(x:%, i:Integer) == + i := i - minIndex x + (i < 0) or empty?(x := rest(x, i::NonNegativeInteger)) => _ + error "index out of range" + first x + + elt(x:%, i:UniversalSegment(Integer)) == + l := lo(i) - minIndex x + l < 0 => error "index out of range" + not hasHi i => copy(rest(x, l::NonNegativeInteger)) + (h := hi(i) - minIndex x) < l => empty() + first(rest(x, l::NonNegativeInteger), (h - l + 1)::NonNegativeInteger) + + if % has shallowlyMutable then + concat(x:%, y:%) == concat_!(copy x, y) + + concat l == + empty? l => empty() + concat_!(copy first l, concat rest l) + + map_!(f, l) == + y := l + while not empty? l repeat + setfirst_!(l, f first l) + l := rest l + y + + fill_!(x, s) == + y := x + while not empty? y repeat (setfirst_!(y, s); y := rest y) + x + + setelt(x:%, i:Integer, s:S) == + i := i - minIndex x + (i < 0) or empty?(x := rest(x,i::NonNegativeInteger)) => _ + error "index out of range" + setfirst_!(x, s) + + setelt(x:%, i:UniversalSegment(Integer), s:S) == + (l := lo(i) - minIndex x) < 0 => error "index out of range" + h := if hasHi i then hi(i) - minIndex x else maxIndex x + h < l => s + y := rest(x, l::NonNegativeInteger) + z := rest(y, (h - l + 1)::NonNegativeInteger) + while not eq?(y, z) repeat (setfirst_!(y, s); y := rest y) + s + + concat_!(x:%, y:%) == + empty? x => y + setrest_!(tail x, y) + x + +@ +<>= +"STAGG" [color=lightblue,href="books/bookvol10.pamphlet"]; +"STAGG" -> "RCAGG" +"STAGG" -> "LNAGG" + +@ +<>= +"StreamAggregate(a:Type)" [color=lightblue,href="books/bookvol10.pamphlet"]; +"StreamAggregate(a:Type)" -> "RecursiveAggregate(a:Type)" +"StreamAggregate(a:Type)" -> "LinearAggregate(a:Type)" + +@ +\chapter{Category Layer 7} +%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% +\pagehead{OneDimensionalArrayAggregate}{A1AGG} +\pagepic{ps/v10onedimensionalarrayaggregate.ps}{A1AGG} + +See:\\ +\pageto{StringAggregate}{SRAGG} +\pagefrom{FiniteLinearAggregate}{FLAGG} <>= )abbrev category A1AGG OneDimensionalArrayAggregate ++ Author: Michael Monagan; revised by Manuel Bronstein and Richard Jenks @@ -2423,9 +4487,15 @@ OneDimensionalArrayAggregate(S:Type): Category == "OneDimensionalArrayAggregate(a:Type)" @ -\section{category BGAGG BagAggregate} -<>= -)abbrev category BGAGG BagAggregate +%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% +\pagehead{KeyedDictionary}{KDAGG} +\pagepic{ps/v10keyeddictionary.ps}{KDAGG} + +See:\\ +\pageto{TableAggregate}{TBAGG} +\pagefrom{Dictionary}{DIAGG} +<>= +)abbrev category KDAGG KeyedDictionary ++ Author: Michael Monagan; revised by Manuel Bronstein and Richard Jenks ++ Date Created: August 87 through August 88 ++ Date Last Updated: April 1991 @@ -2436,44 +4506,56 @@ OneDimensionalArrayAggregate(S:Type): Category == ++ Keywords: ++ References: ++ Description: -++ A bag aggregate is an aggregate for which one can insert and extract -++ objects, and where the order in which objects are inserted determines -++ the order of extraction. -++ Examples of bags are stacks, queues, and dequeues. -BagAggregate(S:Type): Category == HomogeneousAggregate S with - shallowlyMutable - ++ shallowlyMutable means that elements of bags may be destructively changed. - bag: List S -> % - ++ bag([x,y,...,z]) creates a bag with elements x,y,...,z. - extract_!: % -> S - ++ extract!(u) destructively removes a (random) item from bag u. - insert_!: (S,%) -> % - ++ insert!(x,u) inserts item x into bag u. - inspect: % -> S - ++ inspect(u) returns an (random) element from a bag. +++ A keyed dictionary is a dictionary of key-entry pairs for which there is +++ a unique entry for each key. +KeyedDictionary(Key:SetCategory, Entry:SetCategory): Category == + Dictionary Record(key:Key,entry:Entry) with + key?: (Key, %) -> Boolean + ++ key?(k,t) tests if k is a key in table t. + keys: % -> List Key + ++ keys(t) returns the list the keys in table t. + -- to become keys: % -> Key* and keys: % -> Iterator(Entry,Entry) + remove_!: (Key, %) -> Union(Entry,"failed") + ++ remove!(k,t) searches the table t for the key k removing + ++ (and return) the entry if there. + ++ If t has no such key, \axiom{remove!(k,t)} returns "failed". + search: (Key, %) -> Union(Entry,"failed") + ++ search(k,t) searches the table t for the key k, + ++ returning the entry stored in t for key k. + ++ If t has no such key, \axiom{search(k,t)} returns "failed". add - bag(l) == - x:=empty() - for s in l repeat x:=insert_!(s,x) - x + key?(k, t) == search(k, t) case Entry -@ -<>= -"BGAGG" [color=lightblue,href="books/bookvol10.pamphlet"]; -"BGAGG" -> "HOAGG" + member?(p, t) == + r := search(p.key, t) + r case Entry and r::Entry = p.entry + + if % has finiteAggregate then + keys t == [x.key for x in parts t] @ -<>= -"BagAggregate(a:Type)" [color=lightblue,href="books/bookvol10.pamphlet"]; -"BagAggregate(a:Type)" -> "HomogeneousAggregate(a:Type)" +<>= +"KDAGG" [color=lightblue,href="books/bookvol10.pamphlet"]; +"KDAGG" -> "DIAGG" -"BagAggregate(a:SetCategory)" [color=seagreen,href="books/bookvol10.pamphlet"]; -"BagAggregate(a:SetCategory)" -> "BagAggregate(a:Type)" +@ +<>= +"KeyedDictionary(a:SetCategory,b:SetCategory)" + [color=lightblue,href="books/bookvol10.pamphlet"]; +"KeyedDictionary(a:SetCategory,b:SetCategory)" -> + "Dictionary(Record(a:SetCategory,b:SetCategory))" @ -\section{category BRAGG BinaryRecursiveAggregate} -<>= -)abbrev category BRAGG BinaryRecursiveAggregate +%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% +\pagehead{ListAggregate}{LSAGG} +\pagepic{ps/v10listaggregate.ps}{LSAGG} + +See:\\ +\pageto{AssociationListAggregate}{ALAGG} +\pagefrom{ExtensibleLinearAggregate}{ELAGG} +\pagefrom{FiniteLinearAggregate}{FLAGG} +<>= +)abbrev category LSAGG ListAggregate ++ Author: Michael Monagan; revised by Manuel Bronstein and Richard Jenks ++ Date Created: August 87 through August 88 ++ Date Last Updated: April 1991 @@ -2484,117 +4566,670 @@ BagAggregate(S:Type): Category == HomogeneousAggregate S with ++ Keywords: ++ References: ++ Description: -++ A binary-recursive aggregate has 0, 1 or 2 children and -++ serves as a model for a binary tree or a doubly-linked aggregate structure -BinaryRecursiveAggregate(S:Type):Category == RecursiveAggregate S with - -- needs preorder, inorder and postorder iterators - left: % -> % - ++ left(u) returns the left child. - elt: (%,"left") -> % - ++ elt(u,"left") (also written: \axiom{a . left}) is - ++ equivalent to \axiom{left(a)}. - right: % -> % - ++ right(a) returns the right child. - elt: (%,"right") -> % - ++ elt(a,"right") (also written: \axiom{a . right}) - ++ is equivalent to \axiom{right(a)}. - if % has shallowlyMutable then - setelt: (%,"left",%) -> % - ++ setelt(a,"left",b) (also written \axiom{a . left := b}) is equivalent - ++ to \axiom{setleft!(a,b)}. - setleft_!: (%,%) -> % - ++ setleft!(a,b) sets the left child of \axiom{a} to be b. - setelt: (%,"right",%) -> % - ++ setelt(a,"right",b) (also written \axiom{b . right := b}) - ++ is equivalent to \axiom{setright!(a,b)}. - setright_!: (%,%) -> % - ++ setright!(a,x) sets the right child of t to be x. +++ A list aggregate is a model for a linked list data structure. +++ A linked list is a versatile +++ data structure. Insertion and deletion are efficient and +++ searching is a linear operation. +ListAggregate(S:Type): Category == Join(StreamAggregate S, + FiniteLinearAggregate S, ExtensibleLinearAggregate S) with + list: S -> % + ++ list(x) returns the list of one element x. add cycleMax ==> 1000 - elt(x,"left") == left x - elt(x,"right") == right x - leaf? x == empty? x or empty? left x and empty? right x - leaves t == - empty? t => empty()$List(S) - leaf? t => [value t] - concat(leaves left t,leaves right t) - nodes x == - l := empty()$List(%) - empty? x => l - concat(nodes left x,concat([x],nodes right x)) - children x == - l := empty()$List(%) - empty? x => l - empty? left x => [right x] - empty? right x => [left x] - [left x, right x] - if % has SetAggregate(S) and S has SetCategory then - node?(u,v) == - empty? v => false - u = v => true - for y in children v repeat node?(u,y) => return true - false - x = y == - empty?(x) => empty?(y) - empty?(y) => false - value x = value y and left x = left y and right x = right y - if % has finiteAggregate then - member?(x,u) == - empty? u => false - x = value u => true - member?(x,left u) or member?(x,right u) + mergeSort: ((S, S) -> Boolean, %, Integer) -> % + + sort_!(f, l) == mergeSort(f, l, #l) + list x == concat(x, empty()) + reduce(f, x) == + empty? x => error "reducing over an empty list needs the 3 argument form" + reduce(f, rest x, first x) + merge(f, p, q) == merge_!(f, copy p, copy q) + + select_!(f, x) == + while not empty? x and not f first x repeat x := rest x + empty? x => x + y := x + z := rest y + while not empty? z repeat + if f first z then (y := z; z := rest z) + else (z := rest z; setrest_!(y, z)) + x + + merge_!(f, p, q) == + empty? p => q + empty? q => p + eq?(p, q) => error "cannot merge a list into itself" + if f(first p, first q) + then (r := t := p; p := rest p) + else (r := t := q; q := rest q) + while not empty? p and not empty? q repeat + if f(first p, first q) + then (setrest_!(t, p); t := p; p := rest p) + else (setrest_!(t, q); t := q; q := rest q) + setrest_!(t, if empty? p then q else p) + r + + insert_!(s:S, x:%, i:Integer) == + i < (m := minIndex x) => error "index out of range" + i = m => concat(s, x) + y := rest(x, (i - 1 - m)::NonNegativeInteger) + z := rest y + setrest_!(y, concat(s, z)) + x + + insert_!(w:%, x:%, i:Integer) == + i < (m := minIndex x) => error "index out of range" + i = m => concat_!(w, x) + y := rest(x, (i - 1 - m)::NonNegativeInteger) + z := rest y + setrest_!(y, w) + concat_!(y, z) + x + + remove_!(f:S -> Boolean, x:%) == + while not empty? x and f first x repeat x := rest x + empty? x => x + p := x + q := rest x + while not empty? q repeat + if f first q then q := setrest_!(p, rest q) + else (p := q; q := rest q) + x + + delete_!(x:%, i:Integer) == + i < (m := minIndex x) => error "index out of range" + i = m => rest x + y := rest(x, (i - 1 - m)::NonNegativeInteger) + setrest_!(y, rest(y, 2)) + x + + delete_!(x:%, i:UniversalSegment(Integer)) == + (l := lo i) < (m := minIndex x) => error "index out of range" + h := if hasHi i then hi i else maxIndex x + h < l => x + l = m => rest(x, (h + 1 - m)::NonNegativeInteger) + t := rest(x, (l - 1 - m)::NonNegativeInteger) + setrest_!(t, rest(t, (h - l + 2)::NonNegativeInteger)) + x + + find(f, x) == + while not empty? x and not f first x repeat x := rest x + empty? x => "failed" + first x + + position(f:S -> Boolean, x:%) == + for k in minIndex(x).. while not empty? x and not f first x repeat + x := rest x + empty? x => minIndex(x) - 1 + k + + mergeSort(f, p, n) == + if n = 2 and f(first rest p, first p) then p := reverse_! p + n < 3 => p + l := (n quo 2)::NonNegativeInteger + q := split_!(p, l) + p := mergeSort(f, p, l) + q := mergeSort(f, q, n - l) + merge_!(f, p, q) + + sorted?(f, l) == + empty? l => true + p := rest l + while not empty? p repeat + not f(first l, first p) => return false + p := rest(l := p) + true + + reduce(f, x, i) == + r := i + while not empty? x repeat (r := f(r, first x); x := rest x) + r if S has SetCategory then - coerce(t:%): OutputForm == - empty? t => "[]"::OutputForm - v := value(t):: OutputForm - empty? left t => - empty? right t => v - r := coerce(right t)@OutputForm - bracket ["."::OutputForm, v, r] - l := coerce(left t)@OutputForm - r := - empty? right t => "."::OutputForm - coerce(right t)@OutputForm - bracket [l, v, r] + reduce(f, x, i,a) == + r := i + while not empty? x and r ^= a repeat + r := f(r, first x) + x := rest x + r + + new(n, s) == + l := empty() + for k in 1..n repeat l := concat(s, l) + l + + map(f, x, y) == + z := empty() + while not empty? x and not empty? y repeat + z := concat(f(first x, first y), z) + x := rest x + y := rest y + reverse_! z + +-- map(f, x, y, d) == +-- z := empty() +-- while not empty? x and not empty? y repeat +-- z := concat(f(first x, first y), z) +-- x := rest x +-- y := rest y +-- z := reverseInPlace z +-- if not empty? x then +-- z := concat_!(z, map(f(#1, d), x)) +-- if not empty? y then +-- z := concat_!(z, map(f(d, #1), y)) +-- z + + reverse_! x == + empty? x => x + empty?(y := rest x) => x + setrest_!(x, empty()) + while not empty? y repeat + z := rest y + setrest_!(y, x) + x := y + y := z + x + + copy x == + y := empty() + for k in 0.. while not empty? x repeat + k = cycleMax and cyclic? x => error "cyclic list" + y := concat(first x, y) + x := rest x + reverse_! y + + copyInto_!(y, x, s) == + s < (m := minIndex y) => error "index out of range" + z := rest(y, (s - m)::NonNegativeInteger) + while not empty? z and not empty? x repeat + setfirst_!(z, first x) + x := rest x + z := rest z + y + + if S has SetCategory then + position(w, x, s) == + s < (m := minIndex x) => error "index out of range" + x := rest(x, (s - m)::NonNegativeInteger) + for k in s.. while not empty? x and w ^= first x repeat + x := rest x + empty? x => minIndex x - 1 + k + + removeDuplicates_! l == + p := l + while not empty? p repeat + p := setrest_!(p, remove_!(#1 = first p, rest p)) + l + + if S has OrderedSet then + x < y == + while not empty? x and not empty? y repeat + first x ^= first y => return(first x < first y) + x := rest x + y := rest y + empty? x => not empty? y + false + +@ +<>= +"LSAGG" [color=lightblue,href="books/bookvol10.pamphlet"]; +"LSAGG" -> "FLAGG" +"LSAGG" -> "ELAGG" + +@ +<>= +"ListAggregate(a:Type)" [color=lightblue,href="books/bookvol10.pamphlet"]; +"ListAggregate(a:Type)" -> "FiniteLinearAggregate(a:Type)" +"ListAggregate(a:Type)" -> "ExtensibleLinearAggregate(a:Type)" + +"ListAggregate(Record(a:SetCategory,b:SetCategory))" + [color=seagreen,href="books/bookvol10.pamphlet"]; +"ListAggregate(Record(a:SetCategory,b:SetCategory))" -> + "ListAggregate(a:Type)" + +@ +\chapter{Category Layer 8} +%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% +\pagehead{AssociationListAggregate}{ALAGG} +%\pagepic{ps/v10associationlistaggregate.ps}{ALAGG} +\includegraphics[scale=0.50]{ps/v10associationlistaggregate.ps} +\index{images!ALAGG} + +See:\\ +\pagefrom{ListAggregate}{LSAGG} +\pagefrom{TableAggregate}{TBAGG} +<>= +)abbrev category ALAGG AssociationListAggregate +++ Author: Michael Monagan; revised by Manuel Bronstein and Richard Jenks +++ Date Created: August 87 through August 88 +++ Date Last Updated: April 1991 +++ Basic Operations: +++ Related Constructors: +++ Also See: +++ AMS Classifications: +++ Keywords: +++ References: +++ Description: +++ An association list is a list of key entry pairs which may be viewed +++ as a table. It is a poor mans version of a table: +++ searching for a key is a linear operation. +AssociationListAggregate(Key:SetCategory,Entry:SetCategory): Category == + Join(TableAggregate(Key, Entry), ListAggregate Record(key:Key,entry:Entry)) with + assoc: (Key, %) -> Union(Record(key:Key,entry:Entry), "failed") + ++ assoc(k,u) returns the element x in association list u stored + ++ with key k, or "failed" if u has no key k. + +@ +<>= +"ALAGG" [color=lightblue,href="books/bookvol10.pamphlet"]; +"ALAGG" -> "TBAGG" +"ALAGG" -> "LSAGG" + +@ +<>= +"AssociationListAggregate(a:SetCategory,b:SetCategory)" + [color=lightblue,href="books/bookvol10.pamphlet"]; +"AssociationListAggregate(a:SetCategory,b:SetCategory)" -> + "TableAggregate(a:SetCategory,b:SetCategory)" +"AssociationListAggregate(a:SetCategory,b:SetCategory)" -> + "ListAggregate(Record(a:SetCategory,b:SetCategory))" + +@ +%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% +\pagehead{StringAggregate}{SRAGG} +\pagepic{ps/v10stringaggregate.ps}{SRAGG} + +See:\\ +\pagefrom{OneDimensionalArrayAggregate}{A1AGG} +<>= +)abbrev category SRAGG StringAggregate +++ Author: Stephen Watt and Michael Monagan. +++ revised by Manuel Bronstein and Richard Jenks +++ Date Created: August 87 through August 88 +++ Date Last Updated: April 1991 +++ Basic Operations: +++ Related Constructors: +++ Also See: +++ AMS Classifications: +++ Keywords: +++ References: +++ Description: +++ A string aggregate is a category for strings, that is, +++ one dimensional arrays of characters. +StringAggregate: Category == OneDimensionalArrayAggregate Character with + lowerCase : % -> % + ++ lowerCase(s) returns the string with all characters in lower case. + lowerCase_!: % -> % + ++ lowerCase!(s) destructively replaces the alphabetic characters + ++ in s by lower case. + upperCase : % -> % + ++ upperCase(s) returns the string with all characters in upper case. + upperCase_!: % -> % + ++ upperCase!(s) destructively replaces the alphabetic characters + ++ in s by upper case characters. + prefix? : (%, %) -> Boolean + ++ prefix?(s,t) tests if the string s is the initial substring of t. + ++ Note: \axiom{prefix?(s,t) == + ++ reduce(and,[s.i = t.i for i in 0..maxIndex s])}. + suffix? : (%, %) -> Boolean + ++ suffix?(s,t) tests if the string s is the final substring of t. + ++ Note: \axiom{suffix?(s,t) == + ++ reduce(and,[s.i = t.(n - m + i) for i in 0..maxIndex s])} + ++ where m and n denote the maxIndex of s and t respectively. + substring?: (%, %, Integer) -> Boolean + ++ substring?(s,t,i) tests if s is a substring of t beginning at + ++ index i. + ++ Note: \axiom{substring?(s,t,0) = prefix?(s,t)}. + match: (%, %, Character) -> NonNegativeInteger + ++ match(p,s,wc) tests if pattern \axiom{p} matches subject \axiom{s} + ++ where \axiom{wc} is a wild card character. If no match occurs, + ++ the index \axiom{0} is returned; otheriwse, the value returned + ++ is the first index of the first character in the subject matching + ++ the subject (excluding that matched by an initial wild-card). + ++ For example, \axiom{match("*to*","yorktown","*")} returns \axiom{5} + ++ indicating a successful match starting at index \axiom{5} of + ++ \axiom{"yorktown"}. + match?: (%, %, Character) -> Boolean + ++ match?(s,t,c) tests if s matches t except perhaps for + ++ multiple and consecutive occurrences of character c. + ++ Typically c is the blank character. + replace : (%, UniversalSegment(Integer), %) -> % + ++ replace(s,i..j,t) replaces the substring \axiom{s(i..j)} + ++ of s by string t. + position : (%, %, Integer) -> Integer + ++ position(s,t,i) returns the position j of the substring s in string t, + ++ where \axiom{j >= i} is required. + position : (CharacterClass, %, Integer) -> Integer + ++ position(cc,t,i) returns the position \axiom{j >= i} in t of + ++ the first character belonging to cc. + coerce : Character -> % + ++ coerce(c) returns c as a string s with the character c. + + split: (%, Character) -> List % + ++ split(s,c) returns a list of substrings delimited by character c. + split: (%, CharacterClass) -> List % + ++ split(s,cc) returns a list of substrings delimited by + ++ characters in cc. + + trim: (%, Character) -> % + ++ trim(s,c) returns s with all characters c deleted from right + ++ and left ends. + ++ For example, \axiom{trim(" abc ", char " ")} returns \axiom{"abc"}. + trim: (%, CharacterClass) -> % + ++ trim(s,cc) returns s with all characters in cc deleted from right + ++ and left ends. + ++ For example, \axiom{trim("(abc)", charClass "()")} + ++ returns \axiom{"abc"}. + leftTrim: (%, Character) -> % + ++ leftTrim(s,c) returns s with all leading characters c deleted. + ++ For example, \axiom{leftTrim(" abc ", char " ")} + ++ returns \axiom{"abc "}. + leftTrim: (%, CharacterClass) -> % + ++ leftTrim(s,cc) returns s with all leading characters in cc deleted. + ++ For example, \axiom{leftTrim("(abc)", charClass "()")} + ++ returns \axiom{"abc)"}. + rightTrim: (%, Character) -> % + ++ rightTrim(s,c) returns s with all trailing occurrences of c deleted. + ++ For example, \axiom{rightTrim(" abc ", char " ")} + ++ returns \axiom{" abc"}. + rightTrim: (%, CharacterClass) -> % + ++ rightTrim(s,cc) returns s with all trailing occurences of + ++ characters in cc deleted. + ++ For example, \axiom{rightTrim("(abc)", charClass "()")} + ++ returns \axiom{"(abc"}. + elt: (%, %) -> % + ++ elt(s,t) returns the concatenation of s and t. It is provided to + ++ allow juxtaposition of strings to work as concatenation. + ++ For example, \axiom{"smoo" "shed"} returns \axiom{"smooshed"}. + add + trim(s: %, c: Character) == leftTrim(rightTrim(s, c), c) + trim(s: %, cc: CharacterClass) == leftTrim(rightTrim(s, cc), cc) + + lowerCase s == lowerCase_! copy s + upperCase s == upperCase_! copy s + prefix?(s, t) == substring?(s, t, minIndex t) + coerce(c:Character):% == new(1, c) + elt(s:%, t:%): % == concat(s,t)$% + +@ +<>= +"SRAGG" [color=lightblue,href="books/bookvol10.pamphlet"]; +"SRAGG" -> "A1AGG" + +@ +<>= +"StringAggregate()" [color=lightblue,href="books/bookvol10.pamphlet"]; +"StringAggregate()" -> "OneDimensionalArrayAggregate(Character)" + +@ +%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% +\pagehead{TableAggregate}{TBAGG} +%\pagepic{ps/v10tableaggregate.ps}{TBAGG} +\includegraphics[scale=0.60]{ps/v10tableaggregate.ps} +\index{images!TBAGG} + +See:\\ +\pageto{AssociationListAggregate}{ALAGG} +\pagefrom{IndexedAggregate}{IXAGG} +\pagefrom{KeyedDictionary}{KDAGG} +<>= +)abbrev category TBAGG TableAggregate +++ Author: Michael Monagan, Stephen Watt; +++ revised by Manuel Bronstein and Richard Jenks +++ Date Created: August 87 through August 88 +++ Date Last Updated: April 1991 +++ Basic Operations: +++ Related Constructors: +++ Also See: +++ AMS Classifications: +++ Keywords: +++ References: +++ Description: +++ A table aggregate is a model of a table, i.e. a discrete many-to-one +++ mapping from keys to entries. +TableAggregate(Key:SetCategory, Entry:SetCategory): Category == + Join(KeyedDictionary(Key,Entry),IndexedAggregate(Key,Entry)) with + setelt: (%,Key,Entry) -> Entry -- setelt_! later + ++ setelt(t,k,e) (also written \axiom{t.k := e}) is equivalent + ++ to \axiom{(insert([k,e],t); e)}. + table: () -> % + ++ table()$T creates an empty table of type T. + ++ + ++E Data:=Record(age:Integer,gender:String) + ++E a1:AssociationList(String,Data):=table() + ++E a1."tim":=[55,"male"]$Data + + table: List Record(key:Key,entry:Entry) -> % + ++ table([x,y,...,z]) creates a table consisting of entries + ++ \axiom{x,y,...,z}. + -- to become table: Record(key:Key,entry:Entry)* -> % + map: ((Entry, Entry) -> Entry, %, %) -> % + ++ map(fn,t1,t2) creates a new table t from given tables t1 and t2 with + ++ elements fn(x,y) where x and y are corresponding elements from t1 + ++ and t2 respectively. + add + table() == empty() + table l == dictionary l +-- empty() == dictionary() + + insert_!(p, t) == (t(p.key) := p.entry; t) + indices t == keys t + + coerce(t:%):OutputForm == + prefix("table"::OutputForm, + [k::OutputForm = (t.k)::OutputForm for k in keys t]) + + elt(t, k) == + (r := search(k, t)) case Entry => r::Entry + error "key not in table" + + elt(t, k, e) == + (r := search(k, t)) case Entry => r::Entry + e + + map_!(f, t) == + for k in keys t repeat t.k := f t.k + t + + map(f:(Entry, Entry) -> Entry, s:%, t:%) == + z := table() + for k in keys s | key?(k, t) repeat z.k := f(s.k, t.k) + z + +-- map(f, s, t, x) == +-- z := table() +-- for k in keys s repeat z.k := f(s.k, t(k, x)) +-- for k in keys t | not key?(k, s) repeat z.k := f(t.k, x) +-- z if % has finiteAggregate then - aggCount: (%,NonNegativeInteger) -> NonNegativeInteger - #x == aggCount(x,0) - aggCount(x,k) == - empty? x => 0 - k := k + 1 - k = cycleMax and cyclic? x => error "cyclic tree" - for y in children x repeat k := aggCount(y,k) + parts(t:%):List Record(key:Key,entry:Entry) == [[k, t.k] for k in keys t] + parts(t:%):List Entry == [t.k for k in keys t] + entries(t:%):List Entry == parts(t) + + s:% = t:% == + eq?(s,t) => true + #s ^= #t => false + for k in keys s repeat + (e := search(k, t)) case "failed" or (e::Entry) ^= s.k => return false + true + + map(f: Record(key:Key,entry:Entry)->Record(key:Key,entry:Entry),t:%):%== + z := table() + for k in keys t repeat + ke: Record(key:Key,entry:Entry) := f [k, t.k] + z ke.key := ke.entry + z + map_!(f: Record(key:Key,entry:Entry)->Record(key:Key,entry:Entry),t:%):%_ + == + lke: List Record(key:Key,entry:Entry) := nil() + for k in keys t repeat + lke := cons(f [k, remove_!(k,t)::Entry], lke) + for ke in lke repeat + t ke.key := ke.entry + t + + inspect(t: %): Record(key:Key,entry:Entry) == + ks := keys t + empty? ks => error "Cannot extract from an empty aggregate" + [first ks, t first ks] + + find(f: Record(key:Key,entry:Entry)->Boolean, t:%):_ + Union(Record(key:Key,entry:Entry), "failed") == + for ke in parts(t)@List(Record(key:Key,entry:Entry)) _ + repeat if f ke then return ke + "failed" + + index?(k: Key, t: %): Boolean == + search(k,t) case Entry + + remove_!(x:Record(key:Key,entry:Entry), t:%) == + if member?(x, t) then remove_!(x.key, t) + t + extract_!(t: %): Record(key:Key,entry:Entry) == + k: Record(key:Key,entry:Entry) := inspect t + remove_!(k.key, t) k - isCycle?: (%, List %) -> Boolean - eqMember?: (%, List %) -> Boolean - cyclic? x == not empty? x and isCycle?(x,empty()$(List %)) - isCycle?(x,acc) == - empty? x => false - eqMember?(x,acc) => true - for y in children x | not empty? y repeat - isCycle?(y,acc) => return true - false - eqMember?(y,l) == - for x in l repeat eq?(x,y) => return true - false - if % has shallowlyMutable then - setelt(x,"left",b) == setleft_!(x,b) - setelt(x,"right",b) == setright_!(x,b) + any?(f: Entry->Boolean, t: %): Boolean == + for k in keys t | f t k repeat return true + false + every?(f: Entry->Boolean, t: %): Boolean == + for k in keys t | not f t k repeat return false + true + count(f: Entry->Boolean, t: %): NonNegativeInteger == + tally: NonNegativeInteger := 0 + for k in keys t | f t k repeat tally := tally + 1 + tally @ -<>= -"BRAGG" [color=lightblue,href="books/bookvol10.pamphlet"]; -"BRAGG" -> "RCAGG" +<>= +"TBAGG" [color=lightblue,href="books/bookvol10.pamphlet"]; +"TBAGG" -> "KDAGG" +"TBAGG" -> "IXAGG" @ -<>= -"BinaryRecursiveAggregate(a:Type)" +<>= +"TableAggregate(a:SetCategory,b:SetCategory)" [color=lightblue,href="books/bookvol10.pamphlet"]; -"BinaryRecursiveAggregate(a:Type)" -> "RecursiveAggregate(a:Type)" +"TableAggregate(a:SetCategory,b:SetCategory)" -> + "KeyedDictionary(a:SetCategory,b:SetCategory)" +"TableAggregate(a:SetCategory,b:SetCategory)" -> + "IndexedAggregate(a:SetCategory,b:SetCategory)" + +@ +\chapter{Category Layers} +%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% +\pagehead{FiniteSetAggregate}{FSAGG} +%%%%%%%%\pagepic{ps/v10finitesetaggregate.ps}{FSAGG} + +See:\\ +<>= +)abbrev category FSAGG FiniteSetAggregate +++ Author: Michael Monagan; revised by Manuel Bronstein and Richard Jenks +++ Date Created: August 87 through August 88 +++ Date Last Updated: 14 Oct, 1993 by RSS +++ Basic Operations: +++ Related Constructors: +++ Also See: +++ AMS Classifications: +++ Keywords: +++ References: +++ Description: +++ A finite-set aggregate models the notion of a finite set, that is, +++ a collection of elements characterized by membership, but not +++ by order or multiplicity. +++ See \spadtype{Set} for an example. +FiniteSetAggregate(S:SetCategory): Category == + Join(Dictionary S, SetAggregate S) with + finiteAggregate + cardinality: % -> NonNegativeInteger + ++ cardinality(u) returns the number of elements of u. + ++ Note: \axiom{cardinality(u) = #u}. + if S has Finite then + Finite + complement: % -> % + ++ complement(u) returns the complement of the set u, + ++ i.e. the set of all values not in u. + universe: () -> % + ++ universe()$D returns the universal set for finite set aggregate D. + if S has OrderedSet then + max: % -> S + ++ max(u) returns the largest element of aggregate u. + min: % -> S + ++ min(u) returns the smallest element of aggregate u. + + add + s < t == #s < #t and s = intersect(s,t) + s = t == #s = #t and empty? difference(s,t) + brace l == construct l + set l == construct l + cardinality s == #s + construct l == (s := set(); for x in l repeat insert_!(x,s); s) + count(x:S, s:%) == (member?(x, s) => 1; 0) + subset?(s, t) == #s < #t and _and/[member?(x, t) for x in parts s] + + coerce(s:%):OutputForm == + brace [x::OutputForm for x in parts s]$List(OutputForm) + + intersect(s, t) == + i := {} + for x in parts s | member?(x, t) repeat insert_!(x, i) + i + + difference(s:%, t:%) == + m := copy s + for x in parts t repeat remove_!(x, m) + m + + symmetricDifference(s, t) == + d := copy s + for x in parts t repeat + if member?(x, s) then remove_!(x, d) else insert_!(x, d) + d + + union(s:%, t:%) == + u := copy s + for x in parts t repeat insert_!(x, u) + u + + if S has Finite then + universe() == {index(i::PositiveInteger) for i in 1..size()$S} + complement s == difference(universe(), s ) + size() == 2 ** size()$S + index i == + {index(j::PositiveInteger)$S for j in 1..size()$S | bit?(i-1,j-1)} + random() == index((random()$Integer rem (size()$% + 1))::PositiveInteger) + + lookup s == + n:PositiveInteger := 1 + for x in parts s repeat _ + n := n + 2 ** ((lookup(x) - 1)::NonNegativeInteger) + n + + if S has OrderedSet then + max s == + empty?(l := parts s) => error "Empty set" + reduce("max", l) + + min s == + empty?(l := parts s) => error "Empty set" + reduce("min", l) + +@ +<>= +"FSAGG" [color=lightblue,href="books/bookvol10.pamphlet"]; +"FSAGG" -> "DIAGG" +"FSAGG" -> "SETAGG" + +@ +<>= +"FiniteSetAggregate(a:SetCategory)" + [color=lightblue,href="books/bookvol10.pamphlet"]; +"FiniteSetAggregate(a:SetCategory)" -> "Dictionary(a:SetCategory)" +"FiniteSetAggregate(a:SetCategory)" -> "SetAggregate(a:SetCategory)" @ \section{category BTAGG BitAggregate} @@ -2660,9 +5295,9 @@ BitAggregate(): Category == "BitAggregate()" -> "OneDimensionalArrayAggregate(Boolean)" @ -\section{category CLAGG Collection} -<>= -)abbrev category CLAGG Collection +\section{category MSETAGG MultisetAggregate} +<>= +)abbrev category MSETAGG MultisetAggregate ++ Author: Michael Monagan; revised by Manuel Bronstein and Richard Jenks ++ Date Created: August 87 through August 88 ++ Date Last Updated: April 1991 @@ -2673,94 +5308,226 @@ BitAggregate(): Category == ++ Keywords: ++ References: ++ Description: -++ A collection is a homogeneous aggregate which can built from -++ list of members. The operation used to build the aggregate is -++ generically named \spadfun{construct}. However, each collection -++ provides its own special function with the same name as the -++ data type, except with an initial lower case letter, e.g. -++ \spadfun{list} for \spadtype{List}, -++ \spadfun{flexibleArray} for \spadtype{FlexibleArray}, and so on. -Collection(S:Type): Category == HomogeneousAggregate(S) with - construct: List S -> % - ++ \axiom{construct(x,y,...,z)} returns the collection of elements \axiom{x,y,...,z} - ++ ordered as given. Equivalently written as \axiom{[x,y,...,z]$D}, where - ++ D is the domain. D may be omitted for those of type List. - find: (S->Boolean, %) -> Union(S, "failed") - ++ find(p,u) returns the first x in u such that \axiom{p(x)} is true, and - ++ "failed" otherwise. - if % has finiteAggregate then - reduce: ((S,S)->S,%) -> S - ++ reduce(f,u) reduces the binary operation f across u. For example, - ++ if u is \axiom{[x,y,...,z]} then \axiom{reduce(f,u)} - ++ returns \axiom{f(..f(f(x,y),...),z)}. - ++ Note: if u has one element x, \axiom{reduce(f,u)} returns x. - ++ Error: if u is empty. - ++ - ++C )clear all - ++X reduce(+,[C[i]*x**i for i in 1..5]) +++ A multi-set aggregate is a set which keeps track of the multiplicity +++ of its elements. +MultisetAggregate(S:SetCategory): + Category == Join(MultiDictionary S, SetAggregate S) - reduce: ((S,S)->S,%,S) -> S - ++ reduce(f,u,x) reduces the binary operation f across u, where x is - ++ the identity operation of f. - ++ Same as \axiom{reduce(f,u)} if u has 2 or more elements. - ++ Returns \axiom{f(x,y)} if u has one element y, - ++ x if u is empty. - ++ For example, \axiom{reduce(+,u,0)} returns the - ++ sum of the elements of u. - remove: (S->Boolean,%) -> % - ++ remove(p,u) returns a copy of u removing all elements x such that - ++ \axiom{p(x)} is true. - ++ Note: \axiom{remove(p,u) == [x for x in u | not p(x)]}. - select: (S->Boolean,%) -> % - ++ select(p,u) returns a copy of u containing only those elements such - ++ \axiom{p(x)} is true. - ++ Note: \axiom{select(p,u) == [x for x in u | p(x)]}. - if S has SetCategory then - reduce: ((S,S)->S,%,S,S) -> S - ++ reduce(f,u,x,z) reduces the binary operation f across u, stopping - ++ when an "absorbing element" z is encountered. - ++ As for \axiom{reduce(f,u,x)}, x is the identity operation of f. - ++ Same as \axiom{reduce(f,u,x)} when u contains no element z. - ++ Thus the third argument x is returned when u is empty. - remove: (S,%) -> % - ++ remove(x,u) returns a copy of u with all - ++ elements \axiom{y = x} removed. - ++ Note: \axiom{remove(y,c) == [x for x in c | x ^= y]}. - removeDuplicates: % -> % - ++ removeDuplicates(u) returns a copy of u with all duplicates - ++ removed. - if S has ConvertibleTo InputForm then ConvertibleTo InputForm +@ +<>= +"MSETAGG" [color=lightblue,href="books/bookvol10.pamphlet"]; +"MSETAGG" -> "MDAGG" +"MSETAGG" -> "SETAGG" + +@ +<>= +"MultisetAggregate(a:SetCategory)" + [color=lightblue,href="books/bookvol10.pamphlet"]; +"MultisetAggregate(a:SetCategory)" -> "MultiDictionary(a:SetCategory)" +"MultisetAggregate(a:SetCategory)" -> "SetAggregate(a:SetCategory)" + +@ +\section{category OMSAGG OrderedMultisetAggregate} +<>= +)abbrev category OMSAGG OrderedMultisetAggregate +++ Author: Michael Monagan; revised by Manuel Bronstein and Richard Jenks +++ Date Created: August 87 through August 88 +++ Date Last Updated: April 1991 +++ Basic Operations: +++ Related Constructors: +++ Also See: +++ AMS Classifications: +++ Keywords: +++ References: +++ Description: +++ An ordered-multiset aggregate is a multiset built over an ordered set S +++ so that the relative sizes of its entries can be assessed. +++ These aggregates serve as models for priority queues. +OrderedMultisetAggregate(S:OrderedSet): Category == + Join(MultisetAggregate S,PriorityQueueAggregate S) with + -- max: % -> S ++ smallest entry in the set + -- duplicates: % -> List Record(entry:S,count:NonNegativeInteger) + ++ to become an in order iterator + -- parts: % -> List S ++ in order iterator + min: % -> S + ++ min(u) returns the smallest entry in the multiset aggregate u. + +@ +<>= +"OMSAGG" [color=lightblue,href="books/bookvol10.pamphlet"]; +"OMSAGG" -> "MSETAGG" +"OMSAGG" -> "PRQAGG" + +@ +<>= +"OrderedMultisetAggregate(a:SetCategory)" + [color=lightblue,href="books/bookvol10.pamphlet"]; +"OrderedMultisetAggregate(a:SetCategory)" -> "MultisetAggregate(a:SetCategory)" +"OrderedMultisetAggregate(a:SetCategory)" -> + "PriorityQueueAggregate(a:SetCategory)" + +@ +\section{category SETAGG SetAggregate} +<>= +)abbrev category SETAGG SetAggregate +++ Author: Michael Monagan; revised by Manuel Bronstein and Richard Jenks +++ Date Created: August 87 through August 88 +++ Date Last Updated: 14 Oct, 1993 by RSS +++ Basic Operations: +++ Related Constructors: +++ Also See: +++ AMS Classifications: +++ Keywords: +++ References: +++ Description: +++ A set category lists a collection of set-theoretic operations +++ useful for both finite sets and multisets. +++ Note however that finite sets are distinct from multisets. +++ Although the operations defined for set categories are +++ common to both, the relationship between the two cannot +++ be described by inclusion or inheritance. +SetAggregate(S:SetCategory): + Category == Join(SetCategory, Collection(S)) with + partiallyOrderedSet + "<" : (%, %) -> Boolean + ++ s < t returns true if all elements of set aggregate s are also + ++ elements of set aggregate t. + brace : () -> % + ++ brace()$D (otherwise written {}$D) + ++ creates an empty set aggregate of type D. + ++ This form is considered obsolete. Use \axiomFun{set} instead. + brace : List S -> % + ++ brace([x,y,...,z]) + ++ creates a set aggregate containing items x,y,...,z. + ++ This form is considered obsolete. Use \axiomFun{set} instead. + set : () -> % + ++ set()$D creates an empty set aggregate of type D. + set : List S -> % + ++ set([x,y,...,z]) creates a set aggregate containing items x,y,...,z. + intersect: (%, %) -> % + ++ intersect(u,v) returns the set aggregate w consisting of + ++ elements common to both set aggregates u and v. + ++ Note: equivalent to the notation (not currently supported) + ++ {x for x in u | member?(x,v)}. + difference : (%, %) -> % + ++ difference(u,v) returns the set aggregate w consisting of + ++ elements in set aggregate u but not in set aggregate v. + ++ If u and v have no elements in common, \axiom{difference(u,v)} + ++ returns a copy of u. + ++ Note: equivalent to the notation (not currently supported) + ++ \axiom{{x for x in u | not member?(x,v)}}. + difference : (%, S) -> % + ++ difference(u,x) returns the set aggregate u with element x removed. + ++ If u does not contain x, a copy of u is returned. + ++ Note: \axiom{difference(s, x) = difference(s, {x})}. + symmetricDifference : (%, %) -> % + ++ symmetricDifference(u,v) returns the set aggregate of elements x which + ++ are members of set aggregate u or set aggregate v but not both. + ++ If u and v have no elements in common, \axiom{symmetricDifference(u,v)} + ++ returns a copy of u. + ++ Note: \axiom{symmetricDifference(u,v) = + ++ union(difference(u,v),difference(v,u))} + subset? : (%, %) -> Boolean + ++ subset?(u,v) tests if u is a subset of v. + ++ Note: equivalent to + ++ \axiom{reduce(and,{member?(x,v) for x in u},true,false)}. + union : (%, %) -> % + ++ union(u,v) returns the set aggregate of elements which are members + ++ of either set aggregate u or v. + union : (%, S) -> % + ++ union(u,x) returns the set aggregate u with the element x added. + ++ If u already contains x, \axiom{union(u,x)} returns a copy of u. + union : (S, %) -> % + ++ union(x,u) returns the set aggregate u with the element x added. + ++ If u already contains x, \axiom{union(x,u)} returns a copy of u. add - if % has finiteAggregate then - #c == # parts c - count(f:S -> Boolean, c:%) == _+/[1 for x in parts c | f x] - any?(f, c) == _or/[f x for x in parts c] - every?(f, c) == _and/[f x for x in parts c] - find(f:S -> Boolean, c:%) == find(f, parts c) - reduce(f:(S,S)->S, x:%) == reduce(f, parts x) - reduce(f:(S,S)->S, x:%, s:S) == reduce(f, parts x, s) - remove(f:S->Boolean, x:%) == - construct remove(f, parts x) - select(f:S->Boolean, x:%) == - construct select(f, parts x) + symmetricDifference(x, y) == union(difference(x, y), difference(y, x)) + union(s:%, x:S) == union(s, {x}) + union(x:S, s:%) == union(s, {x}) + difference(s:%, x:S) == difference(s, {x}) - if S has SetCategory then - remove(s:S, x:%) == remove(#1 = s, x) - reduce(f:(S,S)->S, x:%, s1:S, s2:S) == reduce(f, parts x, s1, s2) - removeDuplicates(x) == construct removeDuplicates parts x +@ +<>= +"SETAGG" [color=lightblue,href="books/bookvol10.pamphlet"]; +"SETAGG" -> "SETCAT" +"SETAGG" -> "CLAGG" @ -<>= -"CLAGG" [color=lightblue,href="books/bookvol10.pamphlet"]; -"CLAGG" -> "HOAGG" +<>= +"SetAggregate(a:SetCategory)" + [color=lightblue,href="books/bookvol10.pamphlet"]; +"SetAggregate(a:SetCategory)" -> "SetCategory()" +"SetAggregate(a:SetCategory)" -> "Collection(a:SetCategory)" @ -<>= -"Collection(a:Type)" [color=lightblue,href="books/bookvol10.pamphlet"]; -"Collection(a:Type)" -> "HomogeneousAggregate(a:Type)" +\chapter{The bootstrap code} +\section{ALAGG.lsp BOOTSTRAP} +{\bf ALAGG} depends on a chain of files. We need to break this cycle to build +the algebra. So we keep a cached copy of the translated {\bf ALAGG} +category which we can write into the {\bf MID} directory. We compile +the lisp code and copy the {\bf ALAGG.o} file to the {\bf OUT} directory. +This is eventually forcibly replaced by a recompiled version. -"Collection(a:SetCategory)" [color=seagreen,href="books/bookvol10.pamphlet"]; -"Collection(a:SetCategory)" -> "Collection(a:Type)" +Note that this code is not included in the generated catdef.spad file. + +<>= + +(|/VERSIONCHECK| 2) + +(SETQ |AssociationListAggregate;CAT| (QUOTE NIL)) + +(SETQ |AssociationListAggregate;AL| (QUOTE NIL)) + +(DEFUN |AssociationListAggregate| + (|&REST| #1=#:G88404 |&AUX| #2=#:G88402) + (DSETQ #2# #1#) + (LET (#3=#:G88403) + (COND + ((SETQ #3# (|assoc| (|devaluateList| #2#) |AssociationListAggregate;AL|)) + (CDR #3#)) + (T + (SETQ |AssociationListAggregate;AL| + (|cons5| + (CONS + (|devaluateList| #2#) + (SETQ #3# (APPLY (FUNCTION |AssociationListAggregate;|) #2#))) + |AssociationListAggregate;AL|)) #3#)))) + +(DEFUN |AssociationListAggregate;| (|t#1| |t#2|) + (PROG (#1=#:G88401) + (RETURN + (PROG1 + (LETT #1# + (|sublisV| + (PAIR + (QUOTE (|t#1| |t#2|)) (LIST (|devaluate| |t#1|) (|devaluate| |t#2|))) + (|sublisV| + (PAIR + (QUOTE (#2=#:G88400)) + (LIST (QUOTE (|Record| (|:| |key| |t#1|) (|:| |entry| |t#2|))))) + (COND + (|AssociationListAggregate;CAT|) + ((QUOTE T) + (LETT |AssociationListAggregate;CAT| + (|Join| + (|TableAggregate| (QUOTE |t#1|) (QUOTE |t#2|)) + (|ListAggregate| (QUOTE #2#)) + (|mkCategory| + (QUOTE |domain|) + (QUOTE + (((|assoc| + ((|Union| + (|Record| (|:| |key| |t#1|) (|:| |entry| |t#2|)) "failed") + |t#1| |$|)) + T))) + NIL (QUOTE NIL) NIL)) + . #3=(|AssociationListAggregate|)))))) + . #3#) + (SETELT #1# 0 + (LIST + (QUOTE |AssociationListAggregate|) + (|devaluate| |t#1|) + (|devaluate| |t#2|))))))) @ \section{CLAGG.lsp BOOTSTRAP} {\bf CLAGG} depends on a chain of files. We need to break this cycle to build @@ -3055,731 +5822,6 @@ Note that this code is not included in the generated catdef.spad file. 12 0 13 2 0 14 12 0 15 1 0 10 0 11)))))) (QUOTE |lookupComplete|))) @ -\section{category DIAGG Dictionary} -<>= -)abbrev category DIAGG Dictionary -++ Author: Michael Monagan; revised by Manuel Bronstein and Richard Jenks -++ Date Created: August 87 through August 88 -++ Date Last Updated: April 1991 -++ Basic Operations: -++ Related Constructors: -++ Also See: -++ AMS Classifications: -++ Keywords: -++ References: -++ Description: -++ A dictionary is an aggregate in which entries can be inserted, -++ searched for and removed. Duplicates are thrown away on insertion. -++ This category models the usual notion of dictionary which involves -++ large amounts of data where copying is impractical. -++ Principal operations are thus destructive (non-copying) ones. -Dictionary(S:SetCategory): Category == - DictionaryOperations S add - dictionary l == - d := dictionary() - for x in l repeat insert_!(x, d) - d - - if % has finiteAggregate then - -- remove(f:S->Boolean,t:%) == remove_!(f, copy t) - -- select(f, t) == select_!(f, copy t) - select_!(f, t) == remove_!(not f #1, t) - - --extract_! d == - -- empty? d => error "empty dictionary" - -- remove_!(x := first parts d, d, 1) - -- x - - s = t == - eq?(s,t) => true - #s ^= #t => false - _and/[member?(x, t) for x in parts s] - - remove_!(f:S->Boolean, t:%) == - for m in parts t repeat if f m then remove_!(m, t) - t - -@ -<>= -"DIAGG" [color=lightblue,href="books/bookvol10.pamphlet"]; -"DIAGG" -> "DIOPS" - -@ -<>= -"Dictionary(a:SetCategory)" [color=lightblue,href="books/bookvol10.pamphlet"]; -"Dictionary(a:SetCategory)" -> "DictionaryOperations(a:SetCategory)" - -"Dictionary(Record(a:SetCategory,b:SetCategory))" - [color=seagreen,href="books/bookvol10.pamphlet"]; -"Dictionary(Record(a:SetCategory,b:SetCategory))" -> - "Dictionary(a:SetCategory)" - -@ -\section{category DIOPS DictionaryOperations} -<>= -)abbrev category DIOPS DictionaryOperations -++ Author: Michael Monagan; revised by Manuel Bronstein and Richard Jenks -++ Date Created: August 87 through August 88 -++ Date Last Updated: April 1991 -++ Basic Operations: -++ Related Constructors: -++ Also See: -++ AMS Classifications: -++ Keywords: -++ References: -++ Description: -++ This category is a collection of operations common to both -++ categories \spadtype{Dictionary} and \spadtype{MultiDictionary} -DictionaryOperations(S:SetCategory): Category == - Join(BagAggregate S, Collection(S)) with - dictionary: () -> % - ++ dictionary()$D creates an empty dictionary of type D. - dictionary: List S -> % - ++ dictionary([x,y,...,z]) creates a dictionary consisting of - ++ entries \axiom{x,y,...,z}. --- insert: (S,%) -> S ++ insert an entry --- member?: (S,%) -> Boolean ++ search for an entry --- remove_!: (S,%,NonNegativeInteger) -> % --- ++ remove!(x,d,n) destructively changes dictionary d by removing --- ++ up to n entries y such that \axiom{y = x}. --- remove_!: (S->Boolean,%,NonNegativeInteger) -> % --- ++ remove!(p,d,n) destructively changes dictionary d by removing --- ++ up to n entries x such that \axiom{p(x)} is true. - if % has finiteAggregate then - remove_!: (S,%) -> % - ++ remove!(x,d) destructively changes dictionary d by removing - ++ all entries y such that \axiom{y = x}. - remove_!: (S->Boolean,%) -> % - ++ remove!(p,d) destructively changes dictionary d by removeing - ++ all entries x such that \axiom{p(x)} is true. - select_!: (S->Boolean,%) -> % - ++ select!(p,d) destructively changes dictionary d by removing - ++ all entries x such that \axiom{p(x)} is not true. - add - construct l == dictionary l - dictionary() == empty() - if % has finiteAggregate then - copy d == dictionary parts d - coerce(s:%):OutputForm == - prefix("dictionary"@String :: OutputForm, - [x::OutputForm for x in parts s]) - -@ -<>= -"DIOPS" [color=lightblue,href="books/bookvol10.pamphlet"]; -"DIOPS" -> "BGAGG" -"DIOPS" -> "CLAGG" - -@ -<>= -"DictionaryOperations(a:SetCategory)" - [color=lightblue,href="books/bookvol10.pamphlet"]; -"DictionaryOperations(a:SetCategory)" -> "BagAggregate(a:SetCategory)" -"DictionaryOperations(a:SetCategory)" -> "Collection(a:SetCategory)" - -@ -\section{category DLAGG DoublyLinkedAggregate} -<>= -)abbrev category DLAGG DoublyLinkedAggregate -++ Author: Michael Monagan; revised by Manuel Bronstein and Richard Jenks -++ Date Created: August 87 through August 88 -++ Date Last Updated: April 1991 -++ Basic Operations: -++ Related Constructors: -++ Also See: -++ AMS Classifications: -++ Keywords: -++ References: -++ Description: -++ A doubly-linked aggregate serves as a model for a doubly-linked -++ list, that is, a list which can has links to both next and previous -++ nodes and thus can be efficiently traversed in both directions. -DoublyLinkedAggregate(S:Type): Category == RecursiveAggregate S with - last: % -> S - ++ last(l) returns the last element of a doubly-linked aggregate l. - ++ Error: if l is empty. - head: % -> % - ++ head(l) returns the first element of a doubly-linked aggregate l. - ++ Error: if l is empty. - tail: % -> % - ++ tail(l) returns the doubly-linked aggregate l starting at - ++ its second element. - ++ Error: if l is empty. - previous: % -> % - ++ previous(l) returns the doubly-link list beginning with its previous - ++ element. - ++ Error: if l has no previous element. - ++ Note: \axiom{next(previous(l)) = l}. - next: % -> % - ++ next(l) returns the doubly-linked aggregate beginning with its next - ++ element. - ++ Error: if l has no next element. - ++ Note: \axiom{next(l) = rest(l)} and \axiom{previous(next(l)) = l}. - if % has shallowlyMutable then - concat_!: (%,%) -> % - ++ concat!(u,v) destructively concatenates doubly-linked aggregate v - ++ to the end of doubly-linked aggregate u. - setprevious_!: (%,%) -> % - ++ setprevious!(u,v) destructively sets the previous node of - ++ doubly-linked aggregate u to v, returning v. - setnext_!: (%,%) -> % - ++ setnext!(u,v) destructively sets the next node of doubly-linked - ++ aggregate u to v, returning v. - -@ -<>= -"DLAGG" [color=lightblue,href="books/bookvol10.pamphlet"]; -"DLAGG" -> "RCAGG" - -@ -<>= -"DoublyLinkedAggregate(a:Type)" - [color=lightblue,href="books/bookvol10.pamphlet"]; -"DoublyLinkedAggregate(a:Type)" -> "RecursiveAggregate(a:Type)" - -@ -\section{category DQAGG DequeueAggregate} -<>= -)abbrev category DQAGG DequeueAggregate -++ Author: Michael Monagan; revised by Manuel Bronstein and Richard Jenks -++ Date Created: August 87 through August 88 -++ Date Last Updated: April 1991 -++ Basic Operations: -++ Related Constructors: -++ Also See: -++ AMS Classifications: -++ Keywords: -++ References: -++ Description: -++ A dequeue is a doubly ended stack, that is, a bag where first items -++ inserted are the first items extracted, at either the front or the back end -++ of the data structure. -DequeueAggregate(S:Type): - Category == Join(StackAggregate S,QueueAggregate S) with - dequeue: () -> % - ++ dequeue()$D creates an empty dequeue of type D. - dequeue: List S -> % - ++ dequeue([x,y,...,z]) creates a dequeue with first (top or front) - ++ element x, second element y,...,and last (bottom or back) element z. - height: % -> NonNegativeInteger - ++ height(d) returns the number of elements in dequeue d. - ++ Note: \axiom{height(d) = # d}. - top_!: % -> S - ++ top!(d) returns the element at the top (front) of the dequeue. - bottom_!: % -> S - ++ bottom!(d) returns the element at the bottom (back) of the dequeue. - insertTop_!: (S,%) -> S - ++ insertTop!(x,d) destructively inserts x into the dequeue d, that is, - ++ at the top (front) of the dequeue. - ++ The element previously at the top of the dequeue becomes the - ++ second in the dequeue, and so on. - insertBottom_!: (S,%) -> S - ++ insertBottom!(x,d) destructively inserts x into the dequeue d - ++ at the bottom (back) of the dequeue. - extractTop_!: % -> S - ++ extractTop!(d) destructively extracts the top (front) element - ++ from the dequeue d. - ++ Error: if d is empty. - extractBottom_!: % -> S - ++ extractBottom!(d) destructively extracts the bottom (back) element - ++ from the dequeue d. - ++ Error: if d is empty. - reverse_!: % -> % - ++ reverse!(d) destructively replaces d by its reverse dequeue, i.e. - ++ the top (front) element is now the bottom (back) element, and so on. - -@ -<>= -"DQAGG" [color=lightblue,href="books/bookvol10.pamphlet"]; -"DQAGG" -> "SKAGG" -"DQAGG" -> "QUAGG" - -@ -<>= -"DequeueAggregate(a:Type)" [color=lightblue,href="books/bookvol10.pamphlet"]; -"DequeueAggregate(a:Type)" -> "StackAggregate(a:Type)" -"DequeueAggregate(a:Type)" -> "QueueAggregate(a:Type)" - -"DequeueAggregate(a:SetCategory)" - [color=seagreen,href="books/bookvol10.pamphlet"]; -"DequeueAggregate(a:SetCategory)" -> "DequeueAggregate(a:Type)" - -@ -\section{category ELAGG ExtensibleLinearAggregate} -<>= -)abbrev category ELAGG ExtensibleLinearAggregate -++ Author: Michael Monagan; revised by Manuel Bronstein and Richard Jenks -++ Date Created: August 87 through August 88 -++ Date Last Updated: April 1991 -++ Basic Operations: -++ Related Constructors: -++ Also See: -++ AMS Classifications: -++ Keywords: -++ References: -++ Description: -++ An extensible aggregate is one which allows insertion and deletion of -++ entries. These aggregates are models of lists and streams which are -++ represented by linked structures so as to make insertion, deletion, and -++ concatenation efficient. However, access to elements of these -++ extensible aggregates is generally slow since access is made from the end. -++ See \spadtype{FlexibleArray} for an exception. -ExtensibleLinearAggregate(S:Type):Category == LinearAggregate S with - shallowlyMutable - concat_!: (%,S) -> % - ++ concat!(u,x) destructively adds element x to the end of u. - concat_!: (%,%) -> % - ++ concat!(u,v) destructively appends v to the end of u. - ++ v is unchanged - delete_!: (%,Integer) -> % - ++ delete!(u,i) destructively deletes the \axiom{i}th element of u. - ++ - ++E Data:=Record(age:Integer,gender:String) - ++E a1:AssociationList(String,Data):=table() - ++E a1."tim":=[55,"male"]$Data - ++E delete!(a1,1) - - delete_!: (%,UniversalSegment(Integer)) -> % - ++ delete!(u,i..j) destructively deletes elements u.i through u.j. - remove_!: (S->Boolean,%) -> % - ++ remove!(p,u) destructively removes all elements x of - ++ u such that \axiom{p(x)} is true. - insert_!: (S,%,Integer) -> % - ++ insert!(x,u,i) destructively inserts x into u at position i. - insert_!: (%,%,Integer) -> % - ++ insert!(v,u,i) destructively inserts aggregate v into u at position i. - merge_!: ((S,S)->Boolean,%,%) -> % - ++ merge!(p,u,v) destructively merges u and v using predicate p. - select_!: (S->Boolean,%) -> % - ++ select!(p,u) destructively changes u by keeping only values x such that - ++ \axiom{p(x)}. - if S has SetCategory then - remove_!: (S,%) -> % - ++ remove!(x,u) destructively removes all values x from u. - removeDuplicates_!: % -> % - ++ removeDuplicates!(u) destructively removes duplicates from u. - if S has OrderedSet then merge_!: (%,%) -> % - ++ merge!(u,v) destructively merges u and v in ascending order. - add - delete(x:%, i:Integer) == delete_!(copy x, i) - delete(x:%, i:UniversalSegment(Integer)) == delete_!(copy x, i) - remove(f:S -> Boolean, x:%) == remove_!(f, copy x) - insert(s:S, x:%, i:Integer) == insert_!(s, copy x, i) - insert(w:%, x:%, i:Integer) == insert_!(copy w, copy x, i) - select(f, x) == select_!(f, copy x) - concat(x:%, y:%) == concat_!(copy x, y) - concat(x:%, y:S) == concat_!(copy x, new(1, y)) - concat_!(x:%, y:S) == concat_!(x, new(1, y)) - if S has SetCategory then - remove(s:S, x:%) == remove_!(s, copy x) - remove_!(s:S, x:%) == remove_!(#1 = s, x) - removeDuplicates(x:%) == removeDuplicates_!(copy x) - - if S has OrderedSet then - merge_!(x, y) == merge_!(_<$S, x, y) - -@ -<>= -"ELAGG" [color=lightblue,href="books/bookvol10.pamphlet"]; -"ELAGG" -> "LNAGG" - -@ -<>= -"ExtensibleLinearAggregate(a:Type)" - [color=lightblue,href="books/bookvol10.pamphlet"]; -"ExtensibleLinearAggregate(a:Type)" -> "LinearAggregate(a:Type)" - -@ -\section{category ELTAB Eltable} -<>= -)abbrev category ELTAB Eltable -++ Author: Michael Monagan; revised by Manuel Bronstein and Manuel Bronstein -++ Date Created: August 87 through August 88 -++ Date Last Updated: April 1991 -++ Basic Operations: -++ Related Constructors: -++ Also See: -++ AMS Classifications: -++ Keywords: -++ References: -++ Description: -++ An eltable over domains D and I is a structure which can be viewed -++ as a function from D to I. -++ Examples of eltable structures range from data structures, e.g. those -++ of type \spadtype{List}, to algebraic structures like \spadtype{Polynomial}. -Eltable(S:SetCategory, Index:Type): Category == with - elt : (%, S) -> Index - ++ elt(u,i) (also written: u . i) returns the element of u indexed by i. - ++ Error: if i is not an index of u. - -@ -<>= -"ELTAB" [color=lightblue,href="books/bookvol10.pamphlet"]; -"ELTAB" -> "CATEGORY" - -@ -<>= -"Eltable(a:SetCategory,b:Type)" - [color=lightblue,href="books/bookvol10.pamphlet"]; -"Eltable(a:SetCategory,b:Type)" -> "Category" - -@ -\section{category ELTAGG EltableAggregate} -<>= -)abbrev category ELTAGG EltableAggregate -++ Author: Michael Monagan; revised by Manuel Bronstein and Richard Jenks -++ Date Created: August 87 through August 88 -++ Date Last Updated: April 1991 -++ Basic Operations: -++ Related Constructors: -++ Also See: -++ AMS Classifications: -++ Keywords: -++ References: -++ Description: -++ An eltable aggregate is one which can be viewed as a function. -++ For example, the list \axiom{[1,7,4]} can applied to 0,1, and 2 respectively -++ will return the integers 1,7, and 4; thus this list may be viewed -++ as mapping 0 to 1, 1 to 7 and 2 to 4. In general, an aggregate -++ can map members of a domain {\em Dom} to an image domain {\em Im}. -EltableAggregate(Dom:SetCategory, Im:Type): Category == --- This is separated from Eltable --- and series won't have to support qelt's and setelt's. - Eltable(Dom, Im) with - elt : (%, Dom, Im) -> Im - ++ elt(u, x, y) applies u to x if x is in the domain of u, - ++ and returns y otherwise. - ++ For example, if u is a polynomial in \axiom{x} over the rationals, - ++ \axiom{elt(u,n,0)} may define the coefficient of \axiom{x} - ++ to the power n, returning 0 when n is out of range. - qelt: (%, Dom) -> Im - ++ qelt(u, x) applies \axiom{u} to \axiom{x} without checking whether - ++ \axiom{x} is in the domain of \axiom{u}. If \axiom{x} is not in the - ++ domain of \axiom{u} a memory-access violation may occur. If a check - ++ on whether \axiom{x} is in the domain of \axiom{u} is required, use - ++ the function \axiom{elt}. - if % has shallowlyMutable then - setelt : (%, Dom, Im) -> Im - ++ setelt(u,x,y) sets the image of x to be y under u, - ++ assuming x is in the domain of u. - ++ Error: if x is not in the domain of u. - -- this function will soon be renamed as setelt!. - qsetelt_!: (%, Dom, Im) -> Im - ++ qsetelt!(u,x,y) sets the image of \axiom{x} to be \axiom{y} under - ++ \axiom{u}, without checking that \axiom{x} is in the domain of - ++ \axiom{u}. - ++ If such a check is required use the function \axiom{setelt}. - add - qelt(a, x) == elt(a, x) - if % has shallowlyMutable then - qsetelt_!(a, x, y) == (a.x := y) - -@ -<>= -"ELTAGG" [color=lightblue,href="books/bookvol10.pamphlet"]; -"ELTAGG" -> "ELTAB" - -@ -<>= -"EltableAggregate(a:SetCategory,b:Type)" - [color=lightblue,href="books/bookvol10.pamphlet"]; -"EltableAggregate(a:SetCategory,b:Type)" -> "Eltable(a:SetCategory,b:Type)" - -@ -\section{category FLAGG FiniteLinearAggregate} -<>= -)abbrev category FLAGG FiniteLinearAggregate -++ Author: Michael Monagan; revised by Manuel Bronstein and Richard Jenks -++ Date Created: August 87 through August 88 -++ Date Last Updated: April 1991 -++ Basic Operations: -++ Related Constructors: -++ Also See: -++ AMS Classifications: -++ Keywords: -++ References: -++ Description: -++ A finite linear aggregate is a linear aggregate of finite length. -++ The finite property of the aggregate adds several exports to the -++ list of exports from \spadtype{LinearAggregate} such as -++ \spadfun{reverse}, \spadfun{sort}, and so on. -FiniteLinearAggregate(S:Type): Category == LinearAggregate S with - finiteAggregate - merge: ((S,S)->Boolean,%,%) -> % - ++ merge(p,a,b) returns an aggregate c which merges \axiom{a} and b. - ++ The result is produced by examining each element x of \axiom{a} and y - ++ of b successively. If \axiom{p(x,y)} is true, then x is inserted into - ++ the result; otherwise y is inserted. If x is chosen, the next element - ++ of \axiom{a} is examined, and so on. When all the elements of one - ++ aggregate are examined, the remaining elements of the other - ++ are appended. - ++ For example, \axiom{merge(<,[1,3],[2,7,5])} returns - ++ \axiom{[1,2,3,7,5]}. - reverse: % -> % - ++ reverse(a) returns a copy of \axiom{a} with elements in reverse order. - sort: ((S,S)->Boolean,%) -> % - ++ sort(p,a) returns a copy of \axiom{a} sorted using total ordering - ++ predicate p. - sorted?: ((S,S)->Boolean,%) -> Boolean - ++ sorted?(p,a) tests if \axiom{a} is sorted according to predicate p. - position: (S->Boolean, %) -> Integer - ++ position(p,a) returns the index i of the first x in \axiom{a} - ++ such that \axiom{p(x)} is true, and \axiom{minIndex(a) - 1} - ++ if there is no such x. - if S has SetCategory then - position: (S, %) -> Integer - ++ position(x,a) returns the index i of the first occurrence of x in a, - ++ and \axiom{minIndex(a) - 1} if there is no such x. - position: (S,%,Integer) -> Integer - ++ position(x,a,n) returns the index i of the first occurrence of x in - ++ \axiom{a} where \axiom{i >= n}, and \axiom{minIndex(a) - 1} - ++ if no such x is found. - if S has OrderedSet then - OrderedSet - merge: (%,%) -> % - ++ merge(u,v) merges u and v in ascending order. - ++ Note: \axiom{merge(u,v) = merge(<=,u,v)}. - sort: % -> % - ++ sort(u) returns an u with elements in ascending order. - ++ Note: \axiom{sort(u) = sort(<=,u)}. - sorted?: % -> Boolean - ++ sorted?(u) tests if the elements of u are in ascending order. - if % has shallowlyMutable then - copyInto_!: (%,%,Integer) -> % - ++ copyInto!(u,v,i) returns aggregate u containing a copy of - ++ v inserted at element i. - reverse_!: % -> % - ++ reverse!(u) returns u with its elements in reverse order. - sort_!: ((S,S)->Boolean,%) -> % - ++ sort!(p,u) returns u with its elements ordered by p. - if S has OrderedSet then sort_!: % -> % - ++ sort!(u) returns u with its elements in ascending order. - add - if S has SetCategory then - position(x:S, t:%) == position(x, t, minIndex t) - - if S has OrderedSet then --- sorted? l == sorted?(_<$S, l) - sorted? l == sorted?(#1 < #2 or #1 = #2, l) - merge(x, y) == merge(_<$S, x, y) - sort l == sort(_<$S, l) - - if % has shallowlyMutable then - reverse x == reverse_! copy x - sort(f, l) == sort_!(f, copy l) - reverse x == reverse_! copy x - - if S has OrderedSet then - sort_! l == sort_!(_<$S, l) - -@ -<>= -"FLAGG" [color=lightblue,href="books/bookvol10.pamphlet"]; -"FLAGG" -> "LNAGG" - -@ -<>= -"FiniteLinearAggregate(a:Type)" - [color=lightblue,href="books/bookvol10.pamphlet"]; -"FiniteLinearAggregate(a:Type)" -> "LinearAggregate(a:Type)" - -@ -\section{category FSAGG FiniteSetAggregate} -<>= -)abbrev category FSAGG FiniteSetAggregate -++ Author: Michael Monagan; revised by Manuel Bronstein and Richard Jenks -++ Date Created: August 87 through August 88 -++ Date Last Updated: 14 Oct, 1993 by RSS -++ Basic Operations: -++ Related Constructors: -++ Also See: -++ AMS Classifications: -++ Keywords: -++ References: -++ Description: -++ A finite-set aggregate models the notion of a finite set, that is, -++ a collection of elements characterized by membership, but not -++ by order or multiplicity. -++ See \spadtype{Set} for an example. -FiniteSetAggregate(S:SetCategory): Category == - Join(Dictionary S, SetAggregate S) with - finiteAggregate - cardinality: % -> NonNegativeInteger - ++ cardinality(u) returns the number of elements of u. - ++ Note: \axiom{cardinality(u) = #u}. - if S has Finite then - Finite - complement: % -> % - ++ complement(u) returns the complement of the set u, - ++ i.e. the set of all values not in u. - universe: () -> % - ++ universe()$D returns the universal set for finite set aggregate D. - if S has OrderedSet then - max: % -> S - ++ max(u) returns the largest element of aggregate u. - min: % -> S - ++ min(u) returns the smallest element of aggregate u. - - add - s < t == #s < #t and s = intersect(s,t) - s = t == #s = #t and empty? difference(s,t) - brace l == construct l - set l == construct l - cardinality s == #s - construct l == (s := set(); for x in l repeat insert_!(x,s); s) - count(x:S, s:%) == (member?(x, s) => 1; 0) - subset?(s, t) == #s < #t and _and/[member?(x, t) for x in parts s] - - coerce(s:%):OutputForm == - brace [x::OutputForm for x in parts s]$List(OutputForm) - - intersect(s, t) == - i := {} - for x in parts s | member?(x, t) repeat insert_!(x, i) - i - - difference(s:%, t:%) == - m := copy s - for x in parts t repeat remove_!(x, m) - m - - symmetricDifference(s, t) == - d := copy s - for x in parts t repeat - if member?(x, s) then remove_!(x, d) else insert_!(x, d) - d - - union(s:%, t:%) == - u := copy s - for x in parts t repeat insert_!(x, u) - u - - if S has Finite then - universe() == {index(i::PositiveInteger) for i in 1..size()$S} - complement s == difference(universe(), s ) - size() == 2 ** size()$S - index i == - {index(j::PositiveInteger)$S for j in 1..size()$S | bit?(i-1,j-1)} - random() == index((random()$Integer rem (size()$% + 1))::PositiveInteger) - - lookup s == - n:PositiveInteger := 1 - for x in parts s repeat _ - n := n + 2 ** ((lookup(x) - 1)::NonNegativeInteger) - n - - if S has OrderedSet then - max s == - empty?(l := parts s) => error "Empty set" - reduce("max", l) - - min s == - empty?(l := parts s) => error "Empty set" - reduce("min", l) - -@ -<>= -"FSAGG" [color=lightblue,href="books/bookvol10.pamphlet"]; -"FSAGG" -> "DIAGG" -"FSAGG" -> "SETAGG" - -@ -<>= -"FiniteSetAggregate(a:SetCategory)" - [color=lightblue,href="books/bookvol10.pamphlet"]; -"FiniteSetAggregate(a:SetCategory)" -> "Dictionary(a:SetCategory)" -"FiniteSetAggregate(a:SetCategory)" -> "SetAggregate(a:SetCategory)" - -@ -\section{category HOAGG HomogeneousAggregate} -<>= -)abbrev category HOAGG HomogeneousAggregate -++ Author: Michael Monagan; revised by Manuel Bronstein and Richard Jenks -++ Date Created: August 87 through August 88 -++ Date Last Updated: April 1991, May 1995 -++ Basic Operations: -++ Related Constructors: -++ Also See: -++ AMS Classifications: -++ Keywords: -++ References: -++ Description: -++ A homogeneous aggregate is an aggregate of elements all of the -++ same type. -++ In the current system, all aggregates are homogeneous. -++ Two attributes characterize classes of aggregates. -++ Aggregates from domains with attribute \spadatt{finiteAggregate} -++ have a finite number of members. -++ Those with attribute \spadatt{shallowlyMutable} allow an element -++ to be modified or updated without changing its overall value. -HomogeneousAggregate(S:Type): Category == Aggregate with - if S has SetCategory then SetCategory - if S has SetCategory then - if S has Evalable S then Evalable S - map : (S->S,%) -> % - ++ map(f,u) returns a copy of u with each element x replaced by f(x). - ++ For collections, \axiom{map(f,u) = [f(x) for x in u]}. - if % has shallowlyMutable then - map_!: (S->S,%) -> % - ++ map!(f,u) destructively replaces each element x of u - ++ by \axiom{f(x)}. - if % has finiteAggregate then - any?: (S->Boolean,%) -> Boolean - ++ any?(p,u) tests if \axiom{p(x)} is true for any element x of u. - ++ Note: for collections, - ++ \axiom{any?(p,u) = reduce(or,map(f,u),false,true)}. - every?: (S->Boolean,%) -> Boolean - ++ every?(f,u) tests if p(x) is true for all elements x of u. - ++ Note: for collections, - ++ \axiom{every?(p,u) = reduce(and,map(f,u),true,false)}. - count: (S->Boolean,%) -> NonNegativeInteger - ++ count(p,u) returns the number of elements x in u - ++ such that \axiom{p(x)} is true. For collections, - ++ \axiom{count(p,u) = reduce(+,[1 for x in u | p(x)],0)}. - parts: % -> List S - ++ parts(u) returns a list of the consecutive elements of u. - ++ For collections, \axiom{parts([x,y,...,z]) = (x,y,...,z)}. - members: % -> List S - ++ members(u) returns a list of the consecutive elements of u. - ++ For collections, \axiom{parts([x,y,...,z]) = (x,y,...,z)}. - if S has SetCategory then - count: (S,%) -> NonNegativeInteger - ++ count(x,u) returns the number of occurrences of x in u. For - ++ collections, \axiom{count(x,u) = reduce(+,[x=y for y in u],0)}. - member?: (S,%) -> Boolean - ++ member?(x,u) tests if x is a member of u. - ++ For collections, - ++ \axiom{member?(x,u) = reduce(or,[x=y for y in u],false)}. - add - if S has Evalable S then - eval(u:%,l:List Equation S):% == map(eval(#1,l),u) - if % has finiteAggregate then - #c == # parts c - any?(f, c) == _or/[f x for x in parts c] - every?(f, c) == _and/[f x for x in parts c] - count(f:S -> Boolean, c:%) == _+/[1 for x in parts c | f x] - members x == parts x - if S has SetCategory then - count(s:S, x:%) == count(s = #1, x) - member?(e, c) == any?(e = #1,c) - x = y == - size?(x, #y) and _and/[a = b for a in parts x for b in parts y] - coerce(x:%):OutputForm == - bracket - commaSeparate [a::OutputForm for a in parts x]$List(OutputForm) - -@ -<>= -"HOAGG" [color=lightblue,href="books/bookvol10.pamphlet"]; -"HOAGG" -> "AGG" - -@ -<>= -"HomogeneousAggregate(a:Type)" - [color=lightblue,href="books/bookvol10.pamphlet"]; -"HomogeneousAggregate(a:Type)" -> "Aggregate()" - -@ \section{HOAGG.lsp BOOTSTRAP} {\bf HOAGG} depends on a chain of files. We need to break this cycle to build the algebra. So we keep a cached copy of the translated {\bf HOAGG} @@ -4155,272 +6197,6 @@ Note that this code is not included in the generated catdef.spad file. 0 17 0 0 30 1 0 15 0 16)))))) (QUOTE |lookupComplete|))) @ -\section{category IXAGG IndexedAggregate} -<>= -)abbrev category IXAGG IndexedAggregate -++ Author: Michael Monagan; revised by Manuel Bronstein and Richard Jenks -++ Date Created: August 87 through August 88 -++ Date Last Updated: April 1991 -++ Basic Operations: -++ Related Constructors: -++ Also See: -++ AMS Classifications: -++ Keywords: -++ References: -++ Description: -++ An indexed aggregate is a many-to-one mapping of indices to entries. -++ For example, a one-dimensional-array is an indexed aggregate where -++ the index is an integer. Also, a table is an indexed aggregate -++ where the indices and entries may have any type. -IndexedAggregate(Index: SetCategory, Entry: Type): Category == - Join(HomogeneousAggregate(Entry), EltableAggregate(Index, Entry)) with - entries: % -> List Entry - ++ entries(u) returns a list of all the entries of aggregate u - ++ in no assumed order. - -- to become entries: % -> Entry* and entries: % -> Iterator(Entry,Entry) - index?: (Index,%) -> Boolean - ++ index?(i,u) tests if i is an index of aggregate u. - indices: % -> List Index - ++ indices(u) returns a list of indices of aggregate u in no - ++ particular order. to become indices: - -- % -> Index* and indices: % -> Iterator(Index,Index). --- map: ((Entry,Entry)->Entry,%,%,Entry) -> % --- ++ exists c = map(f,a,b,x), i:Index where --- ++ c.i = f(a(i,x),b(i,x)) | index?(i,a) or index?(i,b) - if Entry has SetCategory and % has finiteAggregate then - entry?: (Entry,%) -> Boolean - ++ entry?(x,u) tests if x equals \axiom{u . i} for some index i. - if Index has OrderedSet then - maxIndex: % -> Index - ++ maxIndex(u) returns the maximum index i of aggregate u. - ++ Note: in general, - ++ \axiom{maxIndex(u) = reduce(max,[i for i in indices u])}; - ++ if u is a list, \axiom{maxIndex(u) = #u}. - minIndex: % -> Index - ++ minIndex(u) returns the minimum index i of aggregate u. - ++ Note: in general, - ++ \axiom{minIndex(a) = reduce(min,[i for i in indices a])}; - ++ for lists, \axiom{minIndex(a) = 1}. - first : % -> Entry - ++ first(u) returns the first element x of u. - ++ Note: for collections, \axiom{first([x,y,...,z]) = x}. - ++ Error: if u is empty. - - if % has shallowlyMutable then - fill_!: (%,Entry) -> % - ++ fill!(u,x) replaces each entry in aggregate u by x. - ++ The modified u is returned as value. - swap_!: (%,Index,Index) -> Void - ++ swap!(u,i,j) interchanges elements i and j of aggregate u. - ++ No meaningful value is returned. - add - elt(a, i, x) == (index?(i, a) => qelt(a, i); x) - - if % has finiteAggregate then - entries x == parts x - if Entry has SetCategory then - entry?(x, a) == member?(x, a) - - if Index has OrderedSet then - maxIndex a == "max"/indices(a) - minIndex a == "min"/indices(a) - first a == a minIndex a - - if % has shallowlyMutable then - map(f, a) == map_!(f, copy a) - - map_!(f, a) == - for i in indices a repeat qsetelt_!(a, i, f qelt(a, i)) - a - - fill_!(a, x) == - for i in indices a repeat qsetelt_!(a, i, x) - a - - swap_!(a, i, j) == - t := a.i - qsetelt_!(a, i, a.j) - qsetelt_!(a, j, t) - void - -@ -<>= -"IXAGG" [color=lightblue,href="books/bookvol10.pamphlet"]; -"IXAGG" -> "HOAGG" -"IXAGG" -> "ELTAGG" - -@ -<>= -"IndexedAggregate(a:SetCategory,b:Type)" - [color=lightblue,href="books/bookvol10.pamphlet"]; -"IndexedAggregate(a:SetCategory,b:Type)" -> - "HomogeneousAggregate(a:Type)" -"IndexedAggregate(a:SetCategory,b:Type)" -> - "EltableAggregate(a:SetCategory,b:Type)" - -"IndexedAggregate(a:SetCategory,b:SetCategory)" - [color=seagreen,href="books/bookvol10.pamphlet"]; -"IndexedAggregate(a:SetCategory,b:SetCategory)" -> - "IndexedAggregate(a:SetCategory,b:Type)" - -"IndexedAggregate(b:Integer,a:Type)" - [color=seagreen,href="books/bookvol10.pamphlet"]; -"IndexedAggregate(b:Integer,a:Type)" -> - "IndexedAggregate(a:SetCategory,b:Type)" - -@ -\section{category KDAGG KeyedDictionary} -<>= -)abbrev category KDAGG KeyedDictionary -++ Author: Michael Monagan; revised by Manuel Bronstein and Richard Jenks -++ Date Created: August 87 through August 88 -++ Date Last Updated: April 1991 -++ Basic Operations: -++ Related Constructors: -++ Also See: -++ AMS Classifications: -++ Keywords: -++ References: -++ Description: -++ A keyed dictionary is a dictionary of key-entry pairs for which there is -++ a unique entry for each key. -KeyedDictionary(Key:SetCategory, Entry:SetCategory): Category == - Dictionary Record(key:Key,entry:Entry) with - key?: (Key, %) -> Boolean - ++ key?(k,t) tests if k is a key in table t. - keys: % -> List Key - ++ keys(t) returns the list the keys in table t. - -- to become keys: % -> Key* and keys: % -> Iterator(Entry,Entry) - remove_!: (Key, %) -> Union(Entry,"failed") - ++ remove!(k,t) searches the table t for the key k removing - ++ (and return) the entry if there. - ++ If t has no such key, \axiom{remove!(k,t)} returns "failed". - search: (Key, %) -> Union(Entry,"failed") - ++ search(k,t) searches the table t for the key k, - ++ returning the entry stored in t for key k. - ++ If t has no such key, \axiom{search(k,t)} returns "failed". - add - key?(k, t) == search(k, t) case Entry - - member?(p, t) == - r := search(p.key, t) - r case Entry and r::Entry = p.entry - - if % has finiteAggregate then - keys t == [x.key for x in parts t] - -@ -<>= -"KDAGG" [color=lightblue,href="books/bookvol10.pamphlet"]; -"KDAGG" -> "DIAGG" - -@ -<>= -"KeyedDictionary(a:SetCategory,b:SetCategory)" - [color=lightblue,href="books/bookvol10.pamphlet"]; -"KeyedDictionary(a:SetCategory,b:SetCategory)" -> - "Dictionary(Record(a:SetCategory,b:SetCategory))" - -@ -\section{category LNAGG LinearAggregate} -<>= -)abbrev category LNAGG LinearAggregate -++ Author: Michael Monagan; revised by Manuel Bronstein and Richard Jenks -++ Date Created: August 87 through August 88 -++ Date Last Updated: April 1991 -++ Basic Operations: -++ Related Constructors: -++ Also See: -++ AMS Classifications: -++ Keywords: -++ References: -++ Description: -++ A linear aggregate is an aggregate whose elements are indexed by integers. -++ Examples of linear aggregates are strings, lists, and -++ arrays. -++ Most of the exported operations for linear aggregates are non-destructive -++ but are not always efficient for a particular aggregate. -++ For example, \spadfun{concat} of two lists needs only to copy its first -++ argument, whereas \spadfun{concat} of two arrays needs to copy both -++ arguments. Most of the operations exported here apply to infinite -++ objects (e.g. streams) as well to finite ones. -++ For finite linear aggregates, see \spadtype{FiniteLinearAggregate}. -LinearAggregate(S:Type): Category == - Join(IndexedAggregate(Integer, S), Collection(S)) with - new : (NonNegativeInteger,S) -> % - ++ new(n,x) returns \axiom{fill!(new n,x)}. - concat: (%,S) -> % - ++ concat(u,x) returns aggregate u with additional element x at the end. - ++ Note: for lists, \axiom{concat(u,x) == concat(u,[x])} - concat: (S,%) -> % - ++ concat(x,u) returns aggregate u with additional element at the front. - ++ Note: for lists: \axiom{concat(x,u) == concat([x],u)}. - concat: (%,%) -> % - ++ concat(u,v) returns an aggregate consisting of the elements of u - ++ followed by the elements of v. - ++ Note: if \axiom{w = concat(u,v)} then - ++ \axiom{w.i = u.i for i in indices u} - ++ and \axiom{w.(j + maxIndex u) = v.j for j in indices v}. - concat: List % -> % - ++ concat(u), where u is a lists of aggregates \axiom{[a,b,...,c]}, - ++ returns a single aggregate consisting of the elements of \axiom{a} - ++ followed by those - ++ of b followed ... by the elements of c. - ++ Note: \axiom{concat(a,b,...,c) = concat(a,concat(b,...,c))}. - map: ((S,S)->S,%,%) -> % - ++ map(f,u,v) returns a new collection w with elements \axiom{z = f(x,y)} - ++ for corresponding elements x and y from u and v. - ++ Note: for linear aggregates, \axiom{w.i = f(u.i,v.i)}. - elt: (%,UniversalSegment(Integer)) -> % - ++ elt(u,i..j) (also written: \axiom{a(i..j)}) returns the aggregate of - ++ elements \axiom{u} for k from i to j in that order. - ++ Note: in general, \axiom{a.s = [a.k for i in s]}. - delete: (%,Integer) -> % - ++ delete(u,i) returns a copy of u with the \axiom{i}th element deleted. - ++ Note: for lists, - ++ \axiom{delete(a,i) == concat(a(0..i - 1),a(i + 1,..))}. - delete: (%,UniversalSegment(Integer)) -> % - ++ delete(u,i..j) returns a copy of u with the \axiom{i}th through - ++ \axiom{j}th element deleted. - ++ Note: \axiom{delete(a,i..j) = concat(a(0..i-1),a(j+1..))}. - insert: (S,%,Integer) -> % - ++ insert(x,u,i) returns a copy of u having x as its \axiom{i}th element. - ++ Note: \axiom{insert(x,a,k) = concat(concat(a(0..k-1),x),a(k..))}. - insert: (%,%,Integer) -> % - ++ insert(v,u,k) returns a copy of u having v inserted beginning at the - ++ \axiom{i}th element. - ++ Note: \axiom{insert(v,u,k) = concat( u(0..k-1), v, u(k..) )}. - if % has shallowlyMutable then setelt: (%,UniversalSegment(Integer),S) -> S - ++ setelt(u,i..j,x) (also written: \axiom{u(i..j) := x}) destructively - ++ replaces each element in the segment \axiom{u(i..j)} by x. - ++ The value x is returned. - ++ Note: u is destructively change so - ++ that \axiom{u.k := x for k in i..j}; - ++ its length remains unchanged. - add - indices a == [i for i in minIndex a .. maxIndex a] - index?(i, a) == i >= minIndex a and i <= maxIndex a - concat(a:%, x:S) == concat(a, new(1, x)) - concat(x:S, y:%) == concat(new(1, x), y) - insert(x:S, a:%, i:Integer) == insert(new(1, x), a, i) - if % has finiteAggregate then - maxIndex l == #l - 1 + minIndex l - ---if % has shallowlyMutable then new(n, s) == fill_!(new n, s) - -@ -<>= -"LNAGG" [color=lightblue,href="books/bookvol10.pamphlet"]; -"LNAGG" -> "IXAGG" -"LNAGG" -> "CLAGG" - -@ -<>= -"LinearAggregate(a:Type)" [color=lightblue,href="books/bookvol10.pamphlet"]; -"LinearAggregate(a:Type)" -> "IndexedAggregate(b:Integer,a:Type)" -"LinearAggregate(a:Type)" -> "Collection(a:Type)" - -@ \section{LNAGG.lsp BOOTSTRAP} {\bf LNAGG} depends on a chain of files. We need to break this cycle to build the algebra. So we keep a cached copy of the translated {\bf LNAGG} @@ -4588,238 +6364,6 @@ Note that this code is not included in the generated catdef.spad file. 0 7 0 8 21 1 0 11 0 12 2 0 13 8 0 14 2 0 0 0 7 18 2 0 0 7 0 19)))))) (QUOTE |lookupComplete|))) @ -\section{category LSAGG ListAggregate} -<>= -)abbrev category LSAGG ListAggregate -++ Author: Michael Monagan; revised by Manuel Bronstein and Richard Jenks -++ Date Created: August 87 through August 88 -++ Date Last Updated: April 1991 -++ Basic Operations: -++ Related Constructors: -++ Also See: -++ AMS Classifications: -++ Keywords: -++ References: -++ Description: -++ A list aggregate is a model for a linked list data structure. -++ A linked list is a versatile -++ data structure. Insertion and deletion are efficient and -++ searching is a linear operation. -ListAggregate(S:Type): Category == Join(StreamAggregate S, - FiniteLinearAggregate S, ExtensibleLinearAggregate S) with - list: S -> % - ++ list(x) returns the list of one element x. - add - cycleMax ==> 1000 - - mergeSort: ((S, S) -> Boolean, %, Integer) -> % - - sort_!(f, l) == mergeSort(f, l, #l) - list x == concat(x, empty()) - reduce(f, x) == - empty? x => error "reducing over an empty list needs the 3 argument form" - reduce(f, rest x, first x) - merge(f, p, q) == merge_!(f, copy p, copy q) - - select_!(f, x) == - while not empty? x and not f first x repeat x := rest x - empty? x => x - y := x - z := rest y - while not empty? z repeat - if f first z then (y := z; z := rest z) - else (z := rest z; setrest_!(y, z)) - x - - merge_!(f, p, q) == - empty? p => q - empty? q => p - eq?(p, q) => error "cannot merge a list into itself" - if f(first p, first q) - then (r := t := p; p := rest p) - else (r := t := q; q := rest q) - while not empty? p and not empty? q repeat - if f(first p, first q) - then (setrest_!(t, p); t := p; p := rest p) - else (setrest_!(t, q); t := q; q := rest q) - setrest_!(t, if empty? p then q else p) - r - - insert_!(s:S, x:%, i:Integer) == - i < (m := minIndex x) => error "index out of range" - i = m => concat(s, x) - y := rest(x, (i - 1 - m)::NonNegativeInteger) - z := rest y - setrest_!(y, concat(s, z)) - x - - insert_!(w:%, x:%, i:Integer) == - i < (m := minIndex x) => error "index out of range" - i = m => concat_!(w, x) - y := rest(x, (i - 1 - m)::NonNegativeInteger) - z := rest y - setrest_!(y, w) - concat_!(y, z) - x - - remove_!(f:S -> Boolean, x:%) == - while not empty? x and f first x repeat x := rest x - empty? x => x - p := x - q := rest x - while not empty? q repeat - if f first q then q := setrest_!(p, rest q) - else (p := q; q := rest q) - x - - delete_!(x:%, i:Integer) == - i < (m := minIndex x) => error "index out of range" - i = m => rest x - y := rest(x, (i - 1 - m)::NonNegativeInteger) - setrest_!(y, rest(y, 2)) - x - - delete_!(x:%, i:UniversalSegment(Integer)) == - (l := lo i) < (m := minIndex x) => error "index out of range" - h := if hasHi i then hi i else maxIndex x - h < l => x - l = m => rest(x, (h + 1 - m)::NonNegativeInteger) - t := rest(x, (l - 1 - m)::NonNegativeInteger) - setrest_!(t, rest(t, (h - l + 2)::NonNegativeInteger)) - x - - find(f, x) == - while not empty? x and not f first x repeat x := rest x - empty? x => "failed" - first x - - position(f:S -> Boolean, x:%) == - for k in minIndex(x).. while not empty? x and not f first x repeat - x := rest x - empty? x => minIndex(x) - 1 - k - - mergeSort(f, p, n) == - if n = 2 and f(first rest p, first p) then p := reverse_! p - n < 3 => p - l := (n quo 2)::NonNegativeInteger - q := split_!(p, l) - p := mergeSort(f, p, l) - q := mergeSort(f, q, n - l) - merge_!(f, p, q) - - sorted?(f, l) == - empty? l => true - p := rest l - while not empty? p repeat - not f(first l, first p) => return false - p := rest(l := p) - true - - reduce(f, x, i) == - r := i - while not empty? x repeat (r := f(r, first x); x := rest x) - r - - if S has SetCategory then - reduce(f, x, i,a) == - r := i - while not empty? x and r ^= a repeat - r := f(r, first x) - x := rest x - r - - new(n, s) == - l := empty() - for k in 1..n repeat l := concat(s, l) - l - - map(f, x, y) == - z := empty() - while not empty? x and not empty? y repeat - z := concat(f(first x, first y), z) - x := rest x - y := rest y - reverse_! z - --- map(f, x, y, d) == --- z := empty() --- while not empty? x and not empty? y repeat --- z := concat(f(first x, first y), z) --- x := rest x --- y := rest y --- z := reverseInPlace z --- if not empty? x then --- z := concat_!(z, map(f(#1, d), x)) --- if not empty? y then --- z := concat_!(z, map(f(d, #1), y)) --- z - - reverse_! x == - empty? x => x - empty?(y := rest x) => x - setrest_!(x, empty()) - while not empty? y repeat - z := rest y - setrest_!(y, x) - x := y - y := z - x - - copy x == - y := empty() - for k in 0.. while not empty? x repeat - k = cycleMax and cyclic? x => error "cyclic list" - y := concat(first x, y) - x := rest x - reverse_! y - - copyInto_!(y, x, s) == - s < (m := minIndex y) => error "index out of range" - z := rest(y, (s - m)::NonNegativeInteger) - while not empty? z and not empty? x repeat - setfirst_!(z, first x) - x := rest x - z := rest z - y - - if S has SetCategory then - position(w, x, s) == - s < (m := minIndex x) => error "index out of range" - x := rest(x, (s - m)::NonNegativeInteger) - for k in s.. while not empty? x and w ^= first x repeat - x := rest x - empty? x => minIndex x - 1 - k - - removeDuplicates_! l == - p := l - while not empty? p repeat - p := setrest_!(p, remove_!(#1 = first p, rest p)) - l - - if S has OrderedSet then - x < y == - while not empty? x and not empty? y repeat - first x ^= first y => return(first x < first y) - x := rest x - y := rest y - empty? x => not empty? y - false - -@ -<>= -"LSAGG" [color=lightblue,href="books/bookvol10.pamphlet"]; -"LSAGG" -> "FLAGG" -"LSAGG" -> "ELAGG" - -@ -<>= -"ListAggregate(a:Type)" [color=lightblue,href="books/bookvol10.pamphlet"]; -"ListAggregate(a:Type)" -> "FiniteLinearAggregate(a:Type)" -"ListAggregate(a:Type)" -> "ExtensibleLinearAggregate(a:Type)" - -@ \section{LSAGG.lsp BOOTSTRAP} {\bf LSAGG} depends on a chain of files. We need to break this cycle to build the algebra. So we keep a cached copy of the translated {\bf LSAGG} @@ -5727,297 +7271,6 @@ Note that this code is not included in the generated catdef.spad file. 0 0 57 2 0 15 0 0 64)))))) (QUOTE |lookupComplete|))) @ -\section{category MDAGG MultiDictionary} -<>= -)abbrev category MDAGG MultiDictionary -++ Author: Michael Monagan; revised by Manuel Bronstein and Richard Jenks -++ Date Created: August 87 through August 88 -++ Date Last Updated: April 1991 -++ Basic Operations: -++ Related Constructors: -++ Also See: -++ AMS Classifications: -++ Keywords: -++ References: -++ Description: -++ A multi-dictionary is a dictionary which may contain duplicates. -++ As for any dictionary, its size is assumed large so that -++ copying (non-destructive) operations are generally to be avoided. -MultiDictionary(S:SetCategory): Category == DictionaryOperations S with --- count: (S,%) -> NonNegativeInteger ++ multiplicity count - insert_!: (S,%,NonNegativeInteger) -> % - ++ insert!(x,d,n) destructively inserts n copies of x into dictionary d. --- remove_!: (S,%,NonNegativeInteger) -> % --- ++ remove!(x,d,n) destructively removes (up to) n copies of x from --- ++ dictionary d. - removeDuplicates_!: % -> % - ++ removeDuplicates!(d) destructively removes any duplicate values - ++ in dictionary d. - duplicates: % -> List Record(entry:S,count:NonNegativeInteger) - ++ duplicates(d) returns a list of values which have duplicates in d --- ++ duplicates(d) returns a list of ++ duplicates iterator --- to become duplicates: % -> Iterator(D,D) - -@ -<>= -"MDAGG" [color=lightblue,href="books/bookvol10.pamphlet"]; -"MDAGG" -> "DIOPS" - -@ -<>= -"MultiDictionary(a:SetCategory)" - [color=lightblue,href="books/bookvol10.pamphlet"]; -"MultiDictionary(a:SetCategory)" -> "DictionaryOperations(a:SetCategory)" - -@ -\section{category MSETAGG MultisetAggregate} -<>= -)abbrev category MSETAGG MultisetAggregate -++ Author: Michael Monagan; revised by Manuel Bronstein and Richard Jenks -++ Date Created: August 87 through August 88 -++ Date Last Updated: April 1991 -++ Basic Operations: -++ Related Constructors: -++ Also See: -++ AMS Classifications: -++ Keywords: -++ References: -++ Description: -++ A multi-set aggregate is a set which keeps track of the multiplicity -++ of its elements. -MultisetAggregate(S:SetCategory): - Category == Join(MultiDictionary S, SetAggregate S) - -@ -<>= -"MSETAGG" [color=lightblue,href="books/bookvol10.pamphlet"]; -"MSETAGG" -> "MDAGG" -"MSETAGG" -> "SETAGG" - -@ -<>= -"MultisetAggregate(a:SetCategory)" - [color=lightblue,href="books/bookvol10.pamphlet"]; -"MultisetAggregate(a:SetCategory)" -> "MultiDictionary(a:SetCategory)" -"MultisetAggregate(a:SetCategory)" -> "SetAggregate(a:SetCategory)" - -@ -\section{category OMSAGG OrderedMultisetAggregate} -<>= -)abbrev category OMSAGG OrderedMultisetAggregate -++ Author: Michael Monagan; revised by Manuel Bronstein and Richard Jenks -++ Date Created: August 87 through August 88 -++ Date Last Updated: April 1991 -++ Basic Operations: -++ Related Constructors: -++ Also See: -++ AMS Classifications: -++ Keywords: -++ References: -++ Description: -++ An ordered-multiset aggregate is a multiset built over an ordered set S -++ so that the relative sizes of its entries can be assessed. -++ These aggregates serve as models for priority queues. -OrderedMultisetAggregate(S:OrderedSet): Category == - Join(MultisetAggregate S,PriorityQueueAggregate S) with - -- max: % -> S ++ smallest entry in the set - -- duplicates: % -> List Record(entry:S,count:NonNegativeInteger) - ++ to become an in order iterator - -- parts: % -> List S ++ in order iterator - min: % -> S - ++ min(u) returns the smallest entry in the multiset aggregate u. - -@ -<>= -"OMSAGG" [color=lightblue,href="books/bookvol10.pamphlet"]; -"OMSAGG" -> "MSETAGG" -"OMSAGG" -> "PRQAGG" - -@ -<>= -"OrderedMultisetAggregate(a:SetCategory)" - [color=lightblue,href="books/bookvol10.pamphlet"]; -"OrderedMultisetAggregate(a:SetCategory)" -> "MultisetAggregate(a:SetCategory)" -"OrderedMultisetAggregate(a:SetCategory)" -> - "PriorityQueueAggregate(a:SetCategory)" - -@ -\section{category PRQAGG PriorityQueueAggregate} -<>= -)abbrev category PRQAGG PriorityQueueAggregate -++ Author: Michael Monagan; revised by Manuel Bronstein and Richard Jenks -++ Date Created: August 87 through August 88 -++ Date Last Updated: April 1991 -++ Basic Operations: -++ Related Constructors: -++ Also See: -++ AMS Classifications: -++ Keywords: -++ References: -++ Description: -++ A priority queue is a bag of items from an ordered set where the item -++ extracted is always the maximum element. -PriorityQueueAggregate(S:OrderedSet): Category == BagAggregate S with - finiteAggregate - max: % -> S - ++ max(q) returns the maximum element of priority queue q. - merge: (%,%) -> % - ++ merge(q1,q2) returns combines priority queues q1 and q2 to return - ++ a single priority queue q. - merge_!: (%,%) -> % - ++ merge!(q,q1) destructively changes priority queue q to include the - ++ values from priority queue q1. - -@ -<>= -"PRQAGG" [color=lightblue,href="books/bookvol10.pamphlet"]; -"PRQAGG" -> "BGAGG" - -@ -<>= -"PriorityQueueAggregate(a:Type)" - [color=lightblue,href="books/bookvol10.pamphlet"]; -"PriorityQueueAggregate(a:Type)" -> "BagAggregate(a:Type)" - -"PriorityQueueAggregate(a:SetCategory)" - [color=seagreen,href="books/bookvol10.pamphlet"]; -"PriorityQueueAggregate(a:SetCategory)" -> "PriorityQueueAggregate(a:Type)" - -"PriorityQueueAggregate(a:OrderedSet)" - [color=seagreen,href="books/bookvol10.pamphlet"]; -"PriorityQueueAggregate(a:OrderedSet)" -> - "PriorityQueueAggregate(a:SetCategory)" - -@ -\section{category QUAGG QueueAggregate} -<>= -)abbrev category QUAGG QueueAggregate -++ Author: Michael Monagan; revised by Manuel Bronstein and Richard Jenks -++ Date Created: August 87 through August 88 -++ Date Last Updated: April 1991 -++ Basic Operations: -++ Related Constructors: -++ Also See: -++ AMS Classifications: -++ Keywords: -++ References: -++ Description: -++ A queue is a bag where the first item inserted is the first item extracted. -QueueAggregate(S:Type): Category == BagAggregate S with - finiteAggregate - enqueue_!: (S, %) -> S - ++ enqueue!(x,q) inserts x into the queue q at the back end. - dequeue_!: % -> S - ++ dequeue! s destructively extracts the first (top) element from queue q. - ++ The element previously second in the queue becomes the first element. - ++ Error: if q is empty. - rotate_!: % -> % - ++ rotate! q rotates queue q so that the element at the front of - ++ the queue goes to the back of the queue. - ++ Note: rotate! q is equivalent to enqueue!(dequeue!(q)). - length: % -> NonNegativeInteger - ++ length(q) returns the number of elements in the queue. - ++ Note: \axiom{length(q) = #q}. - front: % -> S - ++ front(q) returns the element at the front of the queue. - ++ The queue q is unchanged by this operation. - ++ Error: if q is empty. - back: % -> S - ++ back(q) returns the element at the back of the queue. - ++ The queue q is unchanged by this operation. - ++ Error: if q is empty. - -@ -<>= -"QUAGG" [color=lightblue,href="books/bookvol10.pamphlet"]; -"QUAGG" -> "BGAGG" - -@ -<>= -"QueueAggregate(a:Type)" [color=lightblue,href="books/bookvol10.pamphlet"]; -"QueueAggregate(a:Type)" -> "BagAggregate(a:Type)" - -"QueueAggregate(a:SetCategory)" - [color=seagreen,href="books/bookvol10.pamphlet"]; -"QueueAggregate(a:SetCategory)" -> "QueueAggregate(a:Type)" - -@ -\section{category RCAGG RecursiveAggregate} -<>= -)abbrev category RCAGG RecursiveAggregate -++ Author: Michael Monagan; revised by Manuel Bronstein and Richard Jenks -++ Date Created: August 87 through August 88 -++ Date Last Updated: April 1991 -++ Basic Operations: -++ Related Constructors: -++ Also See: -++ AMS Classifications: -++ Keywords: -++ References: -++ Description: -++ A recursive aggregate over a type S is a model for a -++ a directed graph containing values of type S. -++ Recursively, a recursive aggregate is a {\em node} -++ consisting of a \spadfun{value} from S and 0 or more \spadfun{children} -++ which are recursive aggregates. -++ A node with no children is called a \spadfun{leaf} node. -++ A recursive aggregate may be cyclic for which some operations as noted -++ may go into an infinite loop. -RecursiveAggregate(S:Type): Category == HomogeneousAggregate(S) with - children: % -> List % - ++ children(u) returns a list of the children of aggregate u. - -- should be % -> %* and also needs children: % -> Iterator(S,S) - nodes: % -> List % - ++ nodes(u) returns a list of all of the nodes of aggregate u. - -- to become % -> %* and also nodes: % -> Iterator(S,S) - leaf?: % -> Boolean - ++ leaf?(u) tests if u is a terminal node. - value: % -> S - ++ value(u) returns the value of the node u. - elt: (%,"value") -> S - ++ elt(u,"value") (also written: \axiom{a. value}) is - ++ equivalent to \axiom{value(a)}. - cyclic?: % -> Boolean - ++ cyclic?(u) tests if u has a cycle. - leaves: % -> List S - ++ leaves(t) returns the list of values in obtained by visiting the - ++ nodes of tree \axiom{t} in left-to-right order. - distance: (%,%) -> Integer - ++ distance(u,v) returns the path length (an integer) from node u to v. - if S has SetCategory then - child?: (%,%) -> Boolean - ++ child?(u,v) tests if node u is a child of node v. - node?: (%,%) -> Boolean - ++ node?(u,v) tests if node u is contained in node v - ++ (either as a child, a child of a child, etc.). - if % has shallowlyMutable then - setchildren_!: (%,List %)->% - ++ setchildren!(u,v) replaces the current children of node u - ++ with the members of v in left-to-right order. - setelt: (%,"value",S) -> S - ++ setelt(a,"value",x) (also written \axiom{a . value := x}) - ++ is equivalent to \axiom{setvalue!(a,x)} - setvalue_!: (%,S) -> S - ++ setvalue!(u,x) sets the value of node u to x. - add - elt(x,"value") == value x - if % has shallowlyMutable then - setelt(x,"value",y) == setvalue_!(x,y) - if S has SetCategory then - child?(x,l) == member?(x,children(l)) - -@ -<>= -"RCAGG" [color=lightblue,href="books/bookvol10.pamphlet"]; -"RCAGG" -> "HOAGG" - -@ -<>= -"RecursiveAggregate(a:Type)" - [color=lightblue,href="books/bookvol10.pamphlet"]; -"RecursiveAggregate(a:Type)" -> "HomogeneousAggregate(a:Type)" - -@ \section{RCAGG.lsp BOOTSTRAP} {\bf RCAGG} depends on a chain of files. We need to break this cycle to build the algebra. So we keep a cached copy of the translated {\bf RCAGG} @@ -6155,99 +7408,6 @@ Note that this code is not included in the generated catdef.spad file. 10 2 0 15 0 0 18)))))) (QUOTE |lookupComplete|))) @ -\section{category SETAGG SetAggregate} -<>= -)abbrev category SETAGG SetAggregate -++ Author: Michael Monagan; revised by Manuel Bronstein and Richard Jenks -++ Date Created: August 87 through August 88 -++ Date Last Updated: 14 Oct, 1993 by RSS -++ Basic Operations: -++ Related Constructors: -++ Also See: -++ AMS Classifications: -++ Keywords: -++ References: -++ Description: -++ A set category lists a collection of set-theoretic operations -++ useful for both finite sets and multisets. -++ Note however that finite sets are distinct from multisets. -++ Although the operations defined for set categories are -++ common to both, the relationship between the two cannot -++ be described by inclusion or inheritance. -SetAggregate(S:SetCategory): - Category == Join(SetCategory, Collection(S)) with - partiallyOrderedSet - "<" : (%, %) -> Boolean - ++ s < t returns true if all elements of set aggregate s are also - ++ elements of set aggregate t. - brace : () -> % - ++ brace()$D (otherwise written {}$D) - ++ creates an empty set aggregate of type D. - ++ This form is considered obsolete. Use \axiomFun{set} instead. - brace : List S -> % - ++ brace([x,y,...,z]) - ++ creates a set aggregate containing items x,y,...,z. - ++ This form is considered obsolete. Use \axiomFun{set} instead. - set : () -> % - ++ set()$D creates an empty set aggregate of type D. - set : List S -> % - ++ set([x,y,...,z]) creates a set aggregate containing items x,y,...,z. - intersect: (%, %) -> % - ++ intersect(u,v) returns the set aggregate w consisting of - ++ elements common to both set aggregates u and v. - ++ Note: equivalent to the notation (not currently supported) - ++ {x for x in u | member?(x,v)}. - difference : (%, %) -> % - ++ difference(u,v) returns the set aggregate w consisting of - ++ elements in set aggregate u but not in set aggregate v. - ++ If u and v have no elements in common, \axiom{difference(u,v)} - ++ returns a copy of u. - ++ Note: equivalent to the notation (not currently supported) - ++ \axiom{{x for x in u | not member?(x,v)}}. - difference : (%, S) -> % - ++ difference(u,x) returns the set aggregate u with element x removed. - ++ If u does not contain x, a copy of u is returned. - ++ Note: \axiom{difference(s, x) = difference(s, {x})}. - symmetricDifference : (%, %) -> % - ++ symmetricDifference(u,v) returns the set aggregate of elements x which - ++ are members of set aggregate u or set aggregate v but not both. - ++ If u and v have no elements in common, \axiom{symmetricDifference(u,v)} - ++ returns a copy of u. - ++ Note: \axiom{symmetricDifference(u,v) = - ++ union(difference(u,v),difference(v,u))} - subset? : (%, %) -> Boolean - ++ subset?(u,v) tests if u is a subset of v. - ++ Note: equivalent to - ++ \axiom{reduce(and,{member?(x,v) for x in u},true,false)}. - union : (%, %) -> % - ++ union(u,v) returns the set aggregate of elements which are members - ++ of either set aggregate u or v. - union : (%, S) -> % - ++ union(u,x) returns the set aggregate u with the element x added. - ++ If u already contains x, \axiom{union(u,x)} returns a copy of u. - union : (S, %) -> % - ++ union(x,u) returns the set aggregate u with the element x added. - ++ If u already contains x, \axiom{union(x,u)} returns a copy of u. - add - symmetricDifference(x, y) == union(difference(x, y), difference(y, x)) - union(s:%, x:S) == union(s, {x}) - union(x:S, s:%) == union(s, {x}) - difference(s:%, x:S) == difference(s, {x}) - -@ -<>= -"SETAGG" [color=lightblue,href="books/bookvol10.pamphlet"]; -"SETAGG" -> "SETCAT" -"SETAGG" -> "CLAGG" - -@ -<>= -"SetAggregate(a:SetCategory)" - [color=lightblue,href="books/bookvol10.pamphlet"]; -"SetAggregate(a:SetCategory)" -> "SetCategory()" -"SetAggregate(a:SetCategory)" -> "Collection(a:SetCategory)" - -@ \section{SETAGG.lsp BOOTSTRAP} {\bf SETAGG} depends on a chain of files. We need to break this cycle to build the algebra. So we keep a cached copy of the translated {\bf SETAGG} @@ -6376,282 +7536,6 @@ Note that this code is not included in the generated catdef.spad file. 0 0 7 0 14 2 0 0 0 7 13 2 0 0 0 0 10 2 0 0 0 7 15)))))) (QUOTE |lookupComplete|))) @ -\section{category SKAGG StackAggregate} -<>= -)abbrev category SKAGG StackAggregate -++ Author: Michael Monagan; revised by Manuel Bronstein and Richard Jenks -++ Date Created: August 87 through August 88 -++ Date Last Updated: April 1991 -++ Basic Operations: -++ Related Constructors: -++ Also See: -++ AMS Classifications: -++ Keywords: -++ References: -++ Description: -++ A stack is a bag where the last item inserted is the first item extracted. -StackAggregate(S:Type): Category == BagAggregate S with - finiteAggregate - push_!: (S,%) -> S - ++ push!(x,s) pushes x onto stack s, i.e. destructively changing s - ++ so as to have a new first (top) element x. - ++ Afterwards, pop!(s) produces x and pop!(s) produces the original s. - pop_!: % -> S - ++ pop!(s) returns the top element x, destructively removing x from s. - ++ Note: Use \axiom{top(s)} to obtain x without removing it from s. - ++ Error: if s is empty. - top: % -> S - ++ top(s) returns the top element x from s; s remains unchanged. - ++ Note: Use \axiom{pop!(s)} to obtain x and remove it from s. - depth: % -> NonNegativeInteger - ++ depth(s) returns the number of elements of stack s. - ++ Note: \axiom{depth(s) = #s}. - - -@ -<>= -"SKAGG" [color=lightblue,href="books/bookvol10.pamphlet"]; -"SKAGG" -> "BGAGG" - -@ -<>= -"StackAggregate(a:Type)" [color=lightblue,href="books/bookvol10.pamphlet"]; -"StackAggregate(a:Type)" -> "BagAggregate(a:Type)" - -"StackAggregate(a:SetCategory)" - [color=seagreen,href="books/bookvol10.pamphlet"]; -"StackAggregate(a:SetCategory)" -> "StackAggregate(a:Type)" - -@ -\section{category SRAGG StringAggregate} -<>= -)abbrev category SRAGG StringAggregate -++ Author: Stephen Watt and Michael Monagan. -++ revised by Manuel Bronstein and Richard Jenks -++ Date Created: August 87 through August 88 -++ Date Last Updated: April 1991 -++ Basic Operations: -++ Related Constructors: -++ Also See: -++ AMS Classifications: -++ Keywords: -++ References: -++ Description: -++ A string aggregate is a category for strings, that is, -++ one dimensional arrays of characters. -StringAggregate: Category == OneDimensionalArrayAggregate Character with - lowerCase : % -> % - ++ lowerCase(s) returns the string with all characters in lower case. - lowerCase_!: % -> % - ++ lowerCase!(s) destructively replaces the alphabetic characters - ++ in s by lower case. - upperCase : % -> % - ++ upperCase(s) returns the string with all characters in upper case. - upperCase_!: % -> % - ++ upperCase!(s) destructively replaces the alphabetic characters - ++ in s by upper case characters. - prefix? : (%, %) -> Boolean - ++ prefix?(s,t) tests if the string s is the initial substring of t. - ++ Note: \axiom{prefix?(s,t) == - ++ reduce(and,[s.i = t.i for i in 0..maxIndex s])}. - suffix? : (%, %) -> Boolean - ++ suffix?(s,t) tests if the string s is the final substring of t. - ++ Note: \axiom{suffix?(s,t) == - ++ reduce(and,[s.i = t.(n - m + i) for i in 0..maxIndex s])} - ++ where m and n denote the maxIndex of s and t respectively. - substring?: (%, %, Integer) -> Boolean - ++ substring?(s,t,i) tests if s is a substring of t beginning at - ++ index i. - ++ Note: \axiom{substring?(s,t,0) = prefix?(s,t)}. - match: (%, %, Character) -> NonNegativeInteger - ++ match(p,s,wc) tests if pattern \axiom{p} matches subject \axiom{s} - ++ where \axiom{wc} is a wild card character. If no match occurs, - ++ the index \axiom{0} is returned; otheriwse, the value returned - ++ is the first index of the first character in the subject matching - ++ the subject (excluding that matched by an initial wild-card). - ++ For example, \axiom{match("*to*","yorktown","*")} returns \axiom{5} - ++ indicating a successful match starting at index \axiom{5} of - ++ \axiom{"yorktown"}. - match?: (%, %, Character) -> Boolean - ++ match?(s,t,c) tests if s matches t except perhaps for - ++ multiple and consecutive occurrences of character c. - ++ Typically c is the blank character. - replace : (%, UniversalSegment(Integer), %) -> % - ++ replace(s,i..j,t) replaces the substring \axiom{s(i..j)} - ++ of s by string t. - position : (%, %, Integer) -> Integer - ++ position(s,t,i) returns the position j of the substring s in string t, - ++ where \axiom{j >= i} is required. - position : (CharacterClass, %, Integer) -> Integer - ++ position(cc,t,i) returns the position \axiom{j >= i} in t of - ++ the first character belonging to cc. - coerce : Character -> % - ++ coerce(c) returns c as a string s with the character c. - - split: (%, Character) -> List % - ++ split(s,c) returns a list of substrings delimited by character c. - split: (%, CharacterClass) -> List % - ++ split(s,cc) returns a list of substrings delimited by - ++ characters in cc. - - trim: (%, Character) -> % - ++ trim(s,c) returns s with all characters c deleted from right - ++ and left ends. - ++ For example, \axiom{trim(" abc ", char " ")} returns \axiom{"abc"}. - trim: (%, CharacterClass) -> % - ++ trim(s,cc) returns s with all characters in cc deleted from right - ++ and left ends. - ++ For example, \axiom{trim("(abc)", charClass "()")} - ++ returns \axiom{"abc"}. - leftTrim: (%, Character) -> % - ++ leftTrim(s,c) returns s with all leading characters c deleted. - ++ For example, \axiom{leftTrim(" abc ", char " ")} - ++ returns \axiom{"abc "}. - leftTrim: (%, CharacterClass) -> % - ++ leftTrim(s,cc) returns s with all leading characters in cc deleted. - ++ For example, \axiom{leftTrim("(abc)", charClass "()")} - ++ returns \axiom{"abc)"}. - rightTrim: (%, Character) -> % - ++ rightTrim(s,c) returns s with all trailing occurrences of c deleted. - ++ For example, \axiom{rightTrim(" abc ", char " ")} - ++ returns \axiom{" abc"}. - rightTrim: (%, CharacterClass) -> % - ++ rightTrim(s,cc) returns s with all trailing occurences of - ++ characters in cc deleted. - ++ For example, \axiom{rightTrim("(abc)", charClass "()")} - ++ returns \axiom{"(abc"}. - elt: (%, %) -> % - ++ elt(s,t) returns the concatenation of s and t. It is provided to - ++ allow juxtaposition of strings to work as concatenation. - ++ For example, \axiom{"smoo" "shed"} returns \axiom{"smooshed"}. - add - trim(s: %, c: Character) == leftTrim(rightTrim(s, c), c) - trim(s: %, cc: CharacterClass) == leftTrim(rightTrim(s, cc), cc) - - lowerCase s == lowerCase_! copy s - upperCase s == upperCase_! copy s - prefix?(s, t) == substring?(s, t, minIndex t) - coerce(c:Character):% == new(1, c) - elt(s:%, t:%): % == concat(s,t)$% - -@ -<>= -"SRAGG" [color=lightblue,href="books/bookvol10.pamphlet"]; -"SRAGG" -> "A1AGG" - -@ -<>= -"StringAggregate()" [color=lightblue,href="books/bookvol10.pamphlet"]; -"StringAggregate()" -> "OneDimensionalArrayAggregate(Character)" - -@ -\section{category STAGG StreamAggregate} -<>= -)abbrev category STAGG StreamAggregate -++ Author: Michael Monagan; revised by Manuel Bronstein and Richard Jenks -++ Date Created: August 87 through August 88 -++ Date Last Updated: April 1991 -++ Basic Operations: -++ Related Constructors: -++ Also See: -++ AMS Classifications: -++ Keywords: -++ References: -++ Description: -++ A stream aggregate is a linear aggregate which possibly has an infinite -++ number of elements. A basic domain constructor which builds stream -++ aggregates is \spadtype{Stream}. From streams, a number of infinite -++ structures such power series can be built. A stream aggregate may -++ also be infinite since it may be cyclic. -++ For example, see \spadtype{DecimalExpansion}. -StreamAggregate(S:Type): Category == - Join(UnaryRecursiveAggregate S, LinearAggregate S) with - explicitlyFinite?: % -> Boolean - ++ explicitlyFinite?(s) tests if the stream has a finite - ++ number of elements, and false otherwise. - ++ Note: for many datatypes, - ++ \axiom{explicitlyFinite?(s) = not possiblyInfinite?(s)}. - possiblyInfinite?: % -> Boolean - ++ possiblyInfinite?(s) tests if the stream s could possibly - ++ have an infinite number of elements. - ++ Note: for many datatypes, - ++ \axiom{possiblyInfinite?(s) = not explictlyFinite?(s)}. - add - c2: (%, %) -> S - - explicitlyFinite? x == not cyclic? x - possiblyInfinite? x == cyclic? x - first(x, n) == construct [c2(x, x := rest x) for i in 1..n] - - c2(x, r) == - empty? x => error "Index out of range" - first x - - elt(x:%, i:Integer) == - i := i - minIndex x - (i < 0) or empty?(x := rest(x, i::NonNegativeInteger)) => _ - error "index out of range" - first x - - elt(x:%, i:UniversalSegment(Integer)) == - l := lo(i) - minIndex x - l < 0 => error "index out of range" - not hasHi i => copy(rest(x, l::NonNegativeInteger)) - (h := hi(i) - minIndex x) < l => empty() - first(rest(x, l::NonNegativeInteger), (h - l + 1)::NonNegativeInteger) - - if % has shallowlyMutable then - concat(x:%, y:%) == concat_!(copy x, y) - - concat l == - empty? l => empty() - concat_!(copy first l, concat rest l) - - map_!(f, l) == - y := l - while not empty? l repeat - setfirst_!(l, f first l) - l := rest l - y - - fill_!(x, s) == - y := x - while not empty? y repeat (setfirst_!(y, s); y := rest y) - x - - setelt(x:%, i:Integer, s:S) == - i := i - minIndex x - (i < 0) or empty?(x := rest(x,i::NonNegativeInteger)) => _ - error "index out of range" - setfirst_!(x, s) - - setelt(x:%, i:UniversalSegment(Integer), s:S) == - (l := lo(i) - minIndex x) < 0 => error "index out of range" - h := if hasHi i then hi(i) - minIndex x else maxIndex x - h < l => s - y := rest(x, l::NonNegativeInteger) - z := rest(y, (h - l + 1)::NonNegativeInteger) - while not eq?(y, z) repeat (setfirst_!(y, s); y := rest y) - s - - concat_!(x:%, y:%) == - empty? x => y - setrest_!(tail x, y) - x - -@ -<>= -"STAGG" [color=lightblue,href="books/bookvol10.pamphlet"]; -"STAGG" -> "RCAGG" -"STAGG" -> "LNAGG" - -@ -<>= -"StreamAggregate(a:Type)" [color=lightblue,href="books/bookvol10.pamphlet"]; -"StreamAggregate(a:Type)" -> "RecursiveAggregate(a:Type)" -"StreamAggregate(a:Type)" -> "LinearAggregate(a:Type)" - -@ \section{STAGG.lsp BOOTSTRAP} {\bf STAGG} depends on a chain of files. We need to break this cycle to build the algebra. So we keep a cached copy of the translated {\bf STAGG} @@ -7026,428 +7910,6 @@ Note that this code is not included in the generated catdef.spad file. 0 19 22 2 0 0 0 23 30 2 0 0 0 0 46 1 0 0 33 35 2 0 0 0 0 32)))))) (QUOTE |lookupComplete|))) @ -\section{category TBAGG TableAggregate} -<>= -)abbrev category TBAGG TableAggregate -++ Author: Michael Monagan, Stephen Watt; revised by Manuel Bronstein and Richard Jenks -++ Date Created: August 87 through August 88 -++ Date Last Updated: April 1991 -++ Basic Operations: -++ Related Constructors: -++ Also See: -++ AMS Classifications: -++ Keywords: -++ References: -++ Description: -++ A table aggregate is a model of a table, i.e. a discrete many-to-one -++ mapping from keys to entries. -TableAggregate(Key:SetCategory, Entry:SetCategory): Category == - Join(KeyedDictionary(Key,Entry),IndexedAggregate(Key,Entry)) with - setelt: (%,Key,Entry) -> Entry -- setelt_! later - ++ setelt(t,k,e) (also written \axiom{t.k := e}) is equivalent - ++ to \axiom{(insert([k,e],t); e)}. - table: () -> % - ++ table()$T creates an empty table of type T. - ++ - ++E Data:=Record(age:Integer,gender:String) - ++E a1:AssociationList(String,Data):=table() - ++E a1."tim":=[55,"male"]$Data - - table: List Record(key:Key,entry:Entry) -> % - ++ table([x,y,...,z]) creates a table consisting of entries - ++ \axiom{x,y,...,z}. - -- to become table: Record(key:Key,entry:Entry)* -> % - map: ((Entry, Entry) -> Entry, %, %) -> % - ++ map(fn,t1,t2) creates a new table t from given tables t1 and t2 with - ++ elements fn(x,y) where x and y are corresponding elements from t1 - ++ and t2 respectively. - add - table() == empty() - table l == dictionary l --- empty() == dictionary() - - insert_!(p, t) == (t(p.key) := p.entry; t) - indices t == keys t - - coerce(t:%):OutputForm == - prefix("table"::OutputForm, - [k::OutputForm = (t.k)::OutputForm for k in keys t]) - - elt(t, k) == - (r := search(k, t)) case Entry => r::Entry - error "key not in table" - - elt(t, k, e) == - (r := search(k, t)) case Entry => r::Entry - e - - map_!(f, t) == - for k in keys t repeat t.k := f t.k - t - - map(f:(Entry, Entry) -> Entry, s:%, t:%) == - z := table() - for k in keys s | key?(k, t) repeat z.k := f(s.k, t.k) - z - --- map(f, s, t, x) == --- z := table() --- for k in keys s repeat z.k := f(s.k, t(k, x)) --- for k in keys t | not key?(k, s) repeat z.k := f(t.k, x) --- z - - if % has finiteAggregate then - parts(t:%):List Record(key:Key,entry:Entry) == [[k, t.k] for k in keys t] - parts(t:%):List Entry == [t.k for k in keys t] - entries(t:%):List Entry == parts(t) - - s:% = t:% == - eq?(s,t) => true - #s ^= #t => false - for k in keys s repeat - (e := search(k, t)) case "failed" or (e::Entry) ^= s.k => return false - true - - map(f: Record(key:Key,entry:Entry)->Record(key:Key,entry:Entry),t:%):%== - z := table() - for k in keys t repeat - ke: Record(key:Key,entry:Entry) := f [k, t.k] - z ke.key := ke.entry - z - map_!(f: Record(key:Key,entry:Entry)->Record(key:Key,entry:Entry),t:%):%_ - == - lke: List Record(key:Key,entry:Entry) := nil() - for k in keys t repeat - lke := cons(f [k, remove_!(k,t)::Entry], lke) - for ke in lke repeat - t ke.key := ke.entry - t - - inspect(t: %): Record(key:Key,entry:Entry) == - ks := keys t - empty? ks => error "Cannot extract from an empty aggregate" - [first ks, t first ks] - - find(f: Record(key:Key,entry:Entry)->Boolean, t:%):_ - Union(Record(key:Key,entry:Entry), "failed") == - for ke in parts(t)@List(Record(key:Key,entry:Entry)) _ - repeat if f ke then return ke - "failed" - - index?(k: Key, t: %): Boolean == - search(k,t) case Entry - - remove_!(x:Record(key:Key,entry:Entry), t:%) == - if member?(x, t) then remove_!(x.key, t) - t - extract_!(t: %): Record(key:Key,entry:Entry) == - k: Record(key:Key,entry:Entry) := inspect t - remove_!(k.key, t) - k - - any?(f: Entry->Boolean, t: %): Boolean == - for k in keys t | f t k repeat return true - false - every?(f: Entry->Boolean, t: %): Boolean == - for k in keys t | not f t k repeat return false - true - count(f: Entry->Boolean, t: %): NonNegativeInteger == - tally: NonNegativeInteger := 0 - for k in keys t | f t k repeat tally := tally + 1 - tally - -@ -<>= -"TBAGG" [color=lightblue,href="books/bookvol10.pamphlet"]; -"TBAGG" -> "KDAGG" -"TBAGG" -> "IXAGG" - -@ -<>= -"TableAggregate(a:SetCategory,b:SetCategory)" - [color=lightblue,href="books/bookvol10.pamphlet"]; -"TableAggregate(a:SetCategory,b:SetCategory)" -> - "KeyedDictionary(a:SetCategory,b:SetCategory)" -"TableAggregate(a:SetCategory,b:SetCategory)" -> - "IndexedAggregate(a:SetCategory,b:SetCategory)" - -@ -\section{category URAGG UnaryRecursiveAggregate} -<>= -)abbrev category URAGG UnaryRecursiveAggregate -++ Author: Michael Monagan; revised by Manuel Bronstein and Richard Jenks -++ Date Created: August 87 through August 88 -++ Date Last Updated: April 1991 -++ Basic Operations: -++ Related Constructors: -++ Also See: -++ AMS Classifications: -++ Keywords: -++ References: -++ Description: -++ A unary-recursive aggregate is a one where nodes may have either -++ 0 or 1 children. -++ This aggregate models, though not precisely, a linked -++ list possibly with a single cycle. -++ A node with one children models a non-empty list, with the -++ \spadfun{value} of the list designating the head, or \spadfun{first}, of the -++ list, and the child designating the tail, or \spadfun{rest}, of the list. -++ A node with no child then designates the empty list. -++ Since these aggregates are recursive aggregates, they may be cyclic. -UnaryRecursiveAggregate(S:Type): Category == RecursiveAggregate S with - concat: (%,%) -> % - ++ concat(u,v) returns an aggregate w consisting of the elements of u - ++ followed by the elements of v. - ++ Note: \axiom{v = rest(w,#a)}. - concat: (S,%) -> % - ++ concat(x,u) returns aggregate consisting of x followed by - ++ the elements of u. - ++ Note: if \axiom{v = concat(x,u)} then \axiom{x = first v} - ++ and \axiom{u = rest v}. - first: % -> S - ++ first(u) returns the first element of u - ++ (equivalently, the value at the current node). - elt: (%,"first") -> S - ++ elt(u,"first") (also written: \axiom{u . first}) - ++ is equivalent to first u. - first: (%,NonNegativeInteger) -> % - ++ first(u,n) returns a copy of the first n (\axiom{n >= 0}) - ++ elements of u. - rest: % -> % - ++ rest(u) returns an aggregate consisting of all but the first - ++ element of u - ++ (equivalently, the next node of u). - elt: (%,"rest") -> % - ++ elt(%,"rest") (also written: \axiom{u.rest}) is - ++ equivalent to \axiom{rest u}. - rest: (%,NonNegativeInteger) -> % - ++ rest(u,n) returns the \axiom{n}th (n >= 0) node of u. - ++ Note: \axiom{rest(u,0) = u}. - last: % -> S - ++ last(u) resturn the last element of u. - ++ Note: for lists, \axiom{last(u) = u . (maxIndex u) = u . (# u - 1)}. - elt: (%,"last") -> S - ++ elt(u,"last") (also written: \axiom{u . last}) is equivalent - ++ to last u. - last: (%,NonNegativeInteger) -> % - ++ last(u,n) returns a copy of the last n (\axiom{n >= 0}) nodes of u. - ++ Note: \axiom{last(u,n)} is a list of n elements. - tail: % -> % - ++ tail(u) returns the last node of u. - ++ Note: if u is \axiom{shallowlyMutable}, - ++ \axiom{setrest(tail(u),v) = concat(u,v)}. - second: % -> S - ++ second(u) returns the second element of u. - ++ Note: \axiom{second(u) = first(rest(u))}. - third: % -> S - ++ third(u) returns the third element of u. - ++ Note: \axiom{third(u) = first(rest(rest(u)))}. - cycleEntry: % -> % - ++ cycleEntry(u) returns the head of a top-level cycle contained in - ++ aggregate u, or \axiom{empty()} if none exists. - cycleLength: % -> NonNegativeInteger - ++ cycleLength(u) returns the length of a top-level cycle - ++ contained in aggregate u, or 0 is u has no such cycle. - cycleTail: % -> % - ++ cycleTail(u) returns the last node in the cycle, or - ++ empty if none exists. - if % has shallowlyMutable then - concat_!: (%,%) -> % - ++ concat!(u,v) destructively concatenates v to the end of u. - ++ Note: \axiom{concat!(u,v) = setlast_!(u,v)}. - concat_!: (%,S) -> % - ++ concat!(u,x) destructively adds element x to the end of u. - ++ Note: \axiom{concat!(a,x) = setlast!(a,[x])}. - cycleSplit_!: % -> % - ++ cycleSplit!(u) splits the aggregate by dropping off the cycle. - ++ The value returned is the cycle entry, or nil if none exists. - ++ For example, if \axiom{w = concat(u,v)} is the cyclic list where - ++ v is the head of the cycle, \axiom{cycleSplit!(w)} will drop v - ++ off w thus destructively changing w to u, and returning v. - setfirst_!: (%,S) -> S - ++ setfirst!(u,x) destructively changes the first element of a to x. - setelt: (%,"first",S) -> S - ++ setelt(u,"first",x) (also written: \axiom{u.first := x}) is - ++ equivalent to \axiom{setfirst!(u,x)}. - setrest_!: (%,%) -> % - ++ setrest!(u,v) destructively changes the rest of u to v. - setelt: (%,"rest",%) -> % - ++ setelt(u,"rest",v) (also written: \axiom{u.rest := v}) is - ++ equivalent to \axiom{setrest!(u,v)}. - setlast_!: (%,S) -> S - ++ setlast!(u,x) destructively changes the last element of u to x. - setelt: (%,"last",S) -> S - ++ setelt(u,"last",x) (also written: \axiom{u.last := b}) - ++ is equivalent to \axiom{setlast!(u,v)}. - split_!: (%,Integer) -> % - ++ split!(u,n) splits u into two aggregates: \axiom{v = rest(u,n)} - ++ and \axiom{w = first(u,n)}, returning \axiom{v}. - ++ Note: afterwards \axiom{rest(u,n)} returns \axiom{empty()}. - add - cycleMax ==> 1000 - - findCycle: % -> % - - elt(x, "first") == first x - elt(x, "last") == last x - elt(x, "rest") == rest x - second x == first rest x - third x == first rest rest x - cyclic? x == not empty? x and not empty? findCycle x - last x == first tail x - - nodes x == - l := empty()$List(%) - while not empty? x repeat - l := concat(x, l) - x := rest x - reverse_! l - - children x == - l := empty()$List(%) - empty? x => l - concat(rest x,l) - - leaf? x == empty? x - - value x == - empty? x => error "value of empty object" - first x - - less?(l, n) == - i := n::Integer - while i > 0 and not empty? l repeat (l := rest l; i := i - 1) - i > 0 - - more?(l, n) == - i := n::Integer - while i > 0 and not empty? l repeat (l := rest l; i := i - 1) - zero?(i) and not empty? l - - size?(l, n) == - i := n::Integer - while not empty? l and i > 0 repeat (l := rest l; i := i - 1) - empty? l and zero? i - - #x == - for k in 0.. while not empty? x repeat - k = cycleMax and cyclic? x => error "cyclic list" - x := rest x - k - - tail x == - empty? x => error "empty list" - y := rest x - for k in 0.. while not empty? y repeat - k = cycleMax and cyclic? x => error "cyclic list" - y := rest(x := y) - x - - findCycle x == - y := rest x - while not empty? y repeat - if eq?(x, y) then return x - x := rest x - y := rest y - if empty? y then return y - if eq?(x, y) then return y - y := rest y - y - - cycleTail x == - empty?(y := x := cycleEntry x) => x - z := rest x - while not eq?(x,z) repeat (y := z; z := rest z) - y - - cycleEntry x == - empty? x => x - empty?(y := findCycle x) => y - z := rest y - for l in 1.. while not eq?(y,z) repeat z := rest z - y := x - for k in 1..l repeat y := rest y - while not eq?(x,y) repeat (x := rest x; y := rest y) - x - - cycleLength x == - empty? x => 0 - empty?(x := findCycle x) => 0 - y := rest x - for k in 1.. while not eq?(x,y) repeat y := rest y - k - - rest(x, n) == - for i in 1..n repeat - empty? x => error "Index out of range" - x := rest x - x - - if % has finiteAggregate then - last(x, n) == - n > (m := #x) => error "index out of range" - copy rest(x, (m - n)::NonNegativeInteger) - - if S has SetCategory then - x = y == - eq?(x, y) => true - for k in 0.. while not empty? x and not empty? y repeat - k = cycleMax and cyclic? x => error "cyclic list" - first x ^= first y => return false - x := rest x - y := rest y - empty? x and empty? y - - node?(u, v) == - for k in 0.. while not empty? v repeat - u = v => return true - k = cycleMax and cyclic? v => error "cyclic list" - v := rest v - u=v - - if % has shallowlyMutable then - setelt(x, "first", a) == setfirst_!(x, a) - setelt(x, "last", a) == setlast_!(x, a) - setelt(x, "rest", a) == setrest_!(x, a) - concat(x:%, y:%) == concat_!(copy x, y) - - setlast_!(x, s) == - empty? x => error "setlast: empty list" - setfirst_!(tail x, s) - s - - setchildren_!(u,lv) == - #lv=1 => setrest_!(u, first lv) - error "wrong number of children specified" - - setvalue_!(u,s) == setfirst_!(u,s) - - split_!(p, n) == - n < 1 => error "index out of range" - p := rest(p, (n - 1)::NonNegativeInteger) - q := rest p - setrest_!(p, empty()) - q - - cycleSplit_! x == - empty?(y := cycleEntry x) or eq?(x, y) => y - z := rest x - while not eq?(z, y) repeat (x := z; z := rest z) - setrest_!(x, empty()) - y - -@ -<>= -"URAGG" [color=lightblue,href="books/bookvol10.pamphlet"]; -"URAGG" -> "RCAGG" - -@ -<>= -"UnaryRecursiveAggregate(a:Type)" - [color=lightblue,href="books/bookvol10.pamphlet"]; -"UnaryRecursiveAggregate(a:Type)" -> "RecursiveAggregate(a:Type)" - -@ \section{URAGG.lsp BOOTSTRAP} {\bf URAGG} depends on a chain of files. We need to break this cycle to build the algebra. So we keep a cached copy of the translated {\bf URAGG} @@ -8220,6 +8682,7 @@ Note that this code is not included in the generated catdef.spad file. 0 26 2 0 19 0 0 47 1 0 29 0 34)))))) (QUOTE |lookupComplete|))) @ +\chapter{Chunk collections} <>= <> <> @@ -8240,6 +8703,8 @@ Note that this code is not included in the generated catdef.spad file. <> <> <> +<> +<> <> <> <> @@ -8248,17 +8713,19 @@ Note that this code is not included in the generated catdef.spad file. <> <> <> +<> <> <> <> <> +<> <> <> @ <>= digraph dotabb { ranksep=1.25; - bgcolor="#FFFF66" + bgcolor="#FFFF66"; node [shape=box, color=white, style=filled]; "CATEGORY" [color=lightblue,href="books/bookvol10.pamphlet"]; @@ -8282,6 +8749,8 @@ digraph dotabb { <> <> <> +<> +<> <> <> <> @@ -8290,10 +8759,12 @@ digraph dotabb { <> <> <> +<> <> <> <> <> +<> <> <> } @@ -8303,7 +8774,7 @@ digraph dotfull { ranksep=1.25; nodesep=1.5; fontsize=10; - bgcolor="#FFFF66" + bgcolor="#FFFF66"; node [shape=box, color=white, style=filled]; "Category" [color=lightblue,href="books/bookvol10.pamphlet"]; @@ -8327,6 +8798,8 @@ digraph dotfull { <> <> <> +<> +<> <> <> <> @@ -8335,10 +8808,12 @@ digraph dotfull { <> <> <> +<> <> <> <> <> +<> <> <> } diff --git a/books/ps/v10agg.ps b/books/ps/v10agg.ps new file mode 100644 index 0000000..b435416 --- /dev/null +++ b/books/ps/v10agg.ps @@ -0,0 +1,350 @@ +%!PS-Adobe-2.0 +%%Creator: dot version 2.8 (Thu Sep 14 20:34:11 UTC 2006) +%%For: (root) root +%%Title: pic +%%Pages: (atend) +%%BoundingBox: 36 36 128 224 +%%EndComments +save +%%BeginProlog +/DotDict 200 dict def +DotDict begin + +/setupLatin1 { +mark +/EncodingVector 256 array def + EncodingVector 0 + +ISOLatin1Encoding 0 255 getinterval putinterval +EncodingVector 45 /hyphen put + +% Set up ISO Latin 1 character encoding +/starnetISO { + dup dup findfont dup length dict begin + { 1 index /FID ne { def }{ pop pop } ifelse + } forall + /Encoding EncodingVector def + currentdict end definefont +} def +/Times-Roman starnetISO def +/Times-Italic starnetISO def +/Times-Bold starnetISO def +/Times-BoldItalic starnetISO def +/Helvetica starnetISO def +/Helvetica-Oblique starnetISO def +/Helvetica-Bold starnetISO def +/Helvetica-BoldOblique starnetISO def +/Courier starnetISO def +/Courier-Oblique starnetISO def +/Courier-Bold starnetISO def +/Courier-BoldOblique starnetISO def +cleartomark +} bind def + +%%BeginResource: procset graphviz 0 0 +/coord-font-family /Times-Roman def +/default-font-family /Times-Roman def +/coordfont coord-font-family findfont 8 scalefont def + +/InvScaleFactor 1.0 def +/set_scale { + dup 1 exch div /InvScaleFactor exch def + dup scale +} bind def + +% styles +/solid { [] 0 setdash } bind def +/dashed { [9 InvScaleFactor mul dup ] 0 setdash } bind def +/dotted { [1 InvScaleFactor mul 6 InvScaleFactor mul] 0 setdash } bind def +/invis {/fill {newpath} def /stroke {newpath} def /show {pop newpath} def} bind def +/bold { 2 setlinewidth } bind def +/filled { } bind def +/unfilled { } bind def +/rounded { } bind def +/diagonals { } bind def + +% hooks for setting color +/nodecolor { sethsbcolor } bind def +/edgecolor { sethsbcolor } bind def +/graphcolor { sethsbcolor } bind def +/nopcolor {pop pop pop} bind def + +/beginpage { % i j npages + /npages exch def + /j exch def + /i exch def + /str 10 string def + npages 1 gt { + gsave + coordfont setfont + 0 0 moveto + (\() show i str cvs show (,) show j str cvs show (\)) show + grestore + } if +} bind def + +/set_font { + findfont exch + scalefont setfont +} def + +% draw aligned label in bounding box aligned to current point +/alignedtext { % width adj text + /text exch def + /adj exch def + /width exch def + gsave + width 0 gt { + text stringwidth pop adj mul 0 rmoveto + } if + [] 0 setdash + text show + grestore +} def + +/boxprim { % xcorner ycorner xsize ysize + 4 2 roll + moveto + 2 copy + exch 0 rlineto + 0 exch rlineto + pop neg 0 rlineto + closepath +} bind def + +/ellipse_path { + /ry exch def + /rx exch def + /y exch def + /x exch def + matrix currentmatrix + newpath + x y translate + rx ry scale + 0 0 1 0 360 arc + setmatrix +} bind def + +/endpage { showpage } bind def +/showpage { } def + +/layercolorseq + [ % layer color sequence - darkest to lightest + [0 0 0] + [.2 .8 .8] + [.4 .8 .8] + [.6 .8 .8] + [.8 .8 .8] + ] +def + +/layerlen layercolorseq length def + +/setlayer {/maxlayer exch def /curlayer exch def + layercolorseq curlayer 1 sub layerlen mod get + aload pop sethsbcolor + /nodecolor {nopcolor} def + /edgecolor {nopcolor} def + /graphcolor {nopcolor} def +} bind def + +/onlayer { curlayer ne {invis} if } def + +/onlayers { + /myupper exch def + /mylower exch def + curlayer mylower lt + curlayer myupper gt + or + {invis} if +} def + +/curlayer 0 def + +%%EndResource +%%EndProlog +%%BeginSetup +14 default-font-family set_font +1 setmiterlimit +% /arrowlength 10 def +% /arrowwidth 5 def + +% make sure pdfmark is harmless for PS-interpreters other than Distiller +/pdfmark where {pop} {userdict /pdfmark /cleartomark load put} ifelse +% make '<<' and '>>' safe on PS Level 1 devices +/languagelevel where {pop languagelevel}{1} ifelse +2 lt { + userdict (<<) cvn ([) cvn load put + userdict (>>) cvn ([) cvn load put +} if + +%%EndSetup +%%Page: 1 1 +%%PageBoundingBox: 36 36 128 224 +%%PageOrientation: Portrait +gsave +36 36 92 188 boxprim clip newpath +36 36 translate +0 0 1 beginpage +1.0000 set_scale +4 4 translate 0 rotate +0.167 0.600 1.000 graphcolor +0.167 0.600 1.000 graphcolor +newpath -6 -6 moveto +-6 186 lineto +90 186 lineto +90 -6 lineto +closepath +fill +0.167 0.600 1.000 graphcolor +newpath -6 -6 moveto +-6 186 lineto +90 186 lineto +90 -6 lineto +closepath +stroke +0.000 0.000 0.000 graphcolor +14.00 /Times-Roman set_font +% Aggregate() +[ /Rect [ 0 144 84 180 ] + /Border [ 0 0 0 ] + /Action << /Subtype /URI /URI (books/bookvol10.pamphlet) >> + /Subtype /Link +/ANN pdfmark +gsave 10 dict begin +filled +0.537 0.247 0.902 nodecolor +0.537 0.247 0.902 nodecolor +newpath 84 180 moveto +0 180 lineto +0 144 lineto +84 144 lineto +closepath +fill +0.537 0.247 0.902 nodecolor +newpath 84 180 moveto +0 180 lineto +0 144 lineto +84 144 lineto +closepath +stroke +gsave 10 dict begin +0.000 0.000 0.000 nodecolor +7 157 moveto +(Aggregate\(\)) +[9.84 6.96 7.2 4.8 6.24 6.72 6.24 3.84 6.24 4.56 4.56] +xshow +end grestore +end grestore +% Type() +[ /Rect [ 15 72 69 108 ] + /Border [ 0 0 0 ] + /Action << /Subtype /URI /URI (books/bookvol10.pamphlet) >> + /Subtype /Link +/ANN pdfmark +gsave 10 dict begin +filled +0.537 0.247 0.902 nodecolor +0.537 0.247 0.902 nodecolor +newpath 69 108 moveto +15 108 lineto +15 72 lineto +69 72 lineto +closepath +fill +0.537 0.247 0.902 nodecolor +newpath 69 108 moveto +15 108 lineto +15 72 lineto +69 72 lineto +closepath +stroke +gsave 10 dict begin +0.000 0.000 0.000 nodecolor +23 85 moveto +(Type\(\)) +[7.2 6.96 6.96 6.24 4.56 4.56] +xshow +end grestore +end grestore +% Aggregate()->Type() +newpath 42 144 moveto +42 136 42 127 42 118 curveto +stroke +gsave 10 dict begin +solid +1 setlinewidth +0.000 0.000 0.000 edgecolor +newpath 46 118 moveto +42 108 lineto +39 118 lineto +closepath +fill +0.000 0.000 0.000 edgecolor +newpath 46 118 moveto +42 108 lineto +39 118 lineto +closepath +stroke +end grestore +% Category +[ /Rect [ 8 0 76 36 ] + /Border [ 0 0 0 ] + /Action << /Subtype /URI /URI (books/bookvol10.pamphlet) >> + /Subtype /Link +/ANN pdfmark +gsave 10 dict begin +filled +0.537 0.247 0.902 nodecolor +0.537 0.247 0.902 nodecolor +newpath 76 36 moveto +8 36 lineto +8 0 lineto +76 0 lineto +closepath +fill +0.537 0.247 0.902 nodecolor +newpath 76 36 moveto +8 36 lineto +8 0 lineto +76 0 lineto +closepath +stroke +gsave 10 dict begin +0.000 0.000 0.000 nodecolor +16 13 moveto +(Category) +[9.36 6.24 3.84 6.24 6.96 6.96 5.04 6.96] +xshow +end grestore +end grestore +% Type()->Category +newpath 42 72 moveto +42 64 42 55 42 46 curveto +stroke +gsave 10 dict begin +solid +1 setlinewidth +0.000 0.000 0.000 edgecolor +newpath 46 46 moveto +42 36 lineto +39 46 lineto +closepath +fill +0.000 0.000 0.000 edgecolor +newpath 46 46 moveto +42 36 lineto +39 46 lineto +closepath +stroke +end grestore +endpage +showpage +grestore +%%PageTrailer +%%EndPage: 1 +%%Trailer +%%Pages: 1 +end +restore +%%EOF diff --git a/books/ps/v10associationlistaggregate.ps b/books/ps/v10associationlistaggregate.ps new file mode 100644 index 0000000..db58d87 --- /dev/null +++ b/books/ps/v10associationlistaggregate.ps @@ -0,0 +1,778 @@ +%!PS-Adobe-2.0 +%%Creator: dot version 2.8 (Thu Sep 14 20:34:11 UTC 2006) +%%For: (root) root +%%Title: pic +%%Pages: (atend) +%%BoundingBox: 36 36 971 368 +%%EndComments +save +%%BeginProlog +/DotDict 200 dict def +DotDict begin + +/setupLatin1 { +mark +/EncodingVector 256 array def + EncodingVector 0 + +ISOLatin1Encoding 0 255 getinterval putinterval +EncodingVector 45 /hyphen put + +% Set up ISO Latin 1 character encoding +/starnetISO { + dup dup findfont dup length dict begin + { 1 index /FID ne { def }{ pop pop } ifelse + } forall + /Encoding EncodingVector def + currentdict end definefont +} def +/Times-Roman starnetISO def +/Times-Italic starnetISO def +/Times-Bold starnetISO def +/Times-BoldItalic starnetISO def +/Helvetica starnetISO def +/Helvetica-Oblique starnetISO def +/Helvetica-Bold starnetISO def +/Helvetica-BoldOblique starnetISO def +/Courier starnetISO def +/Courier-Oblique starnetISO def +/Courier-Bold starnetISO def +/Courier-BoldOblique starnetISO def +cleartomark +} bind def + +%%BeginResource: procset graphviz 0 0 +/coord-font-family /Times-Roman def +/default-font-family /Times-Roman def +/coordfont coord-font-family findfont 8 scalefont def + +/InvScaleFactor 1.0 def +/set_scale { + dup 1 exch div /InvScaleFactor exch def + dup scale +} bind def + +% styles +/solid { [] 0 setdash } bind def +/dashed { [9 InvScaleFactor mul dup ] 0 setdash } bind def +/dotted { [1 InvScaleFactor mul 6 InvScaleFactor mul] 0 setdash } bind def +/invis {/fill {newpath} def /stroke {newpath} def /show {pop newpath} def} bind def +/bold { 2 setlinewidth } bind def +/filled { } bind def +/unfilled { } bind def +/rounded { } bind def +/diagonals { } bind def + +% hooks for setting color +/nodecolor { sethsbcolor } bind def +/edgecolor { sethsbcolor } bind def +/graphcolor { sethsbcolor } bind def +/nopcolor {pop pop pop} bind def + +/beginpage { % i j npages + /npages exch def + /j exch def + /i exch def + /str 10 string def + npages 1 gt { + gsave + coordfont setfont + 0 0 moveto + (\() show i str cvs show (,) show j str cvs show (\)) show + grestore + } if +} bind def + +/set_font { + findfont exch + scalefont setfont +} def + +% draw aligned label in bounding box aligned to current point +/alignedtext { % width adj text + /text exch def + /adj exch def + /width exch def + gsave + width 0 gt { + text stringwidth pop adj mul 0 rmoveto + } if + [] 0 setdash + text show + grestore +} def + +/boxprim { % xcorner ycorner xsize ysize + 4 2 roll + moveto + 2 copy + exch 0 rlineto + 0 exch rlineto + pop neg 0 rlineto + closepath +} bind def + +/ellipse_path { + /ry exch def + /rx exch def + /y exch def + /x exch def + matrix currentmatrix + newpath + x y translate + rx ry scale + 0 0 1 0 360 arc + setmatrix +} bind def + +/endpage { showpage } bind def +/showpage { } def + +/layercolorseq + [ % layer color sequence - darkest to lightest + [0 0 0] + [.2 .8 .8] + [.4 .8 .8] + [.6 .8 .8] + [.8 .8 .8] + ] +def + +/layerlen layercolorseq length def + +/setlayer {/maxlayer exch def /curlayer exch def + layercolorseq curlayer 1 sub layerlen mod get + aload pop sethsbcolor + /nodecolor {nopcolor} def + /edgecolor {nopcolor} def + /graphcolor {nopcolor} def +} bind def + +/onlayer { curlayer ne {invis} if } def + +/onlayers { + /myupper exch def + /mylower exch def + curlayer mylower lt + curlayer myupper gt + or + {invis} if +} def + +/curlayer 0 def + +%%EndResource +%%EndProlog +%%BeginSetup +14 default-font-family set_font +1 setmiterlimit +% /arrowlength 10 def +% /arrowwidth 5 def + +% make sure pdfmark is harmless for PS-interpreters other than Distiller +/pdfmark where {pop} {userdict /pdfmark /cleartomark load put} ifelse +% make '<<' and '>>' safe on PS Level 1 devices +/languagelevel where {pop languagelevel}{1} ifelse +2 lt { + userdict (<<) cvn ([) cvn load put + userdict (>>) cvn ([) cvn load put +} if + +%%EndSetup +%%Page: 1 1 +%%PageBoundingBox: 36 36 971 368 +%%PageOrientation: Portrait +gsave +36 36 935 332 boxprim clip newpath +36 36 translate +0 0 1 beginpage +1.0000 set_scale +4 4 translate 0 rotate +0.167 0.600 1.000 graphcolor +0.167 0.600 1.000 graphcolor +newpath -6 -6 moveto +-6 330 lineto +933 330 lineto +933 -6 lineto +closepath +fill +0.167 0.600 1.000 graphcolor +newpath -6 -6 moveto +-6 330 lineto +933 330 lineto +933 -6 lineto +closepath +stroke +0.000 0.000 0.000 graphcolor +14.00 /Times-Roman set_font +% AssociationListAggregate(a:SetCategory,b:SetCategory) +[ /Rect [ 268 288 602 324 ] + /Border [ 0 0 0 ] + /Action << /Subtype /URI /URI (books/bookvol10.pamphlet) >> + /Subtype /Link +/ANN pdfmark +gsave 10 dict begin +filled +0.537 0.247 0.902 nodecolor +0.537 0.247 0.902 nodecolor +newpath 602 324 moveto +268 324 lineto +268 288 lineto +602 288 lineto +closepath +fill +0.537 0.247 0.902 nodecolor +newpath 602 324 moveto +268 324 lineto +268 288 lineto +602 288 lineto +closepath +stroke +gsave 10 dict begin +0.000 0.000 0.000 nodecolor +276 301 moveto +(AssociationListAggregate\(a:SetCategory,b:SetCategory\)) +[10.08 5.52 5.52 6.96 6.24 3.84 6.24 3.84 3.84 6.96 6.96 8.64 3.84 5.28 3.84 9.84 6.96 7.2 4.8 6.24 6.72 6.24 3.84 6.24 4.56 6.24 3.84 7.68 6 3.84 9.36 6.24 3.84 6.24 6.96 6.96 5.04 6 3.6 6.96 3.84 7.68 6 3.84 9.36 6.24 3.84 6.24 6.96 6.96 5.04 6.96 4.56] +xshow +end grestore +end grestore +% TableAggregate(a:SetCategory,b:SetCategory) +[ /Rect [ 101 216 377 252 ] + /Border [ 0 0 0 ] + /Action << /Subtype /URI /URI (books/bookvol10.pamphlet) >> + /Subtype /Link +/ANN pdfmark +gsave 10 dict begin +filled +0.537 0.247 0.902 nodecolor +0.537 0.247 0.902 nodecolor +newpath 377 252 moveto +101 252 lineto +101 216 lineto +377 216 lineto +closepath +fill +0.537 0.247 0.902 nodecolor +newpath 377 252 moveto +101 252 lineto +101 216 lineto +377 216 lineto +closepath +stroke +gsave 10 dict begin +0.000 0.000 0.000 nodecolor +108 229 moveto +(TableAggregate\(a:SetCategory,b:SetCategory\)) +[7.68 6.24 6.96 3.84 6.24 9.84 6.96 7.2 4.8 6.24 6.72 6.24 3.84 6.24 4.56 6.24 3.84 7.68 6 3.84 9.36 6.24 3.84 6.24 6.96 6.96 5.04 6 3.6 6.96 3.84 7.68 6 3.84 9.36 6.24 3.84 6.24 6.96 6.96 5.04 6.96 4.56] +xshow +end grestore +end grestore +% AssociationListAggregate(a:SetCategory,b:SetCategory)->TableAggregate(a:SetCategory,b:SetCategory) +newpath 386 288 moveto +359 278 326 266 298 256 curveto +stroke +gsave 10 dict begin +solid +1 setlinewidth +0.000 0.000 0.000 edgecolor +newpath 299 252 moveto +288 252 lineto +296 259 lineto +closepath +fill +0.000 0.000 0.000 edgecolor +newpath 299 252 moveto +288 252 lineto +296 259 lineto +closepath +stroke +end grestore +% ListAggregate(Record(a:SetCategory,b:SetCategory)) +[ /Rect [ 473 216 789 252 ] + /Border [ 0 0 0 ] + /Action << /Subtype /URI /URI (books/bookvol10.pamphlet) >> + /Subtype /Link +/ANN pdfmark +gsave 10 dict begin +filled +0.404 0.667 0.545 nodecolor +0.404 0.667 0.545 nodecolor +newpath 789 252 moveto +473 252 lineto +473 216 lineto +789 216 lineto +closepath +fill +0.404 0.667 0.545 nodecolor +newpath 789 252 moveto +473 252 lineto +473 216 lineto +789 216 lineto +closepath +stroke +gsave 10 dict begin +0.000 0.000 0.000 nodecolor +481 229 moveto +(ListAggregate\(Record\(a:SetCategory,b:SetCategory\)\)) +[8.64 3.84 5.28 3.84 9.84 6.96 7.2 4.8 6.24 6.72 6.24 3.84 6.24 4.56 9.12 6.24 6.24 6.96 4.56 6.96 4.56 6.24 3.84 7.68 6 3.84 9.36 6.24 3.84 6.24 6.96 6.96 5.04 6 3.6 6.96 3.84 7.68 6 3.84 9.36 6.24 3.84 6.24 6.96 6.96 5.04 6.96 4.56 4.56] +xshow +end grestore +end grestore +% AssociationListAggregate(a:SetCategory,b:SetCategory)->ListAggregate(Record(a:SetCategory,b:SetCategory)) +newpath 484 288 moveto +511 278 544 266 572 256 curveto +stroke +gsave 10 dict begin +solid +1 setlinewidth +0.000 0.000 0.000 edgecolor +newpath 574 259 moveto +582 252 lineto +571 252 lineto +closepath +fill +0.000 0.000 0.000 edgecolor +newpath 574 259 moveto +582 252 lineto +571 252 lineto +closepath +stroke +end grestore +% KDAGG... +[ /Rect [ 0 144 76 180 ] + /Border [ 0 0 0 ] + /Action << /Subtype /URI /URI (books/bookvol10.pamphlet) >> + /Subtype /Link +/ANN pdfmark +gsave 10 dict begin +filled +0.537 0.247 0.902 nodecolor +0.537 0.247 0.902 nodecolor +newpath 76 180 moveto +0 180 lineto +0 144 lineto +76 144 lineto +closepath +fill +0.537 0.247 0.902 nodecolor +newpath 76 180 moveto +0 180 lineto +0 144 lineto +76 144 lineto +closepath +stroke +gsave 10 dict begin +0.000 0.000 0.000 nodecolor +7 157 moveto +(KDAGG...) +[9.84 9.12 9.36 10.08 10.08 3.6 3.6 3.6] +xshow +end grestore +end grestore +% TableAggregate(a:SetCategory,b:SetCategory)->KDAGG... +newpath 188 216 moveto +160 207 125 194 86 180 curveto +stroke +gsave 10 dict begin +solid +1 setlinewidth +0.000 0.000 0.000 edgecolor +newpath 87 177 moveto +76 177 lineto +85 183 lineto +closepath +fill +0.000 0.000 0.000 edgecolor +newpath 87 177 moveto +76 177 lineto +85 183 lineto +closepath +stroke +end grestore +% IndexedAggregate(a:SetCategory,b:SetCategory) +[ /Rect [ 94 144 384 180 ] + /Border [ 0 0 0 ] + /Action << /Subtype /URI /URI (books/bookvol10.pamphlet) >> + /Subtype /Link +/ANN pdfmark +gsave 10 dict begin +filled +0.404 0.667 0.545 nodecolor +0.404 0.667 0.545 nodecolor +newpath 384 180 moveto +94 180 lineto +94 144 lineto +384 144 lineto +closepath +fill +0.404 0.667 0.545 nodecolor +newpath 384 180 moveto +94 180 lineto +94 144 lineto +384 144 lineto +closepath +stroke +gsave 10 dict begin +0.000 0.000 0.000 nodecolor +101 157 moveto +(IndexedAggregate\(a:SetCategory,b:SetCategory\)) +[4.56 6.96 6.96 5.76 6.48 6.24 6.96 9.84 6.96 7.2 4.8 6.24 6.72 6.24 3.84 6.24 4.56 6.24 3.84 7.68 6 3.84 9.36 6.24 3.84 6.24 6.96 6.96 5.04 6 3.6 6.96 3.84 7.68 6 3.84 9.36 6.24 3.84 6.24 6.96 6.96 5.04 6.96 4.56] +xshow +end grestore +end grestore +% TableAggregate(a:SetCategory,b:SetCategory)->IndexedAggregate(a:SetCategory,b:SetCategory) +newpath 239 216 moveto +239 208 239 199 239 190 curveto +stroke +gsave 10 dict begin +solid +1 setlinewidth +0.000 0.000 0.000 edgecolor +newpath 243 190 moveto +239 180 lineto +236 190 lineto +closepath +fill +0.000 0.000 0.000 edgecolor +newpath 243 190 moveto +239 180 lineto +236 190 lineto +closepath +stroke +end grestore +% ListAggregate(a:Type) +[ /Rect [ 638 144 780 180 ] + /Border [ 0 0 0 ] + /Action << /Subtype /URI /URI (books/bookvol10.pamphlet) >> + /Subtype /Link +/ANN pdfmark +gsave 10 dict begin +filled +0.537 0.247 0.902 nodecolor +0.537 0.247 0.902 nodecolor +newpath 780 180 moveto +638 180 lineto +638 144 lineto +780 144 lineto +closepath +fill +0.537 0.247 0.902 nodecolor +newpath 780 180 moveto +638 180 lineto +638 144 lineto +780 144 lineto +closepath +stroke +gsave 10 dict begin +0.000 0.000 0.000 nodecolor +645 157 moveto +(ListAggregate\(a:Type\)) +[8.64 3.84 5.28 3.84 9.84 6.96 7.2 4.8 6.24 6.72 6.24 3.84 6.24 4.56 6.24 3.84 7.2 6.96 6.96 6.24 4.56] +xshow +end grestore +end grestore +% ListAggregate(Record(a:SetCategory,b:SetCategory))->ListAggregate(a:Type) +newpath 651 216 moveto +661 207 672 197 682 187 curveto +stroke +gsave 10 dict begin +solid +1 setlinewidth +0.000 0.000 0.000 edgecolor +newpath 685 189 moveto +690 180 lineto +680 184 lineto +closepath +fill +0.000 0.000 0.000 edgecolor +newpath 685 189 moveto +690 180 lineto +680 184 lineto +closepath +stroke +end grestore +% IXAGG... +[ /Rect [ 308 72 380 108 ] + /Border [ 0 0 0 ] + /Action << /Subtype /URI /URI (books/bookvol10.pamphlet) >> + /Subtype /Link +/ANN pdfmark +gsave 10 dict begin +filled +0.537 0.247 0.902 nodecolor +0.537 0.247 0.902 nodecolor +newpath 380 108 moveto +308 108 lineto +308 72 lineto +380 72 lineto +closepath +fill +0.537 0.247 0.902 nodecolor +newpath 380 108 moveto +308 108 lineto +308 72 lineto +380 72 lineto +closepath +stroke +gsave 10 dict begin +0.000 0.000 0.000 nodecolor +315 85 moveto +(IXAGG...) +[4.56 10.08 9.36 10.08 10.08 3.6 3.6 3.6] +xshow +end grestore +end grestore +% IndexedAggregate(a:SetCategory,b:SetCategory)->IXAGG... +newpath 265 144 moveto +278 135 295 124 309 114 curveto +stroke +gsave 10 dict begin +solid +1 setlinewidth +0.000 0.000 0.000 edgecolor +newpath 312 116 moveto +318 108 lineto +308 111 lineto +closepath +fill +0.000 0.000 0.000 edgecolor +newpath 312 116 moveto +318 108 lineto +308 111 lineto +closepath +stroke +end grestore +% FiniteLinearAggregate(a:Type) +[ /Rect [ 503 72 693 108 ] + /Border [ 0 0 0 ] + /Action << /Subtype /URI /URI (books/bookvol10.pamphlet) >> + /Subtype /Link +/ANN pdfmark +gsave 10 dict begin +filled +0.537 0.247 0.902 nodecolor +0.537 0.247 0.902 nodecolor +newpath 693 108 moveto +503 108 lineto +503 72 lineto +693 72 lineto +closepath +fill +0.537 0.247 0.902 nodecolor +newpath 693 108 moveto +503 108 lineto +503 72 lineto +693 72 lineto +closepath +stroke +gsave 10 dict begin +0.000 0.000 0.000 nodecolor +511 85 moveto +(FiniteLinearAggregate\(a:Type\)) +[7.44 3.84 6.96 3.84 3.84 6.24 8.64 3.84 6.96 6.24 6.24 4.8 9.84 6.96 7.2 4.8 6.24 6.72 6.24 3.84 6.24 4.56 6.24 3.84 7.2 6.96 6.96 6.24 4.56] +xshow +end grestore +end grestore +% ListAggregate(a:Type)->FiniteLinearAggregate(a:Type) +newpath 681 144 moveto +667 135 649 124 634 114 curveto +stroke +gsave 10 dict begin +solid +1 setlinewidth +0.000 0.000 0.000 edgecolor +newpath 636 111 moveto +626 108 lineto +632 117 lineto +closepath +fill +0.000 0.000 0.000 edgecolor +newpath 636 111 moveto +626 108 lineto +632 117 lineto +closepath +stroke +end grestore +% ExtensibleLinearAggregate(a:Type) +[ /Rect [ 711 72 927 108 ] + /Border [ 0 0 0 ] + /Action << /Subtype /URI /URI (books/bookvol10.pamphlet) >> + /Subtype /Link +/ANN pdfmark +gsave 10 dict begin +filled +0.537 0.247 0.902 nodecolor +0.537 0.247 0.902 nodecolor +newpath 927 108 moveto +711 108 lineto +711 72 lineto +927 72 lineto +closepath +fill +0.537 0.247 0.902 nodecolor +newpath 927 108 moveto +711 108 lineto +711 72 lineto +927 72 lineto +closepath +stroke +gsave 10 dict begin +0.000 0.000 0.000 nodecolor +718 85 moveto +(ExtensibleLinearAggregate\(a:Type\)) +[8.64 6.96 3.84 6.24 6.96 5.52 3.84 6.96 3.84 6.24 8.64 3.84 6.96 6.24 6.24 4.8 9.84 6.96 7.2 4.8 6.24 6.72 6.24 3.84 6.24 4.56 6.24 3.84 7.2 6.96 6.96 6.24 4.56] +xshow +end grestore +end grestore +% ListAggregate(a:Type)->ExtensibleLinearAggregate(a:Type) +newpath 737 144 moveto +751 135 768 124 783 114 curveto +stroke +gsave 10 dict begin +solid +1 setlinewidth +0.000 0.000 0.000 edgecolor +newpath 786 116 moveto +792 108 lineto +782 111 lineto +closepath +fill +0.000 0.000 0.000 edgecolor +newpath 786 116 moveto +792 108 lineto +782 111 lineto +closepath +stroke +end grestore +% LNAGG... +[ /Rect [ 671 0 745 36 ] + /Border [ 0 0 0 ] + /Action << /Subtype /URI /URI (books/bookvol10.pamphlet) >> + /Subtype /Link +/ANN pdfmark +gsave 10 dict begin +filled +0.537 0.247 0.902 nodecolor +0.537 0.247 0.902 nodecolor +newpath 745 36 moveto +671 36 lineto +671 0 lineto +745 0 lineto +closepath +fill +0.537 0.247 0.902 nodecolor +newpath 745 36 moveto +671 36 lineto +671 0 lineto +745 0 lineto +closepath +stroke +gsave 10 dict begin +0.000 0.000 0.000 nodecolor +678 13 moveto +(LNAGG...) +[8.64 9.6 9.36 10.08 10.08 3.6 3.6 3.6] +xshow +end grestore +end grestore +% FiniteLinearAggregate(a:Type)->LNAGG... +newpath 626 72 moveto +640 63 657 52 672 42 curveto +stroke +gsave 10 dict begin +solid +1 setlinewidth +0.000 0.000 0.000 edgecolor +newpath 675 44 moveto +681 36 lineto +671 39 lineto +closepath +fill +0.000 0.000 0.000 edgecolor +newpath 675 44 moveto +681 36 lineto +671 39 lineto +closepath +stroke +end grestore +% ExtensibleLinearAggregate(a:Type)->LNAGG... +newpath 791 72 moveto +777 63 759 52 744 42 curveto +stroke +gsave 10 dict begin +solid +1 setlinewidth +0.000 0.000 0.000 edgecolor +newpath 746 39 moveto +736 36 lineto +742 45 lineto +closepath +fill +0.000 0.000 0.000 edgecolor +newpath 746 39 moveto +736 36 lineto +742 45 lineto +closepath +stroke +end grestore +% IndexedAggregate(b:Integer,a:Type) +[ /Rect [ 402 144 620 180 ] + /Border [ 0 0 0 ] + /Action << /Subtype /URI /URI (books/bookvol10.pamphlet) >> + /Subtype /Link +/ANN pdfmark +gsave 10 dict begin +filled +0.404 0.667 0.545 nodecolor +0.404 0.667 0.545 nodecolor +newpath 620 180 moveto +402 180 lineto +402 144 lineto +620 144 lineto +closepath +fill +0.404 0.667 0.545 nodecolor +newpath 620 180 moveto +402 180 lineto +402 144 lineto +620 144 lineto +closepath +stroke +gsave 10 dict begin +0.000 0.000 0.000 nodecolor +409 157 moveto +(IndexedAggregate\(b:Integer,a:Type\)) +[4.56 6.96 6.96 5.76 6.48 6.24 6.96 9.84 6.96 7.2 4.8 6.24 6.72 6.24 3.84 6.24 4.56 6.96 3.84 4.56 6.96 3.84 6.24 6.72 6.24 4.32 3.6 6.24 3.84 7.2 6.96 6.96 6.24 4.56] +xshow +end grestore +end grestore +% IndexedAggregate(b:Integer,a:Type)->IXAGG... +newpath 469 144 moveto +444 133 414 120 389 110 curveto +stroke +gsave 10 dict begin +solid +1 setlinewidth +0.000 0.000 0.000 edgecolor +newpath 391 107 moveto +380 106 lineto +388 113 lineto +closepath +fill +0.000 0.000 0.000 edgecolor +newpath 391 107 moveto +380 106 lineto +388 113 lineto +closepath +stroke +end grestore +endpage +showpage +grestore +%%PageTrailer +%%EndPage: 1 +%%Trailer +%%Pages: 1 +end +restore +%%EOF diff --git a/books/ps/v10bagaggregate.ps b/books/ps/v10bagaggregate.ps new file mode 100644 index 0000000..5a65684 --- /dev/null +++ b/books/ps/v10bagaggregate.ps @@ -0,0 +1,452 @@ +%!PS-Adobe-2.0 +%%Creator: dot version 2.8 (Thu Sep 14 20:34:11 UTC 2006) +%%For: (root) root +%%Title: pic +%%Pages: (atend) +%%BoundingBox: 36 36 246 368 +%%EndComments +save +%%BeginProlog +/DotDict 200 dict def +DotDict begin + +/setupLatin1 { +mark +/EncodingVector 256 array def + EncodingVector 0 + +ISOLatin1Encoding 0 255 getinterval putinterval +EncodingVector 45 /hyphen put + +% Set up ISO Latin 1 character encoding +/starnetISO { + dup dup findfont dup length dict begin + { 1 index /FID ne { def }{ pop pop } ifelse + } forall + /Encoding EncodingVector def + currentdict end definefont +} def +/Times-Roman starnetISO def +/Times-Italic starnetISO def +/Times-Bold starnetISO def +/Times-BoldItalic starnetISO def +/Helvetica starnetISO def +/Helvetica-Oblique starnetISO def +/Helvetica-Bold starnetISO def +/Helvetica-BoldOblique starnetISO def +/Courier starnetISO def +/Courier-Oblique starnetISO def +/Courier-Bold starnetISO def +/Courier-BoldOblique starnetISO def +cleartomark +} bind def + +%%BeginResource: procset graphviz 0 0 +/coord-font-family /Times-Roman def +/default-font-family /Times-Roman def +/coordfont coord-font-family findfont 8 scalefont def + +/InvScaleFactor 1.0 def +/set_scale { + dup 1 exch div /InvScaleFactor exch def + dup scale +} bind def + +% styles +/solid { [] 0 setdash } bind def +/dashed { [9 InvScaleFactor mul dup ] 0 setdash } bind def +/dotted { [1 InvScaleFactor mul 6 InvScaleFactor mul] 0 setdash } bind def +/invis {/fill {newpath} def /stroke {newpath} def /show {pop newpath} def} bind def +/bold { 2 setlinewidth } bind def +/filled { } bind def +/unfilled { } bind def +/rounded { } bind def +/diagonals { } bind def + +% hooks for setting color +/nodecolor { sethsbcolor } bind def +/edgecolor { sethsbcolor } bind def +/graphcolor { sethsbcolor } bind def +/nopcolor {pop pop pop} bind def + +/beginpage { % i j npages + /npages exch def + /j exch def + /i exch def + /str 10 string def + npages 1 gt { + gsave + coordfont setfont + 0 0 moveto + (\() show i str cvs show (,) show j str cvs show (\)) show + grestore + } if +} bind def + +/set_font { + findfont exch + scalefont setfont +} def + +% draw aligned label in bounding box aligned to current point +/alignedtext { % width adj text + /text exch def + /adj exch def + /width exch def + gsave + width 0 gt { + text stringwidth pop adj mul 0 rmoveto + } if + [] 0 setdash + text show + grestore +} def + +/boxprim { % xcorner ycorner xsize ysize + 4 2 roll + moveto + 2 copy + exch 0 rlineto + 0 exch rlineto + pop neg 0 rlineto + closepath +} bind def + +/ellipse_path { + /ry exch def + /rx exch def + /y exch def + /x exch def + matrix currentmatrix + newpath + x y translate + rx ry scale + 0 0 1 0 360 arc + setmatrix +} bind def + +/endpage { showpage } bind def +/showpage { } def + +/layercolorseq + [ % layer color sequence - darkest to lightest + [0 0 0] + [.2 .8 .8] + [.4 .8 .8] + [.6 .8 .8] + [.8 .8 .8] + ] +def + +/layerlen layercolorseq length def + +/setlayer {/maxlayer exch def /curlayer exch def + layercolorseq curlayer 1 sub layerlen mod get + aload pop sethsbcolor + /nodecolor {nopcolor} def + /edgecolor {nopcolor} def + /graphcolor {nopcolor} def +} bind def + +/onlayer { curlayer ne {invis} if } def + +/onlayers { + /myupper exch def + /mylower exch def + curlayer mylower lt + curlayer myupper gt + or + {invis} if +} def + +/curlayer 0 def + +%%EndResource +%%EndProlog +%%BeginSetup +14 default-font-family set_font +1 setmiterlimit +% /arrowlength 10 def +% /arrowwidth 5 def + +% make sure pdfmark is harmless for PS-interpreters other than Distiller +/pdfmark where {pop} {userdict /pdfmark /cleartomark load put} ifelse +% make '<<' and '>>' safe on PS Level 1 devices +/languagelevel where {pop languagelevel}{1} ifelse +2 lt { + userdict (<<) cvn ([) cvn load put + userdict (>>) cvn ([) cvn load put +} if + +%%EndSetup +%%Page: 1 1 +%%PageBoundingBox: 36 36 246 368 +%%PageOrientation: Portrait +gsave +36 36 210 332 boxprim clip newpath +36 36 translate +0 0 1 beginpage +1.0000 set_scale +4 4 translate 0 rotate +0.167 0.600 1.000 graphcolor +0.167 0.600 1.000 graphcolor +newpath -6 -6 moveto +-6 330 lineto +208 330 lineto +208 -6 lineto +closepath +fill +0.167 0.600 1.000 graphcolor +newpath -6 -6 moveto +-6 330 lineto +208 330 lineto +208 -6 lineto +closepath +stroke +0.000 0.000 0.000 graphcolor +14.00 /Times-Roman set_font +% BagAggregate(a:Type) +[ /Rect [ 29 288 173 324 ] + /Border [ 0 0 0 ] + /Action << /Subtype /URI /URI (books/bookvol10.pamphlet) >> + /Subtype /Link +/ANN pdfmark +gsave 10 dict begin +filled +0.537 0.247 0.902 nodecolor +0.537 0.247 0.902 nodecolor +newpath 173 324 moveto +29 324 lineto +29 288 lineto +173 288 lineto +closepath +fill +0.537 0.247 0.902 nodecolor +newpath 173 324 moveto +29 324 lineto +29 288 lineto +173 288 lineto +closepath +stroke +gsave 10 dict begin +0.000 0.000 0.000 nodecolor +36 301 moveto +(BagAggregate\(a:Type\)) +[9.36 6.24 6.96 9.84 6.96 7.2 4.8 6.24 6.72 6.24 3.84 6.24 4.56 6.24 3.84 7.2 6.96 6.96 6.24 4.56] +xshow +end grestore +end grestore +% HomogeneousAggregate(a:Type) +[ /Rect [ 0 216 202 252 ] + /Border [ 0 0 0 ] + /Action << /Subtype /URI /URI (books/bookvol10.pamphlet) >> + /Subtype /Link +/ANN pdfmark +gsave 10 dict begin +filled +0.537 0.247 0.902 nodecolor +0.537 0.247 0.902 nodecolor +newpath 202 252 moveto +0 252 lineto +0 216 lineto +202 216 lineto +closepath +fill +0.537 0.247 0.902 nodecolor +newpath 202 252 moveto +0 252 lineto +0 216 lineto +202 216 lineto +closepath +stroke +gsave 10 dict begin +0.000 0.000 0.000 nodecolor +7 229 moveto +(HomogeneousAggregate\(a:Type\)) +[10.08 6.96 10.8 6.96 6.72 6.24 6.96 6.24 6.96 6.96 5.52 9.84 6.96 7.2 4.8 6.24 6.72 6.24 3.84 6.24 4.56 6.24 3.84 7.2 6.96 6.96 6.24 4.56] +xshow +end grestore +end grestore +% BagAggregate(a:Type)->HomogeneousAggregate(a:Type) +newpath 101 288 moveto +101 280 101 271 101 262 curveto +stroke +gsave 10 dict begin +solid +1 setlinewidth +0.000 0.000 0.000 edgecolor +newpath 105 262 moveto +101 252 lineto +98 262 lineto +closepath +fill +0.000 0.000 0.000 edgecolor +newpath 105 262 moveto +101 252 lineto +98 262 lineto +closepath +stroke +end grestore +% Aggregate() +[ /Rect [ 59 144 143 180 ] + /Border [ 0 0 0 ] + /Action << /Subtype /URI /URI (books/bookvol10.pamphlet) >> + /Subtype /Link +/ANN pdfmark +gsave 10 dict begin +filled +0.537 0.247 0.902 nodecolor +0.537 0.247 0.902 nodecolor +newpath 143 180 moveto +59 180 lineto +59 144 lineto +143 144 lineto +closepath +fill +0.537 0.247 0.902 nodecolor +newpath 143 180 moveto +59 180 lineto +59 144 lineto +143 144 lineto +closepath +stroke +gsave 10 dict begin +0.000 0.000 0.000 nodecolor +66 157 moveto +(Aggregate\(\)) +[9.84 6.96 7.2 4.8 6.24 6.72 6.24 3.84 6.24 4.56 4.56] +xshow +end grestore +end grestore +% HomogeneousAggregate(a:Type)->Aggregate() +newpath 101 216 moveto +101 208 101 199 101 190 curveto +stroke +gsave 10 dict begin +solid +1 setlinewidth +0.000 0.000 0.000 edgecolor +newpath 105 190 moveto +101 180 lineto +98 190 lineto +closepath +fill +0.000 0.000 0.000 edgecolor +newpath 105 190 moveto +101 180 lineto +98 190 lineto +closepath +stroke +end grestore +% Type() +[ /Rect [ 74 72 128 108 ] + /Border [ 0 0 0 ] + /Action << /Subtype /URI /URI (books/bookvol10.pamphlet) >> + /Subtype /Link +/ANN pdfmark +gsave 10 dict begin +filled +0.537 0.247 0.902 nodecolor +0.537 0.247 0.902 nodecolor +newpath 128 108 moveto +74 108 lineto +74 72 lineto +128 72 lineto +closepath +fill +0.537 0.247 0.902 nodecolor +newpath 128 108 moveto +74 108 lineto +74 72 lineto +128 72 lineto +closepath +stroke +gsave 10 dict begin +0.000 0.000 0.000 nodecolor +82 85 moveto +(Type\(\)) +[7.2 6.96 6.96 6.24 4.56 4.56] +xshow +end grestore +end grestore +% Aggregate()->Type() +newpath 101 144 moveto +101 136 101 127 101 118 curveto +stroke +gsave 10 dict begin +solid +1 setlinewidth +0.000 0.000 0.000 edgecolor +newpath 105 118 moveto +101 108 lineto +98 118 lineto +closepath +fill +0.000 0.000 0.000 edgecolor +newpath 105 118 moveto +101 108 lineto +98 118 lineto +closepath +stroke +end grestore +% Category +[ /Rect [ 67 0 135 36 ] + /Border [ 0 0 0 ] + /Action << /Subtype /URI /URI (books/bookvol10.pamphlet) >> + /Subtype /Link +/ANN pdfmark +gsave 10 dict begin +filled +0.537 0.247 0.902 nodecolor +0.537 0.247 0.902 nodecolor +newpath 135 36 moveto +67 36 lineto +67 0 lineto +135 0 lineto +closepath +fill +0.537 0.247 0.902 nodecolor +newpath 135 36 moveto +67 36 lineto +67 0 lineto +135 0 lineto +closepath +stroke +gsave 10 dict begin +0.000 0.000 0.000 nodecolor +75 13 moveto +(Category) +[9.36 6.24 3.84 6.24 6.96 6.96 5.04 6.96] +xshow +end grestore +end grestore +% Type()->Category +newpath 101 72 moveto +101 64 101 55 101 46 curveto +stroke +gsave 10 dict begin +solid +1 setlinewidth +0.000 0.000 0.000 edgecolor +newpath 105 46 moveto +101 36 lineto +98 46 lineto +closepath +fill +0.000 0.000 0.000 edgecolor +newpath 105 46 moveto +101 36 lineto +98 46 lineto +closepath +stroke +end grestore +endpage +showpage +grestore +%%PageTrailer +%%EndPage: 1 +%%Trailer +%%Pages: 1 +end +restore +%%EOF diff --git a/books/ps/v10binaryrecursiveaggregate.ps b/books/ps/v10binaryrecursiveaggregate.ps new file mode 100644 index 0000000..65aa18e --- /dev/null +++ b/books/ps/v10binaryrecursiveaggregate.ps @@ -0,0 +1,503 @@ +%!PS-Adobe-2.0 +%%Creator: dot version 2.8 (Thu Sep 14 20:34:11 UTC 2006) +%%For: (root) root +%%Title: pic +%%Pages: (atend) +%%BoundingBox: 36 36 260 440 +%%EndComments +save +%%BeginProlog +/DotDict 200 dict def +DotDict begin + +/setupLatin1 { +mark +/EncodingVector 256 array def + EncodingVector 0 + +ISOLatin1Encoding 0 255 getinterval putinterval +EncodingVector 45 /hyphen put + +% Set up ISO Latin 1 character encoding +/starnetISO { + dup dup findfont dup length dict begin + { 1 index /FID ne { def }{ pop pop } ifelse + } forall + /Encoding EncodingVector def + currentdict end definefont +} def +/Times-Roman starnetISO def +/Times-Italic starnetISO def +/Times-Bold starnetISO def +/Times-BoldItalic starnetISO def +/Helvetica starnetISO def +/Helvetica-Oblique starnetISO def +/Helvetica-Bold starnetISO def +/Helvetica-BoldOblique starnetISO def +/Courier starnetISO def +/Courier-Oblique starnetISO def +/Courier-Bold starnetISO def +/Courier-BoldOblique starnetISO def +cleartomark +} bind def + +%%BeginResource: procset graphviz 0 0 +/coord-font-family /Times-Roman def +/default-font-family /Times-Roman def +/coordfont coord-font-family findfont 8 scalefont def + +/InvScaleFactor 1.0 def +/set_scale { + dup 1 exch div /InvScaleFactor exch def + dup scale +} bind def + +% styles +/solid { [] 0 setdash } bind def +/dashed { [9 InvScaleFactor mul dup ] 0 setdash } bind def +/dotted { [1 InvScaleFactor mul 6 InvScaleFactor mul] 0 setdash } bind def +/invis {/fill {newpath} def /stroke {newpath} def /show {pop newpath} def} bind def +/bold { 2 setlinewidth } bind def +/filled { } bind def +/unfilled { } bind def +/rounded { } bind def +/diagonals { } bind def + +% hooks for setting color +/nodecolor { sethsbcolor } bind def +/edgecolor { sethsbcolor } bind def +/graphcolor { sethsbcolor } bind def +/nopcolor {pop pop pop} bind def + +/beginpage { % i j npages + /npages exch def + /j exch def + /i exch def + /str 10 string def + npages 1 gt { + gsave + coordfont setfont + 0 0 moveto + (\() show i str cvs show (,) show j str cvs show (\)) show + grestore + } if +} bind def + +/set_font { + findfont exch + scalefont setfont +} def + +% draw aligned label in bounding box aligned to current point +/alignedtext { % width adj text + /text exch def + /adj exch def + /width exch def + gsave + width 0 gt { + text stringwidth pop adj mul 0 rmoveto + } if + [] 0 setdash + text show + grestore +} def + +/boxprim { % xcorner ycorner xsize ysize + 4 2 roll + moveto + 2 copy + exch 0 rlineto + 0 exch rlineto + pop neg 0 rlineto + closepath +} bind def + +/ellipse_path { + /ry exch def + /rx exch def + /y exch def + /x exch def + matrix currentmatrix + newpath + x y translate + rx ry scale + 0 0 1 0 360 arc + setmatrix +} bind def + +/endpage { showpage } bind def +/showpage { } def + +/layercolorseq + [ % layer color sequence - darkest to lightest + [0 0 0] + [.2 .8 .8] + [.4 .8 .8] + [.6 .8 .8] + [.8 .8 .8] + ] +def + +/layerlen layercolorseq length def + +/setlayer {/maxlayer exch def /curlayer exch def + layercolorseq curlayer 1 sub layerlen mod get + aload pop sethsbcolor + /nodecolor {nopcolor} def + /edgecolor {nopcolor} def + /graphcolor {nopcolor} def +} bind def + +/onlayer { curlayer ne {invis} if } def + +/onlayers { + /myupper exch def + /mylower exch def + curlayer mylower lt + curlayer myupper gt + or + {invis} if +} def + +/curlayer 0 def + +%%EndResource +%%EndProlog +%%BeginSetup +14 default-font-family set_font +1 setmiterlimit +% /arrowlength 10 def +% /arrowwidth 5 def + +% make sure pdfmark is harmless for PS-interpreters other than Distiller +/pdfmark where {pop} {userdict /pdfmark /cleartomark load put} ifelse +% make '<<' and '>>' safe on PS Level 1 devices +/languagelevel where {pop languagelevel}{1} ifelse +2 lt { + userdict (<<) cvn ([) cvn load put + userdict (>>) cvn ([) cvn load put +} if + +%%EndSetup +%%Page: 1 1 +%%PageBoundingBox: 36 36 260 440 +%%PageOrientation: Portrait +gsave +36 36 224 404 boxprim clip newpath +36 36 translate +0 0 1 beginpage +1.0000 set_scale +4 4 translate 0 rotate +0.167 0.600 1.000 graphcolor +0.167 0.600 1.000 graphcolor +newpath -6 -6 moveto +-6 402 lineto +222 402 lineto +222 -6 lineto +closepath +fill +0.167 0.600 1.000 graphcolor +newpath -6 -6 moveto +-6 402 lineto +222 402 lineto +222 -6 lineto +closepath +stroke +0.000 0.000 0.000 graphcolor +14.00 /Times-Roman set_font +% BinaryRecursiveAggregate(a:Type) +[ /Rect [ 0 360 216 396 ] + /Border [ 0 0 0 ] + /Action << /Subtype /URI /URI (books/bookvol10.pamphlet) >> + /Subtype /Link +/ANN pdfmark +gsave 10 dict begin +filled +0.537 0.247 0.902 nodecolor +0.537 0.247 0.902 nodecolor +newpath 216 396 moveto +0 396 lineto +0 360 lineto +216 360 lineto +closepath +fill +0.537 0.247 0.902 nodecolor +newpath 216 396 moveto +0 396 lineto +0 360 lineto +216 360 lineto +closepath +stroke +gsave 10 dict begin +0.000 0.000 0.000 nodecolor +8 373 moveto +(BinaryRecursiveAggregate\(a:Type\)) +[9.36 3.84 6.96 6.24 5.04 6.96 9.12 6.24 6.24 6.96 4.8 5.52 3.84 6.48 6.24 9.84 6.96 7.2 4.8 6.24 6.72 6.24 3.84 6.24 4.56 6.24 3.84 7.2 6.96 6.96 6.24 4.56] +xshow +end grestore +end grestore +% RecursiveAggregate(a:Type) +[ /Rect [ 20 288 196 324 ] + /Border [ 0 0 0 ] + /Action << /Subtype /URI /URI (books/bookvol10.pamphlet) >> + /Subtype /Link +/ANN pdfmark +gsave 10 dict begin +filled +0.537 0.247 0.902 nodecolor +0.537 0.247 0.902 nodecolor +newpath 196 324 moveto +20 324 lineto +20 288 lineto +196 288 lineto +closepath +fill +0.537 0.247 0.902 nodecolor +newpath 196 324 moveto +20 324 lineto +20 288 lineto +196 288 lineto +closepath +stroke +gsave 10 dict begin +0.000 0.000 0.000 nodecolor +27 301 moveto +(RecursiveAggregate\(a:Type\)) +[9.12 6.24 6.24 6.96 4.8 5.52 3.84 6.48 6.24 9.84 6.96 7.2 4.8 6.24 6.72 6.24 3.84 6.24 4.56 6.24 3.84 7.2 6.96 6.96 6.24 4.56] +xshow +end grestore +end grestore +% BinaryRecursiveAggregate(a:Type)->RecursiveAggregate(a:Type) +newpath 108 360 moveto +108 352 108 343 108 334 curveto +stroke +gsave 10 dict begin +solid +1 setlinewidth +0.000 0.000 0.000 edgecolor +newpath 112 334 moveto +108 324 lineto +105 334 lineto +closepath +fill +0.000 0.000 0.000 edgecolor +newpath 112 334 moveto +108 324 lineto +105 334 lineto +closepath +stroke +end grestore +% HomogeneousAggregate(a:Type) +[ /Rect [ 7 216 209 252 ] + /Border [ 0 0 0 ] + /Action << /Subtype /URI /URI (books/bookvol10.pamphlet) >> + /Subtype /Link +/ANN pdfmark +gsave 10 dict begin +filled +0.537 0.247 0.902 nodecolor +0.537 0.247 0.902 nodecolor +newpath 209 252 moveto +7 252 lineto +7 216 lineto +209 216 lineto +closepath +fill +0.537 0.247 0.902 nodecolor +newpath 209 252 moveto +7 252 lineto +7 216 lineto +209 216 lineto +closepath +stroke +gsave 10 dict begin +0.000 0.000 0.000 nodecolor +14 229 moveto +(HomogeneousAggregate\(a:Type\)) +[10.08 6.96 10.8 6.96 6.72 6.24 6.96 6.24 6.96 6.96 5.52 9.84 6.96 7.2 4.8 6.24 6.72 6.24 3.84 6.24 4.56 6.24 3.84 7.2 6.96 6.96 6.24 4.56] +xshow +end grestore +end grestore +% RecursiveAggregate(a:Type)->HomogeneousAggregate(a:Type) +newpath 108 288 moveto +108 280 108 271 108 262 curveto +stroke +gsave 10 dict begin +solid +1 setlinewidth +0.000 0.000 0.000 edgecolor +newpath 112 262 moveto +108 252 lineto +105 262 lineto +closepath +fill +0.000 0.000 0.000 edgecolor +newpath 112 262 moveto +108 252 lineto +105 262 lineto +closepath +stroke +end grestore +% Aggregate() +[ /Rect [ 66 144 150 180 ] + /Border [ 0 0 0 ] + /Action << /Subtype /URI /URI (books/bookvol10.pamphlet) >> + /Subtype /Link +/ANN pdfmark +gsave 10 dict begin +filled +0.537 0.247 0.902 nodecolor +0.537 0.247 0.902 nodecolor +newpath 150 180 moveto +66 180 lineto +66 144 lineto +150 144 lineto +closepath +fill +0.537 0.247 0.902 nodecolor +newpath 150 180 moveto +66 180 lineto +66 144 lineto +150 144 lineto +closepath +stroke +gsave 10 dict begin +0.000 0.000 0.000 nodecolor +73 157 moveto +(Aggregate\(\)) +[9.84 6.96 7.2 4.8 6.24 6.72 6.24 3.84 6.24 4.56 4.56] +xshow +end grestore +end grestore +% HomogeneousAggregate(a:Type)->Aggregate() +newpath 108 216 moveto +108 208 108 199 108 190 curveto +stroke +gsave 10 dict begin +solid +1 setlinewidth +0.000 0.000 0.000 edgecolor +newpath 112 190 moveto +108 180 lineto +105 190 lineto +closepath +fill +0.000 0.000 0.000 edgecolor +newpath 112 190 moveto +108 180 lineto +105 190 lineto +closepath +stroke +end grestore +% Type() +[ /Rect [ 81 72 135 108 ] + /Border [ 0 0 0 ] + /Action << /Subtype /URI /URI (books/bookvol10.pamphlet) >> + /Subtype /Link +/ANN pdfmark +gsave 10 dict begin +filled +0.537 0.247 0.902 nodecolor +0.537 0.247 0.902 nodecolor +newpath 135 108 moveto +81 108 lineto +81 72 lineto +135 72 lineto +closepath +fill +0.537 0.247 0.902 nodecolor +newpath 135 108 moveto +81 108 lineto +81 72 lineto +135 72 lineto +closepath +stroke +gsave 10 dict begin +0.000 0.000 0.000 nodecolor +89 85 moveto +(Type\(\)) +[7.2 6.96 6.96 6.24 4.56 4.56] +xshow +end grestore +end grestore +% Aggregate()->Type() +newpath 108 144 moveto +108 136 108 127 108 118 curveto +stroke +gsave 10 dict begin +solid +1 setlinewidth +0.000 0.000 0.000 edgecolor +newpath 112 118 moveto +108 108 lineto +105 118 lineto +closepath +fill +0.000 0.000 0.000 edgecolor +newpath 112 118 moveto +108 108 lineto +105 118 lineto +closepath +stroke +end grestore +% Category +[ /Rect [ 74 0 142 36 ] + /Border [ 0 0 0 ] + /Action << /Subtype /URI /URI (books/bookvol10.pamphlet) >> + /Subtype /Link +/ANN pdfmark +gsave 10 dict begin +filled +0.537 0.247 0.902 nodecolor +0.537 0.247 0.902 nodecolor +newpath 142 36 moveto +74 36 lineto +74 0 lineto +142 0 lineto +closepath +fill +0.537 0.247 0.902 nodecolor +newpath 142 36 moveto +74 36 lineto +74 0 lineto +142 0 lineto +closepath +stroke +gsave 10 dict begin +0.000 0.000 0.000 nodecolor +82 13 moveto +(Category) +[9.36 6.24 3.84 6.24 6.96 6.96 5.04 6.96] +xshow +end grestore +end grestore +% Type()->Category +newpath 108 72 moveto +108 64 108 55 108 46 curveto +stroke +gsave 10 dict begin +solid +1 setlinewidth +0.000 0.000 0.000 edgecolor +newpath 112 46 moveto +108 36 lineto +105 46 lineto +closepath +fill +0.000 0.000 0.000 edgecolor +newpath 112 46 moveto +108 36 lineto +105 46 lineto +closepath +stroke +end grestore +endpage +showpage +grestore +%%PageTrailer +%%EndPage: 1 +%%Trailer +%%Pages: 1 +end +restore +%%EOF diff --git a/books/ps/v10collection.ps b/books/ps/v10collection.ps new file mode 100644 index 0000000..c9c5e27 --- /dev/null +++ b/books/ps/v10collection.ps @@ -0,0 +1,452 @@ +%!PS-Adobe-2.0 +%%Creator: dot version 2.8 (Thu Sep 14 20:34:11 UTC 2006) +%%For: (root) root +%%Title: pic +%%Pages: (atend) +%%BoundingBox: 36 36 246 368 +%%EndComments +save +%%BeginProlog +/DotDict 200 dict def +DotDict begin + +/setupLatin1 { +mark +/EncodingVector 256 array def + EncodingVector 0 + +ISOLatin1Encoding 0 255 getinterval putinterval +EncodingVector 45 /hyphen put + +% Set up ISO Latin 1 character encoding +/starnetISO { + dup dup findfont dup length dict begin + { 1 index /FID ne { def }{ pop pop } ifelse + } forall + /Encoding EncodingVector def + currentdict end definefont +} def +/Times-Roman starnetISO def +/Times-Italic starnetISO def +/Times-Bold starnetISO def +/Times-BoldItalic starnetISO def +/Helvetica starnetISO def +/Helvetica-Oblique starnetISO def +/Helvetica-Bold starnetISO def +/Helvetica-BoldOblique starnetISO def +/Courier starnetISO def +/Courier-Oblique starnetISO def +/Courier-Bold starnetISO def +/Courier-BoldOblique starnetISO def +cleartomark +} bind def + +%%BeginResource: procset graphviz 0 0 +/coord-font-family /Times-Roman def +/default-font-family /Times-Roman def +/coordfont coord-font-family findfont 8 scalefont def + +/InvScaleFactor 1.0 def +/set_scale { + dup 1 exch div /InvScaleFactor exch def + dup scale +} bind def + +% styles +/solid { [] 0 setdash } bind def +/dashed { [9 InvScaleFactor mul dup ] 0 setdash } bind def +/dotted { [1 InvScaleFactor mul 6 InvScaleFactor mul] 0 setdash } bind def +/invis {/fill {newpath} def /stroke {newpath} def /show {pop newpath} def} bind def +/bold { 2 setlinewidth } bind def +/filled { } bind def +/unfilled { } bind def +/rounded { } bind def +/diagonals { } bind def + +% hooks for setting color +/nodecolor { sethsbcolor } bind def +/edgecolor { sethsbcolor } bind def +/graphcolor { sethsbcolor } bind def +/nopcolor {pop pop pop} bind def + +/beginpage { % i j npages + /npages exch def + /j exch def + /i exch def + /str 10 string def + npages 1 gt { + gsave + coordfont setfont + 0 0 moveto + (\() show i str cvs show (,) show j str cvs show (\)) show + grestore + } if +} bind def + +/set_font { + findfont exch + scalefont setfont +} def + +% draw aligned label in bounding box aligned to current point +/alignedtext { % width adj text + /text exch def + /adj exch def + /width exch def + gsave + width 0 gt { + text stringwidth pop adj mul 0 rmoveto + } if + [] 0 setdash + text show + grestore +} def + +/boxprim { % xcorner ycorner xsize ysize + 4 2 roll + moveto + 2 copy + exch 0 rlineto + 0 exch rlineto + pop neg 0 rlineto + closepath +} bind def + +/ellipse_path { + /ry exch def + /rx exch def + /y exch def + /x exch def + matrix currentmatrix + newpath + x y translate + rx ry scale + 0 0 1 0 360 arc + setmatrix +} bind def + +/endpage { showpage } bind def +/showpage { } def + +/layercolorseq + [ % layer color sequence - darkest to lightest + [0 0 0] + [.2 .8 .8] + [.4 .8 .8] + [.6 .8 .8] + [.8 .8 .8] + ] +def + +/layerlen layercolorseq length def + +/setlayer {/maxlayer exch def /curlayer exch def + layercolorseq curlayer 1 sub layerlen mod get + aload pop sethsbcolor + /nodecolor {nopcolor} def + /edgecolor {nopcolor} def + /graphcolor {nopcolor} def +} bind def + +/onlayer { curlayer ne {invis} if } def + +/onlayers { + /myupper exch def + /mylower exch def + curlayer mylower lt + curlayer myupper gt + or + {invis} if +} def + +/curlayer 0 def + +%%EndResource +%%EndProlog +%%BeginSetup +14 default-font-family set_font +1 setmiterlimit +% /arrowlength 10 def +% /arrowwidth 5 def + +% make sure pdfmark is harmless for PS-interpreters other than Distiller +/pdfmark where {pop} {userdict /pdfmark /cleartomark load put} ifelse +% make '<<' and '>>' safe on PS Level 1 devices +/languagelevel where {pop languagelevel}{1} ifelse +2 lt { + userdict (<<) cvn ([) cvn load put + userdict (>>) cvn ([) cvn load put +} if + +%%EndSetup +%%Page: 1 1 +%%PageBoundingBox: 36 36 246 368 +%%PageOrientation: Portrait +gsave +36 36 210 332 boxprim clip newpath +36 36 translate +0 0 1 beginpage +1.0000 set_scale +4 4 translate 0 rotate +0.167 0.600 1.000 graphcolor +0.167 0.600 1.000 graphcolor +newpath -6 -6 moveto +-6 330 lineto +208 330 lineto +208 -6 lineto +closepath +fill +0.167 0.600 1.000 graphcolor +newpath -6 -6 moveto +-6 330 lineto +208 330 lineto +208 -6 lineto +closepath +stroke +0.000 0.000 0.000 graphcolor +14.00 /Times-Roman set_font +% Collection(a:Type) +[ /Rect [ 41 288 161 324 ] + /Border [ 0 0 0 ] + /Action << /Subtype /URI /URI (books/bookvol10.pamphlet) >> + /Subtype /Link +/ANN pdfmark +gsave 10 dict begin +filled +0.537 0.247 0.902 nodecolor +0.537 0.247 0.902 nodecolor +newpath 161 324 moveto +41 324 lineto +41 288 lineto +161 288 lineto +closepath +fill +0.537 0.247 0.902 nodecolor +newpath 161 324 moveto +41 324 lineto +41 288 lineto +161 288 lineto +closepath +stroke +gsave 10 dict begin +0.000 0.000 0.000 nodecolor +48 301 moveto +(Collection\(a:Type\)) +[9.36 6.96 3.84 3.84 6.24 6.24 3.84 3.84 6.96 6.96 4.56 6.24 3.84 7.2 6.96 6.96 6.24 4.56] +xshow +end grestore +end grestore +% HomogeneousAggregate(a:Type) +[ /Rect [ 0 216 202 252 ] + /Border [ 0 0 0 ] + /Action << /Subtype /URI /URI (books/bookvol10.pamphlet) >> + /Subtype /Link +/ANN pdfmark +gsave 10 dict begin +filled +0.537 0.247 0.902 nodecolor +0.537 0.247 0.902 nodecolor +newpath 202 252 moveto +0 252 lineto +0 216 lineto +202 216 lineto +closepath +fill +0.537 0.247 0.902 nodecolor +newpath 202 252 moveto +0 252 lineto +0 216 lineto +202 216 lineto +closepath +stroke +gsave 10 dict begin +0.000 0.000 0.000 nodecolor +7 229 moveto +(HomogeneousAggregate\(a:Type\)) +[10.08 6.96 10.8 6.96 6.72 6.24 6.96 6.24 6.96 6.96 5.52 9.84 6.96 7.2 4.8 6.24 6.72 6.24 3.84 6.24 4.56 6.24 3.84 7.2 6.96 6.96 6.24 4.56] +xshow +end grestore +end grestore +% Collection(a:Type)->HomogeneousAggregate(a:Type) +newpath 101 288 moveto +101 280 101 271 101 262 curveto +stroke +gsave 10 dict begin +solid +1 setlinewidth +0.000 0.000 0.000 edgecolor +newpath 105 262 moveto +101 252 lineto +98 262 lineto +closepath +fill +0.000 0.000 0.000 edgecolor +newpath 105 262 moveto +101 252 lineto +98 262 lineto +closepath +stroke +end grestore +% Aggregate() +[ /Rect [ 59 144 143 180 ] + /Border [ 0 0 0 ] + /Action << /Subtype /URI /URI (books/bookvol10.pamphlet) >> + /Subtype /Link +/ANN pdfmark +gsave 10 dict begin +filled +0.537 0.247 0.902 nodecolor +0.537 0.247 0.902 nodecolor +newpath 143 180 moveto +59 180 lineto +59 144 lineto +143 144 lineto +closepath +fill +0.537 0.247 0.902 nodecolor +newpath 143 180 moveto +59 180 lineto +59 144 lineto +143 144 lineto +closepath +stroke +gsave 10 dict begin +0.000 0.000 0.000 nodecolor +66 157 moveto +(Aggregate\(\)) +[9.84 6.96 7.2 4.8 6.24 6.72 6.24 3.84 6.24 4.56 4.56] +xshow +end grestore +end grestore +% HomogeneousAggregate(a:Type)->Aggregate() +newpath 101 216 moveto +101 208 101 199 101 190 curveto +stroke +gsave 10 dict begin +solid +1 setlinewidth +0.000 0.000 0.000 edgecolor +newpath 105 190 moveto +101 180 lineto +98 190 lineto +closepath +fill +0.000 0.000 0.000 edgecolor +newpath 105 190 moveto +101 180 lineto +98 190 lineto +closepath +stroke +end grestore +% Type() +[ /Rect [ 74 72 128 108 ] + /Border [ 0 0 0 ] + /Action << /Subtype /URI /URI (books/bookvol10.pamphlet) >> + /Subtype /Link +/ANN pdfmark +gsave 10 dict begin +filled +0.537 0.247 0.902 nodecolor +0.537 0.247 0.902 nodecolor +newpath 128 108 moveto +74 108 lineto +74 72 lineto +128 72 lineto +closepath +fill +0.537 0.247 0.902 nodecolor +newpath 128 108 moveto +74 108 lineto +74 72 lineto +128 72 lineto +closepath +stroke +gsave 10 dict begin +0.000 0.000 0.000 nodecolor +82 85 moveto +(Type\(\)) +[7.2 6.96 6.96 6.24 4.56 4.56] +xshow +end grestore +end grestore +% Aggregate()->Type() +newpath 101 144 moveto +101 136 101 127 101 118 curveto +stroke +gsave 10 dict begin +solid +1 setlinewidth +0.000 0.000 0.000 edgecolor +newpath 105 118 moveto +101 108 lineto +98 118 lineto +closepath +fill +0.000 0.000 0.000 edgecolor +newpath 105 118 moveto +101 108 lineto +98 118 lineto +closepath +stroke +end grestore +% Category +[ /Rect [ 67 0 135 36 ] + /Border [ 0 0 0 ] + /Action << /Subtype /URI /URI (books/bookvol10.pamphlet) >> + /Subtype /Link +/ANN pdfmark +gsave 10 dict begin +filled +0.537 0.247 0.902 nodecolor +0.537 0.247 0.902 nodecolor +newpath 135 36 moveto +67 36 lineto +67 0 lineto +135 0 lineto +closepath +fill +0.537 0.247 0.902 nodecolor +newpath 135 36 moveto +67 36 lineto +67 0 lineto +135 0 lineto +closepath +stroke +gsave 10 dict begin +0.000 0.000 0.000 nodecolor +75 13 moveto +(Category) +[9.36 6.24 3.84 6.24 6.96 6.96 5.04 6.96] +xshow +end grestore +end grestore +% Type()->Category +newpath 101 72 moveto +101 64 101 55 101 46 curveto +stroke +gsave 10 dict begin +solid +1 setlinewidth +0.000 0.000 0.000 edgecolor +newpath 105 46 moveto +101 36 lineto +98 46 lineto +closepath +fill +0.000 0.000 0.000 edgecolor +newpath 105 46 moveto +101 36 lineto +98 46 lineto +closepath +stroke +end grestore +endpage +showpage +grestore +%%PageTrailer +%%EndPage: 1 +%%Trailer +%%Pages: 1 +end +restore +%%EOF diff --git a/books/ps/v10dequeueaggregate.ps b/books/ps/v10dequeueaggregate.ps new file mode 100644 index 0000000..d67a0a0 --- /dev/null +++ b/books/ps/v10dequeueaggregate.ps @@ -0,0 +1,523 @@ +%!PS-Adobe-2.0 +%%Creator: dot version 2.8 (Thu Sep 14 20:34:11 UTC 2006) +%%For: (root) root +%%Title: pic +%%Pages: (atend) +%%BoundingBox: 36 36 372 368 +%%EndComments +save +%%BeginProlog +/DotDict 200 dict def +DotDict begin + +/setupLatin1 { +mark +/EncodingVector 256 array def + EncodingVector 0 + +ISOLatin1Encoding 0 255 getinterval putinterval +EncodingVector 45 /hyphen put + +% Set up ISO Latin 1 character encoding +/starnetISO { + dup dup findfont dup length dict begin + { 1 index /FID ne { def }{ pop pop } ifelse + } forall + /Encoding EncodingVector def + currentdict end definefont +} def +/Times-Roman starnetISO def +/Times-Italic starnetISO def +/Times-Bold starnetISO def +/Times-BoldItalic starnetISO def +/Helvetica starnetISO def +/Helvetica-Oblique starnetISO def +/Helvetica-Bold starnetISO def +/Helvetica-BoldOblique starnetISO def +/Courier starnetISO def +/Courier-Oblique starnetISO def +/Courier-Bold starnetISO def +/Courier-BoldOblique starnetISO def +cleartomark +} bind def + +%%BeginResource: procset graphviz 0 0 +/coord-font-family /Times-Roman def +/default-font-family /Times-Roman def +/coordfont coord-font-family findfont 8 scalefont def + +/InvScaleFactor 1.0 def +/set_scale { + dup 1 exch div /InvScaleFactor exch def + dup scale +} bind def + +% styles +/solid { [] 0 setdash } bind def +/dashed { [9 InvScaleFactor mul dup ] 0 setdash } bind def +/dotted { [1 InvScaleFactor mul 6 InvScaleFactor mul] 0 setdash } bind def +/invis {/fill {newpath} def /stroke {newpath} def /show {pop newpath} def} bind def +/bold { 2 setlinewidth } bind def +/filled { } bind def +/unfilled { } bind def +/rounded { } bind def +/diagonals { } bind def + +% hooks for setting color +/nodecolor { sethsbcolor } bind def +/edgecolor { sethsbcolor } bind def +/graphcolor { sethsbcolor } bind def +/nopcolor {pop pop pop} bind def + +/beginpage { % i j npages + /npages exch def + /j exch def + /i exch def + /str 10 string def + npages 1 gt { + gsave + coordfont setfont + 0 0 moveto + (\() show i str cvs show (,) show j str cvs show (\)) show + grestore + } if +} bind def + +/set_font { + findfont exch + scalefont setfont +} def + +% draw aligned label in bounding box aligned to current point +/alignedtext { % width adj text + /text exch def + /adj exch def + /width exch def + gsave + width 0 gt { + text stringwidth pop adj mul 0 rmoveto + } if + [] 0 setdash + text show + grestore +} def + +/boxprim { % xcorner ycorner xsize ysize + 4 2 roll + moveto + 2 copy + exch 0 rlineto + 0 exch rlineto + pop neg 0 rlineto + closepath +} bind def + +/ellipse_path { + /ry exch def + /rx exch def + /y exch def + /x exch def + matrix currentmatrix + newpath + x y translate + rx ry scale + 0 0 1 0 360 arc + setmatrix +} bind def + +/endpage { showpage } bind def +/showpage { } def + +/layercolorseq + [ % layer color sequence - darkest to lightest + [0 0 0] + [.2 .8 .8] + [.4 .8 .8] + [.6 .8 .8] + [.8 .8 .8] + ] +def + +/layerlen layercolorseq length def + +/setlayer {/maxlayer exch def /curlayer exch def + layercolorseq curlayer 1 sub layerlen mod get + aload pop sethsbcolor + /nodecolor {nopcolor} def + /edgecolor {nopcolor} def + /graphcolor {nopcolor} def +} bind def + +/onlayer { curlayer ne {invis} if } def + +/onlayers { + /myupper exch def + /mylower exch def + curlayer mylower lt + curlayer myupper gt + or + {invis} if +} def + +/curlayer 0 def + +%%EndResource +%%EndProlog +%%BeginSetup +14 default-font-family set_font +1 setmiterlimit +% /arrowlength 10 def +% /arrowwidth 5 def + +% make sure pdfmark is harmless for PS-interpreters other than Distiller +/pdfmark where {pop} {userdict /pdfmark /cleartomark load put} ifelse +% make '<<' and '>>' safe on PS Level 1 devices +/languagelevel where {pop languagelevel}{1} ifelse +2 lt { + userdict (<<) cvn ([) cvn load put + userdict (>>) cvn ([) cvn load put +} if + +%%EndSetup +%%Page: 1 1 +%%PageBoundingBox: 36 36 372 368 +%%PageOrientation: Portrait +gsave +36 36 336 332 boxprim clip newpath +36 36 translate +0 0 1 beginpage +1.0000 set_scale +4 4 translate 0 rotate +0.167 0.600 1.000 graphcolor +0.167 0.600 1.000 graphcolor +newpath -6 -6 moveto +-6 330 lineto +334 330 lineto +334 -6 lineto +closepath +fill +0.167 0.600 1.000 graphcolor +newpath -6 -6 moveto +-6 330 lineto +334 330 lineto +334 -6 lineto +closepath +stroke +0.000 0.000 0.000 graphcolor +14.00 /Times-Roman set_font +% DequeueAggregate(a:Type) +[ /Rect [ 76 288 248 324 ] + /Border [ 0 0 0 ] + /Action << /Subtype /URI /URI (books/bookvol10.pamphlet) >> + /Subtype /Link +/ANN pdfmark +gsave 10 dict begin +filled +0.537 0.247 0.902 nodecolor +0.537 0.247 0.902 nodecolor +newpath 248 324 moveto +76 324 lineto +76 288 lineto +248 288 lineto +closepath +fill +0.537 0.247 0.902 nodecolor +newpath 248 324 moveto +76 324 lineto +76 288 lineto +248 288 lineto +closepath +stroke +gsave 10 dict begin +0.000 0.000 0.000 nodecolor +84 301 moveto +(DequeueAggregate\(a:Type\)) +[10.08 6.24 6.72 6.96 6.24 6.96 6.24 9.84 6.96 7.2 4.8 6.24 6.72 6.24 3.84 6.24 4.56 6.24 3.84 7.2 6.96 6.96 6.24 4.56] +xshow +end grestore +end grestore +% StackAggregate(a:Type) +[ /Rect [ 0 216 152 252 ] + /Border [ 0 0 0 ] + /Action << /Subtype /URI /URI (books/bookvol10.pamphlet) >> + /Subtype /Link +/ANN pdfmark +gsave 10 dict begin +filled +0.537 0.247 0.902 nodecolor +0.537 0.247 0.902 nodecolor +newpath 152 252 moveto +0 252 lineto +0 216 lineto +152 216 lineto +closepath +fill +0.537 0.247 0.902 nodecolor +newpath 152 252 moveto +0 252 lineto +0 216 lineto +152 216 lineto +closepath +stroke +gsave 10 dict begin +0.000 0.000 0.000 nodecolor +8 229 moveto +(StackAggregate\(a:Type\)) +[7.44 4.08 6.24 6 6.96 9.84 6.96 7.2 4.8 6.24 6.72 6.24 3.84 6.24 4.56 6.24 3.84 7.2 6.96 6.96 6.24 4.56] +xshow +end grestore +end grestore +% DequeueAggregate(a:Type)->StackAggregate(a:Type) +newpath 140 288 moveto +129 279 116 268 105 258 curveto +stroke +gsave 10 dict begin +solid +1 setlinewidth +0.000 0.000 0.000 edgecolor +newpath 107 255 moveto +97 252 lineto +103 261 lineto +closepath +fill +0.000 0.000 0.000 edgecolor +newpath 107 255 moveto +97 252 lineto +103 261 lineto +closepath +stroke +end grestore +% QueueAggregate(a:Type) +[ /Rect [ 170 216 328 252 ] + /Border [ 0 0 0 ] + /Action << /Subtype /URI /URI (books/bookvol10.pamphlet) >> + /Subtype /Link +/ANN pdfmark +gsave 10 dict begin +filled +0.537 0.247 0.902 nodecolor +0.537 0.247 0.902 nodecolor +newpath 328 252 moveto +170 252 lineto +170 216 lineto +328 216 lineto +closepath +fill +0.537 0.247 0.902 nodecolor +newpath 328 252 moveto +170 252 lineto +170 216 lineto +328 216 lineto +closepath +stroke +gsave 10 dict begin +0.000 0.000 0.000 nodecolor +178 229 moveto +(QueueAggregate\(a:Type\)) +[10.08 6.96 6.24 6.96 6.24 9.84 6.96 7.2 4.8 6.24 6.72 6.24 3.84 6.24 4.56 6.24 3.84 7.2 6.96 6.96 6.24 4.56] +xshow +end grestore +end grestore +% DequeueAggregate(a:Type)->QueueAggregate(a:Type) +newpath 184 288 moveto +195 279 208 268 219 258 curveto +stroke +gsave 10 dict begin +solid +1 setlinewidth +0.000 0.000 0.000 edgecolor +newpath 221 261 moveto +227 252 lineto +217 255 lineto +closepath +fill +0.000 0.000 0.000 edgecolor +newpath 221 261 moveto +227 252 lineto +217 255 lineto +closepath +stroke +end grestore +% BagAggregate(a:Type) +[ /Rect [ 90 144 234 180 ] + /Border [ 0 0 0 ] + /Action << /Subtype /URI /URI (books/bookvol10.pamphlet) >> + /Subtype /Link +/ANN pdfmark +gsave 10 dict begin +filled +0.537 0.247 0.902 nodecolor +0.537 0.247 0.902 nodecolor +newpath 234 180 moveto +90 180 lineto +90 144 lineto +234 144 lineto +closepath +fill +0.537 0.247 0.902 nodecolor +newpath 234 180 moveto +90 180 lineto +90 144 lineto +234 144 lineto +closepath +stroke +gsave 10 dict begin +0.000 0.000 0.000 nodecolor +97 157 moveto +(BagAggregate\(a:Type\)) +[9.36 6.24 6.96 9.84 6.96 7.2 4.8 6.24 6.72 6.24 3.84 6.24 4.56 6.24 3.84 7.2 6.96 6.96 6.24 4.56] +xshow +end grestore +end grestore +% StackAggregate(a:Type)->BagAggregate(a:Type) +newpath 98 216 moveto +109 207 122 196 133 186 curveto +stroke +gsave 10 dict begin +solid +1 setlinewidth +0.000 0.000 0.000 edgecolor +newpath 135 189 moveto +141 180 lineto +131 183 lineto +closepath +fill +0.000 0.000 0.000 edgecolor +newpath 135 189 moveto +141 180 lineto +131 183 lineto +closepath +stroke +end grestore +% QueueAggregate(a:Type)->BagAggregate(a:Type) +newpath 227 216 moveto +216 207 203 196 192 186 curveto +stroke +gsave 10 dict begin +solid +1 setlinewidth +0.000 0.000 0.000 edgecolor +newpath 194 183 moveto +184 180 lineto +190 189 lineto +closepath +fill +0.000 0.000 0.000 edgecolor +newpath 194 183 moveto +184 180 lineto +190 189 lineto +closepath +stroke +end grestore +% HomogeneousAggregate(a:Type) +[ /Rect [ 61 72 263 108 ] + /Border [ 0 0 0 ] + /Action << /Subtype /URI /URI (books/bookvol10.pamphlet) >> + /Subtype /Link +/ANN pdfmark +gsave 10 dict begin +filled +0.537 0.247 0.902 nodecolor +0.537 0.247 0.902 nodecolor +newpath 263 108 moveto +61 108 lineto +61 72 lineto +263 72 lineto +closepath +fill +0.537 0.247 0.902 nodecolor +newpath 263 108 moveto +61 108 lineto +61 72 lineto +263 72 lineto +closepath +stroke +gsave 10 dict begin +0.000 0.000 0.000 nodecolor +68 85 moveto +(HomogeneousAggregate\(a:Type\)) +[10.08 6.96 10.8 6.96 6.72 6.24 6.96 6.24 6.96 6.96 5.52 9.84 6.96 7.2 4.8 6.24 6.72 6.24 3.84 6.24 4.56 6.24 3.84 7.2 6.96 6.96 6.24 4.56] +xshow +end grestore +end grestore +% BagAggregate(a:Type)->HomogeneousAggregate(a:Type) +newpath 162 144 moveto +162 136 162 127 162 118 curveto +stroke +gsave 10 dict begin +solid +1 setlinewidth +0.000 0.000 0.000 edgecolor +newpath 166 118 moveto +162 108 lineto +159 118 lineto +closepath +fill +0.000 0.000 0.000 edgecolor +newpath 166 118 moveto +162 108 lineto +159 118 lineto +closepath +stroke +end grestore +% ... +[ /Rect [ 135 0 189 36 ] + /Border [ 0 0 0 ] + /Action << /Subtype /URI /URI (books/bookvol10.pamphlet) >> + /Subtype /Link +/ANN pdfmark +gsave 10 dict begin +filled +0.537 0.247 0.902 nodecolor +0.537 0.247 0.902 nodecolor +newpath 189 36 moveto +135 36 lineto +135 0 lineto +189 0 lineto +closepath +fill +0.537 0.247 0.902 nodecolor +newpath 189 36 moveto +135 36 lineto +135 0 lineto +189 0 lineto +closepath +stroke +gsave 10 dict begin +0.000 0.000 0.000 nodecolor +156 13 moveto +(...) +[3.6 3.6 3.6] +xshow +end grestore +end grestore +% HomogeneousAggregate(a:Type)->... +newpath 162 72 moveto +162 64 162 55 162 46 curveto +stroke +gsave 10 dict begin +solid +1 setlinewidth +0.000 0.000 0.000 edgecolor +newpath 166 46 moveto +162 36 lineto +159 46 lineto +closepath +fill +0.000 0.000 0.000 edgecolor +newpath 166 46 moveto +162 36 lineto +159 46 lineto +closepath +stroke +end grestore +endpage +showpage +grestore +%%PageTrailer +%%EndPage: 1 +%%Trailer +%%Pages: 1 +end +restore +%%EOF diff --git a/books/ps/v10dictionary.ps b/books/ps/v10dictionary.ps new file mode 100644 index 0000000..cc12edb --- /dev/null +++ b/books/ps/v10dictionary.ps @@ -0,0 +1,625 @@ +%!PS-Adobe-2.0 +%%Creator: dot version 2.8 (Thu Sep 14 20:34:11 UTC 2006) +%%For: (root) root +%%Title: pic +%%Pages: (atend) +%%BoundingBox: 36 36 410 440 +%%EndComments +save +%%BeginProlog +/DotDict 200 dict def +DotDict begin + +/setupLatin1 { +mark +/EncodingVector 256 array def + EncodingVector 0 + +ISOLatin1Encoding 0 255 getinterval putinterval +EncodingVector 45 /hyphen put + +% Set up ISO Latin 1 character encoding +/starnetISO { + dup dup findfont dup length dict begin + { 1 index /FID ne { def }{ pop pop } ifelse + } forall + /Encoding EncodingVector def + currentdict end definefont +} def +/Times-Roman starnetISO def +/Times-Italic starnetISO def +/Times-Bold starnetISO def +/Times-BoldItalic starnetISO def +/Helvetica starnetISO def +/Helvetica-Oblique starnetISO def +/Helvetica-Bold starnetISO def +/Helvetica-BoldOblique starnetISO def +/Courier starnetISO def +/Courier-Oblique starnetISO def +/Courier-Bold starnetISO def +/Courier-BoldOblique starnetISO def +cleartomark +} bind def + +%%BeginResource: procset graphviz 0 0 +/coord-font-family /Times-Roman def +/default-font-family /Times-Roman def +/coordfont coord-font-family findfont 8 scalefont def + +/InvScaleFactor 1.0 def +/set_scale { + dup 1 exch div /InvScaleFactor exch def + dup scale +} bind def + +% styles +/solid { [] 0 setdash } bind def +/dashed { [9 InvScaleFactor mul dup ] 0 setdash } bind def +/dotted { [1 InvScaleFactor mul 6 InvScaleFactor mul] 0 setdash } bind def +/invis {/fill {newpath} def /stroke {newpath} def /show {pop newpath} def} bind def +/bold { 2 setlinewidth } bind def +/filled { } bind def +/unfilled { } bind def +/rounded { } bind def +/diagonals { } bind def + +% hooks for setting color +/nodecolor { sethsbcolor } bind def +/edgecolor { sethsbcolor } bind def +/graphcolor { sethsbcolor } bind def +/nopcolor {pop pop pop} bind def + +/beginpage { % i j npages + /npages exch def + /j exch def + /i exch def + /str 10 string def + npages 1 gt { + gsave + coordfont setfont + 0 0 moveto + (\() show i str cvs show (,) show j str cvs show (\)) show + grestore + } if +} bind def + +/set_font { + findfont exch + scalefont setfont +} def + +% draw aligned label in bounding box aligned to current point +/alignedtext { % width adj text + /text exch def + /adj exch def + /width exch def + gsave + width 0 gt { + text stringwidth pop adj mul 0 rmoveto + } if + [] 0 setdash + text show + grestore +} def + +/boxprim { % xcorner ycorner xsize ysize + 4 2 roll + moveto + 2 copy + exch 0 rlineto + 0 exch rlineto + pop neg 0 rlineto + closepath +} bind def + +/ellipse_path { + /ry exch def + /rx exch def + /y exch def + /x exch def + matrix currentmatrix + newpath + x y translate + rx ry scale + 0 0 1 0 360 arc + setmatrix +} bind def + +/endpage { showpage } bind def +/showpage { } def + +/layercolorseq + [ % layer color sequence - darkest to lightest + [0 0 0] + [.2 .8 .8] + [.4 .8 .8] + [.6 .8 .8] + [.8 .8 .8] + ] +def + +/layerlen layercolorseq length def + +/setlayer {/maxlayer exch def /curlayer exch def + layercolorseq curlayer 1 sub layerlen mod get + aload pop sethsbcolor + /nodecolor {nopcolor} def + /edgecolor {nopcolor} def + /graphcolor {nopcolor} def +} bind def + +/onlayer { curlayer ne {invis} if } def + +/onlayers { + /myupper exch def + /mylower exch def + curlayer mylower lt + curlayer myupper gt + or + {invis} if +} def + +/curlayer 0 def + +%%EndResource +%%EndProlog +%%BeginSetup +14 default-font-family set_font +1 setmiterlimit +% /arrowlength 10 def +% /arrowwidth 5 def + +% make sure pdfmark is harmless for PS-interpreters other than Distiller +/pdfmark where {pop} {userdict /pdfmark /cleartomark load put} ifelse +% make '<<' and '>>' safe on PS Level 1 devices +/languagelevel where {pop languagelevel}{1} ifelse +2 lt { + userdict (<<) cvn ([) cvn load put + userdict (>>) cvn ([) cvn load put +} if + +%%EndSetup +%%Page: 1 1 +%%PageBoundingBox: 36 36 410 440 +%%PageOrientation: Portrait +gsave +36 36 374 404 boxprim clip newpath +36 36 translate +0 0 1 beginpage +1.0000 set_scale +4 4 translate 0 rotate +0.167 0.600 1.000 graphcolor +0.167 0.600 1.000 graphcolor +newpath -6 -6 moveto +-6 402 lineto +372 402 lineto +372 -6 lineto +closepath +fill +0.167 0.600 1.000 graphcolor +newpath -6 -6 moveto +-6 402 lineto +372 402 lineto +372 -6 lineto +closepath +stroke +0.000 0.000 0.000 graphcolor +14.00 /Times-Roman set_font +% Dictionary(a:SetCategory) +[ /Rect [ 106 360 272 396 ] + /Border [ 0 0 0 ] + /Action << /Subtype /URI /URI (books/bookvol10.pamphlet) >> + /Subtype /Link +/ANN pdfmark +gsave 10 dict begin +filled +0.537 0.247 0.902 nodecolor +0.537 0.247 0.902 nodecolor +newpath 272 396 moveto +106 396 lineto +106 360 lineto +272 360 lineto +closepath +fill +0.537 0.247 0.902 nodecolor +newpath 272 396 moveto +106 396 lineto +106 360 lineto +272 360 lineto +closepath +stroke +gsave 10 dict begin +0.000 0.000 0.000 nodecolor +114 373 moveto +(Dictionary\(a:SetCategory\)) +[10.08 3.84 6.24 3.84 3.84 6.96 6.96 6.24 5.04 6.96 4.56 6.24 3.84 7.68 6 3.84 9.36 6.24 3.84 6.24 6.96 6.96 5.04 6.96 4.56] +xshow +end grestore +end grestore +% DictionaryOperations(a:SetCategory) +[ /Rect [ 76 288 302 324 ] + /Border [ 0 0 0 ] + /Action << /Subtype /URI /URI (books/bookvol10.pamphlet) >> + /Subtype /Link +/ANN pdfmark +gsave 10 dict begin +filled +0.537 0.247 0.902 nodecolor +0.537 0.247 0.902 nodecolor +newpath 302 324 moveto +76 324 lineto +76 288 lineto +302 288 lineto +closepath +fill +0.537 0.247 0.902 nodecolor +newpath 302 324 moveto +76 324 lineto +76 288 lineto +302 288 lineto +closepath +stroke +gsave 10 dict begin +0.000 0.000 0.000 nodecolor +83 301 moveto +(DictionaryOperations\(a:SetCategory\)) +[10.08 3.84 6.24 3.84 3.84 6.96 6.96 6.24 5.04 6.96 10.08 6.96 6.24 4.8 6.24 3.84 3.84 6.96 6.96 5.52 4.56 6.24 3.84 7.68 6 3.84 9.36 6.24 3.84 6.24 6.96 6.96 5.04 6.96 4.56] +xshow +end grestore +end grestore +% Dictionary(a:SetCategory)->DictionaryOperations(a:SetCategory) +newpath 189 360 moveto +189 352 189 343 189 334 curveto +stroke +gsave 10 dict begin +solid +1 setlinewidth +0.000 0.000 0.000 edgecolor +newpath 193 334 moveto +189 324 lineto +186 334 lineto +closepath +fill +0.000 0.000 0.000 edgecolor +newpath 193 334 moveto +189 324 lineto +186 334 lineto +closepath +stroke +end grestore +% BagAggregate(a:SetCategory) +[ /Rect [ 0 216 186 252 ] + /Border [ 0 0 0 ] + /Action << /Subtype /URI /URI (books/bookvol10.pamphlet) >> + /Subtype /Link +/ANN pdfmark +gsave 10 dict begin +filled +0.404 0.667 0.545 nodecolor +0.404 0.667 0.545 nodecolor +newpath 186 252 moveto +0 252 lineto +0 216 lineto +186 216 lineto +closepath +fill +0.404 0.667 0.545 nodecolor +newpath 186 252 moveto +0 252 lineto +0 216 lineto +186 216 lineto +closepath +stroke +gsave 10 dict begin +0.000 0.000 0.000 nodecolor +7 229 moveto +(BagAggregate\(a:SetCategory\)) +[9.36 6.24 6.96 9.84 6.96 7.2 4.8 6.24 6.72 6.24 3.84 6.24 4.56 6.24 3.84 7.68 6 3.84 9.36 6.24 3.84 6.24 6.96 6.96 5.04 6.96 4.56] +xshow +end grestore +end grestore +% DictionaryOperations(a:SetCategory)->BagAggregate(a:SetCategory) +newpath 165 288 moveto +153 279 138 268 125 258 curveto +stroke +gsave 10 dict begin +solid +1 setlinewidth +0.000 0.000 0.000 edgecolor +newpath 127 255 moveto +117 252 lineto +123 261 lineto +closepath +fill +0.000 0.000 0.000 edgecolor +newpath 127 255 moveto +117 252 lineto +123 261 lineto +closepath +stroke +end grestore +% Collection(a:SetCategory) +[ /Rect [ 204 216 366 252 ] + /Border [ 0 0 0 ] + /Action << /Subtype /URI /URI (books/bookvol10.pamphlet) >> + /Subtype /Link +/ANN pdfmark +gsave 10 dict begin +filled +0.404 0.667 0.545 nodecolor +0.404 0.667 0.545 nodecolor +newpath 366 252 moveto +204 252 lineto +204 216 lineto +366 216 lineto +closepath +fill +0.404 0.667 0.545 nodecolor +newpath 366 252 moveto +204 252 lineto +204 216 lineto +366 216 lineto +closepath +stroke +gsave 10 dict begin +0.000 0.000 0.000 nodecolor +211 229 moveto +(Collection\(a:SetCategory\)) +[9.36 6.96 3.84 3.84 6.24 6.24 3.84 3.84 6.96 6.96 4.56 6.24 3.84 7.68 6 3.84 9.36 6.24 3.84 6.24 6.96 6.96 5.04 6.96 4.56] +xshow +end grestore +end grestore +% DictionaryOperations(a:SetCategory)->Collection(a:SetCategory) +newpath 213 288 moveto +225 279 240 268 253 258 curveto +stroke +gsave 10 dict begin +solid +1 setlinewidth +0.000 0.000 0.000 edgecolor +newpath 255 261 moveto +261 252 lineto +251 255 lineto +closepath +fill +0.000 0.000 0.000 edgecolor +newpath 255 261 moveto +261 252 lineto +251 255 lineto +closepath +stroke +end grestore +% BagAggregate(a:Type) +[ /Rect [ 31 144 175 180 ] + /Border [ 0 0 0 ] + /Action << /Subtype /URI /URI (books/bookvol10.pamphlet) >> + /Subtype /Link +/ANN pdfmark +gsave 10 dict begin +filled +0.537 0.247 0.902 nodecolor +0.537 0.247 0.902 nodecolor +newpath 175 180 moveto +31 180 lineto +31 144 lineto +175 144 lineto +closepath +fill +0.537 0.247 0.902 nodecolor +newpath 175 180 moveto +31 180 lineto +31 144 lineto +175 144 lineto +closepath +stroke +gsave 10 dict begin +0.000 0.000 0.000 nodecolor +38 157 moveto +(BagAggregate\(a:Type\)) +[9.36 6.24 6.96 9.84 6.96 7.2 4.8 6.24 6.72 6.24 3.84 6.24 4.56 6.24 3.84 7.2 6.96 6.96 6.24 4.56] +xshow +end grestore +end grestore +% BagAggregate(a:SetCategory)->BagAggregate(a:Type) +newpath 96 216 moveto +97 208 98 199 99 190 curveto +stroke +gsave 10 dict begin +solid +1 setlinewidth +0.000 0.000 0.000 edgecolor +newpath 102 190 moveto +100 180 lineto +96 190 lineto +closepath +fill +0.000 0.000 0.000 edgecolor +newpath 102 190 moveto +100 180 lineto +96 190 lineto +closepath +stroke +end grestore +% Collection(a:Type) +[ /Rect [ 214 144 334 180 ] + /Border [ 0 0 0 ] + /Action << /Subtype /URI /URI (books/bookvol10.pamphlet) >> + /Subtype /Link +/ANN pdfmark +gsave 10 dict begin +filled +0.537 0.247 0.902 nodecolor +0.537 0.247 0.902 nodecolor +newpath 334 180 moveto +214 180 lineto +214 144 lineto +334 144 lineto +closepath +fill +0.537 0.247 0.902 nodecolor +newpath 334 180 moveto +214 180 lineto +214 144 lineto +334 144 lineto +closepath +stroke +gsave 10 dict begin +0.000 0.000 0.000 nodecolor +221 157 moveto +(Collection\(a:Type\)) +[9.36 6.96 3.84 3.84 6.24 6.24 3.84 3.84 6.96 6.96 4.56 6.24 3.84 7.2 6.96 6.96 6.24 4.56] +xshow +end grestore +end grestore +% Collection(a:SetCategory)->Collection(a:Type) +newpath 282 216 moveto +281 208 279 199 278 190 curveto +stroke +gsave 10 dict begin +solid +1 setlinewidth +0.000 0.000 0.000 edgecolor +newpath 281 190 moveto +277 180 lineto +275 190 lineto +closepath +fill +0.000 0.000 0.000 edgecolor +newpath 281 190 moveto +277 180 lineto +275 190 lineto +closepath +stroke +end grestore +% HomogeneousAggregate(a:Type) +[ /Rect [ 87 72 289 108 ] + /Border [ 0 0 0 ] + /Action << /Subtype /URI /URI (books/bookvol10.pamphlet) >> + /Subtype /Link +/ANN pdfmark +gsave 10 dict begin +filled +0.537 0.247 0.902 nodecolor +0.537 0.247 0.902 nodecolor +newpath 289 108 moveto +87 108 lineto +87 72 lineto +289 72 lineto +closepath +fill +0.537 0.247 0.902 nodecolor +newpath 289 108 moveto +87 108 lineto +87 72 lineto +289 72 lineto +closepath +stroke +gsave 10 dict begin +0.000 0.000 0.000 nodecolor +94 85 moveto +(HomogeneousAggregate\(a:Type\)) +[10.08 6.96 10.8 6.96 6.72 6.24 6.96 6.24 6.96 6.96 5.52 9.84 6.96 7.2 4.8 6.24 6.72 6.24 3.84 6.24 4.56 6.24 3.84 7.2 6.96 6.96 6.24 4.56] +xshow +end grestore +end grestore +% BagAggregate(a:Type)->HomogeneousAggregate(a:Type) +newpath 124 144 moveto +135 135 148 124 159 114 curveto +stroke +gsave 10 dict begin +solid +1 setlinewidth +0.000 0.000 0.000 edgecolor +newpath 161 117 moveto +167 108 lineto +157 111 lineto +closepath +fill +0.000 0.000 0.000 edgecolor +newpath 161 117 moveto +167 108 lineto +157 111 lineto +closepath +stroke +end grestore +% ... +[ /Rect [ 161 0 215 36 ] + /Border [ 0 0 0 ] + /Action << /Subtype /URI /URI (books/bookvol10.pamphlet) >> + /Subtype /Link +/ANN pdfmark +gsave 10 dict begin +filled +0.537 0.247 0.902 nodecolor +0.537 0.247 0.902 nodecolor +newpath 215 36 moveto +161 36 lineto +161 0 lineto +215 0 lineto +closepath +fill +0.537 0.247 0.902 nodecolor +newpath 215 36 moveto +161 36 lineto +161 0 lineto +215 0 lineto +closepath +stroke +gsave 10 dict begin +0.000 0.000 0.000 nodecolor +182 13 moveto +(...) +[3.6 3.6 3.6] +xshow +end grestore +end grestore +% HomogeneousAggregate(a:Type)->... +newpath 188 72 moveto +188 64 188 55 188 46 curveto +stroke +gsave 10 dict begin +solid +1 setlinewidth +0.000 0.000 0.000 edgecolor +newpath 192 46 moveto +188 36 lineto +185 46 lineto +closepath +fill +0.000 0.000 0.000 edgecolor +newpath 192 46 moveto +188 36 lineto +185 46 lineto +closepath +stroke +end grestore +% Collection(a:Type)->HomogeneousAggregate(a:Type) +newpath 252 144 moveto +241 135 228 124 217 114 curveto +stroke +gsave 10 dict begin +solid +1 setlinewidth +0.000 0.000 0.000 edgecolor +newpath 219 111 moveto +209 108 lineto +215 117 lineto +closepath +fill +0.000 0.000 0.000 edgecolor +newpath 219 111 moveto +209 108 lineto +215 117 lineto +closepath +stroke +end grestore +endpage +showpage +grestore +%%PageTrailer +%%EndPage: 1 +%%Trailer +%%Pages: 1 +end +restore +%%EOF diff --git a/books/ps/v10dictionaryoperations.ps b/books/ps/v10dictionaryoperations.ps new file mode 100644 index 0000000..77258d3 --- /dev/null +++ b/books/ps/v10dictionaryoperations.ps @@ -0,0 +1,676 @@ +%!PS-Adobe-2.0 +%%Creator: dot version 2.8 (Thu Sep 14 20:34:11 UTC 2006) +%%For: (root) root +%%Title: pic +%%Pages: (atend) +%%BoundingBox: 36 36 410 512 +%%EndComments +save +%%BeginProlog +/DotDict 200 dict def +DotDict begin + +/setupLatin1 { +mark +/EncodingVector 256 array def + EncodingVector 0 + +ISOLatin1Encoding 0 255 getinterval putinterval +EncodingVector 45 /hyphen put + +% Set up ISO Latin 1 character encoding +/starnetISO { + dup dup findfont dup length dict begin + { 1 index /FID ne { def }{ pop pop } ifelse + } forall + /Encoding EncodingVector def + currentdict end definefont +} def +/Times-Roman starnetISO def +/Times-Italic starnetISO def +/Times-Bold starnetISO def +/Times-BoldItalic starnetISO def +/Helvetica starnetISO def +/Helvetica-Oblique starnetISO def +/Helvetica-Bold starnetISO def +/Helvetica-BoldOblique starnetISO def +/Courier starnetISO def +/Courier-Oblique starnetISO def +/Courier-Bold starnetISO def +/Courier-BoldOblique starnetISO def +cleartomark +} bind def + +%%BeginResource: procset graphviz 0 0 +/coord-font-family /Times-Roman def +/default-font-family /Times-Roman def +/coordfont coord-font-family findfont 8 scalefont def + +/InvScaleFactor 1.0 def +/set_scale { + dup 1 exch div /InvScaleFactor exch def + dup scale +} bind def + +% styles +/solid { [] 0 setdash } bind def +/dashed { [9 InvScaleFactor mul dup ] 0 setdash } bind def +/dotted { [1 InvScaleFactor mul 6 InvScaleFactor mul] 0 setdash } bind def +/invis {/fill {newpath} def /stroke {newpath} def /show {pop newpath} def} bind def +/bold { 2 setlinewidth } bind def +/filled { } bind def +/unfilled { } bind def +/rounded { } bind def +/diagonals { } bind def + +% hooks for setting color +/nodecolor { sethsbcolor } bind def +/edgecolor { sethsbcolor } bind def +/graphcolor { sethsbcolor } bind def +/nopcolor {pop pop pop} bind def + +/beginpage { % i j npages + /npages exch def + /j exch def + /i exch def + /str 10 string def + npages 1 gt { + gsave + coordfont setfont + 0 0 moveto + (\() show i str cvs show (,) show j str cvs show (\)) show + grestore + } if +} bind def + +/set_font { + findfont exch + scalefont setfont +} def + +% draw aligned label in bounding box aligned to current point +/alignedtext { % width adj text + /text exch def + /adj exch def + /width exch def + gsave + width 0 gt { + text stringwidth pop adj mul 0 rmoveto + } if + [] 0 setdash + text show + grestore +} def + +/boxprim { % xcorner ycorner xsize ysize + 4 2 roll + moveto + 2 copy + exch 0 rlineto + 0 exch rlineto + pop neg 0 rlineto + closepath +} bind def + +/ellipse_path { + /ry exch def + /rx exch def + /y exch def + /x exch def + matrix currentmatrix + newpath + x y translate + rx ry scale + 0 0 1 0 360 arc + setmatrix +} bind def + +/endpage { showpage } bind def +/showpage { } def + +/layercolorseq + [ % layer color sequence - darkest to lightest + [0 0 0] + [.2 .8 .8] + [.4 .8 .8] + [.6 .8 .8] + [.8 .8 .8] + ] +def + +/layerlen layercolorseq length def + +/setlayer {/maxlayer exch def /curlayer exch def + layercolorseq curlayer 1 sub layerlen mod get + aload pop sethsbcolor + /nodecolor {nopcolor} def + /edgecolor {nopcolor} def + /graphcolor {nopcolor} def +} bind def + +/onlayer { curlayer ne {invis} if } def + +/onlayers { + /myupper exch def + /mylower exch def + curlayer mylower lt + curlayer myupper gt + or + {invis} if +} def + +/curlayer 0 def + +%%EndResource +%%EndProlog +%%BeginSetup +14 default-font-family set_font +1 setmiterlimit +% /arrowlength 10 def +% /arrowwidth 5 def + +% make sure pdfmark is harmless for PS-interpreters other than Distiller +/pdfmark where {pop} {userdict /pdfmark /cleartomark load put} ifelse +% make '<<' and '>>' safe on PS Level 1 devices +/languagelevel where {pop languagelevel}{1} ifelse +2 lt { + userdict (<<) cvn ([) cvn load put + userdict (>>) cvn ([) cvn load put +} if + +%%EndSetup +%%Page: 1 1 +%%PageBoundingBox: 36 36 410 512 +%%PageOrientation: Portrait +gsave +36 36 374 476 boxprim clip newpath +36 36 translate +0 0 1 beginpage +1.0000 set_scale +4 4 translate 0 rotate +0.167 0.600 1.000 graphcolor +0.167 0.600 1.000 graphcolor +newpath -6 -6 moveto +-6 474 lineto +372 474 lineto +372 -6 lineto +closepath +fill +0.167 0.600 1.000 graphcolor +newpath -6 -6 moveto +-6 474 lineto +372 474 lineto +372 -6 lineto +closepath +stroke +0.000 0.000 0.000 graphcolor +14.00 /Times-Roman set_font +% DictionaryOperations(a:SetCategory) +[ /Rect [ 76 432 302 468 ] + /Border [ 0 0 0 ] + /Action << /Subtype /URI /URI (books/bookvol10.pamphlet) >> + /Subtype /Link +/ANN pdfmark +gsave 10 dict begin +filled +0.537 0.247 0.902 nodecolor +0.537 0.247 0.902 nodecolor +newpath 302 468 moveto +76 468 lineto +76 432 lineto +302 432 lineto +closepath +fill +0.537 0.247 0.902 nodecolor +newpath 302 468 moveto +76 468 lineto +76 432 lineto +302 432 lineto +closepath +stroke +gsave 10 dict begin +0.000 0.000 0.000 nodecolor +83 445 moveto +(DictionaryOperations\(a:SetCategory\)) +[10.08 3.84 6.24 3.84 3.84 6.96 6.96 6.24 5.04 6.96 10.08 6.96 6.24 4.8 6.24 3.84 3.84 6.96 6.96 5.52 4.56 6.24 3.84 7.68 6 3.84 9.36 6.24 3.84 6.24 6.96 6.96 5.04 6.96 4.56] +xshow +end grestore +end grestore +% BagAggregate(a:SetCategory) +[ /Rect [ 0 360 186 396 ] + /Border [ 0 0 0 ] + /Action << /Subtype /URI /URI (books/bookvol10.pamphlet) >> + /Subtype /Link +/ANN pdfmark +gsave 10 dict begin +filled +0.404 0.667 0.545 nodecolor +0.404 0.667 0.545 nodecolor +newpath 186 396 moveto +0 396 lineto +0 360 lineto +186 360 lineto +closepath +fill +0.404 0.667 0.545 nodecolor +newpath 186 396 moveto +0 396 lineto +0 360 lineto +186 360 lineto +closepath +stroke +gsave 10 dict begin +0.000 0.000 0.000 nodecolor +7 373 moveto +(BagAggregate\(a:SetCategory\)) +[9.36 6.24 6.96 9.84 6.96 7.2 4.8 6.24 6.72 6.24 3.84 6.24 4.56 6.24 3.84 7.68 6 3.84 9.36 6.24 3.84 6.24 6.96 6.96 5.04 6.96 4.56] +xshow +end grestore +end grestore +% DictionaryOperations(a:SetCategory)->BagAggregate(a:SetCategory) +newpath 165 432 moveto +153 423 138 412 125 402 curveto +stroke +gsave 10 dict begin +solid +1 setlinewidth +0.000 0.000 0.000 edgecolor +newpath 127 399 moveto +117 396 lineto +123 405 lineto +closepath +fill +0.000 0.000 0.000 edgecolor +newpath 127 399 moveto +117 396 lineto +123 405 lineto +closepath +stroke +end grestore +% Collection(a:SetCategory) +[ /Rect [ 204 360 366 396 ] + /Border [ 0 0 0 ] + /Action << /Subtype /URI /URI (books/bookvol10.pamphlet) >> + /Subtype /Link +/ANN pdfmark +gsave 10 dict begin +filled +0.404 0.667 0.545 nodecolor +0.404 0.667 0.545 nodecolor +newpath 366 396 moveto +204 396 lineto +204 360 lineto +366 360 lineto +closepath +fill +0.404 0.667 0.545 nodecolor +newpath 366 396 moveto +204 396 lineto +204 360 lineto +366 360 lineto +closepath +stroke +gsave 10 dict begin +0.000 0.000 0.000 nodecolor +211 373 moveto +(Collection\(a:SetCategory\)) +[9.36 6.96 3.84 3.84 6.24 6.24 3.84 3.84 6.96 6.96 4.56 6.24 3.84 7.68 6 3.84 9.36 6.24 3.84 6.24 6.96 6.96 5.04 6.96 4.56] +xshow +end grestore +end grestore +% DictionaryOperations(a:SetCategory)->Collection(a:SetCategory) +newpath 213 432 moveto +225 423 240 412 253 402 curveto +stroke +gsave 10 dict begin +solid +1 setlinewidth +0.000 0.000 0.000 edgecolor +newpath 255 405 moveto +261 396 lineto +251 399 lineto +closepath +fill +0.000 0.000 0.000 edgecolor +newpath 255 405 moveto +261 396 lineto +251 399 lineto +closepath +stroke +end grestore +% BagAggregate(a:Type) +[ /Rect [ 31 288 175 324 ] + /Border [ 0 0 0 ] + /Action << /Subtype /URI /URI (books/bookvol10.pamphlet) >> + /Subtype /Link +/ANN pdfmark +gsave 10 dict begin +filled +0.537 0.247 0.902 nodecolor +0.537 0.247 0.902 nodecolor +newpath 175 324 moveto +31 324 lineto +31 288 lineto +175 288 lineto +closepath +fill +0.537 0.247 0.902 nodecolor +newpath 175 324 moveto +31 324 lineto +31 288 lineto +175 288 lineto +closepath +stroke +gsave 10 dict begin +0.000 0.000 0.000 nodecolor +38 301 moveto +(BagAggregate\(a:Type\)) +[9.36 6.24 6.96 9.84 6.96 7.2 4.8 6.24 6.72 6.24 3.84 6.24 4.56 6.24 3.84 7.2 6.96 6.96 6.24 4.56] +xshow +end grestore +end grestore +% BagAggregate(a:SetCategory)->BagAggregate(a:Type) +newpath 96 360 moveto +97 352 98 343 99 334 curveto +stroke +gsave 10 dict begin +solid +1 setlinewidth +0.000 0.000 0.000 edgecolor +newpath 102 334 moveto +100 324 lineto +96 334 lineto +closepath +fill +0.000 0.000 0.000 edgecolor +newpath 102 334 moveto +100 324 lineto +96 334 lineto +closepath +stroke +end grestore +% Collection(a:Type) +[ /Rect [ 214 288 334 324 ] + /Border [ 0 0 0 ] + /Action << /Subtype /URI /URI (books/bookvol10.pamphlet) >> + /Subtype /Link +/ANN pdfmark +gsave 10 dict begin +filled +0.537 0.247 0.902 nodecolor +0.537 0.247 0.902 nodecolor +newpath 334 324 moveto +214 324 lineto +214 288 lineto +334 288 lineto +closepath +fill +0.537 0.247 0.902 nodecolor +newpath 334 324 moveto +214 324 lineto +214 288 lineto +334 288 lineto +closepath +stroke +gsave 10 dict begin +0.000 0.000 0.000 nodecolor +221 301 moveto +(Collection\(a:Type\)) +[9.36 6.96 3.84 3.84 6.24 6.24 3.84 3.84 6.96 6.96 4.56 6.24 3.84 7.2 6.96 6.96 6.24 4.56] +xshow +end grestore +end grestore +% Collection(a:SetCategory)->Collection(a:Type) +newpath 282 360 moveto +281 352 279 343 278 334 curveto +stroke +gsave 10 dict begin +solid +1 setlinewidth +0.000 0.000 0.000 edgecolor +newpath 281 334 moveto +277 324 lineto +275 334 lineto +closepath +fill +0.000 0.000 0.000 edgecolor +newpath 281 334 moveto +277 324 lineto +275 334 lineto +closepath +stroke +end grestore +% HomogeneousAggregate(a:Type) +[ /Rect [ 87 216 289 252 ] + /Border [ 0 0 0 ] + /Action << /Subtype /URI /URI (books/bookvol10.pamphlet) >> + /Subtype /Link +/ANN pdfmark +gsave 10 dict begin +filled +0.537 0.247 0.902 nodecolor +0.537 0.247 0.902 nodecolor +newpath 289 252 moveto +87 252 lineto +87 216 lineto +289 216 lineto +closepath +fill +0.537 0.247 0.902 nodecolor +newpath 289 252 moveto +87 252 lineto +87 216 lineto +289 216 lineto +closepath +stroke +gsave 10 dict begin +0.000 0.000 0.000 nodecolor +94 229 moveto +(HomogeneousAggregate\(a:Type\)) +[10.08 6.96 10.8 6.96 6.72 6.24 6.96 6.24 6.96 6.96 5.52 9.84 6.96 7.2 4.8 6.24 6.72 6.24 3.84 6.24 4.56 6.24 3.84 7.2 6.96 6.96 6.24 4.56] +xshow +end grestore +end grestore +% BagAggregate(a:Type)->HomogeneousAggregate(a:Type) +newpath 124 288 moveto +135 279 148 268 159 258 curveto +stroke +gsave 10 dict begin +solid +1 setlinewidth +0.000 0.000 0.000 edgecolor +newpath 161 261 moveto +167 252 lineto +157 255 lineto +closepath +fill +0.000 0.000 0.000 edgecolor +newpath 161 261 moveto +167 252 lineto +157 255 lineto +closepath +stroke +end grestore +% Aggregate() +[ /Rect [ 146 144 230 180 ] + /Border [ 0 0 0 ] + /Action << /Subtype /URI /URI (books/bookvol10.pamphlet) >> + /Subtype /Link +/ANN pdfmark +gsave 10 dict begin +filled +0.537 0.247 0.902 nodecolor +0.537 0.247 0.902 nodecolor +newpath 230 180 moveto +146 180 lineto +146 144 lineto +230 144 lineto +closepath +fill +0.537 0.247 0.902 nodecolor +newpath 230 180 moveto +146 180 lineto +146 144 lineto +230 144 lineto +closepath +stroke +gsave 10 dict begin +0.000 0.000 0.000 nodecolor +153 157 moveto +(Aggregate\(\)) +[9.84 6.96 7.2 4.8 6.24 6.72 6.24 3.84 6.24 4.56 4.56] +xshow +end grestore +end grestore +% HomogeneousAggregate(a:Type)->Aggregate() +newpath 188 216 moveto +188 208 188 199 188 190 curveto +stroke +gsave 10 dict begin +solid +1 setlinewidth +0.000 0.000 0.000 edgecolor +newpath 192 190 moveto +188 180 lineto +185 190 lineto +closepath +fill +0.000 0.000 0.000 edgecolor +newpath 192 190 moveto +188 180 lineto +185 190 lineto +closepath +stroke +end grestore +% Collection(a:Type)->HomogeneousAggregate(a:Type) +newpath 252 288 moveto +241 279 228 268 217 258 curveto +stroke +gsave 10 dict begin +solid +1 setlinewidth +0.000 0.000 0.000 edgecolor +newpath 219 255 moveto +209 252 lineto +215 261 lineto +closepath +fill +0.000 0.000 0.000 edgecolor +newpath 219 255 moveto +209 252 lineto +215 261 lineto +closepath +stroke +end grestore +% Type() +[ /Rect [ 161 72 215 108 ] + /Border [ 0 0 0 ] + /Action << /Subtype /URI /URI (books/bookvol10.pamphlet) >> + /Subtype /Link +/ANN pdfmark +gsave 10 dict begin +filled +0.537 0.247 0.902 nodecolor +0.537 0.247 0.902 nodecolor +newpath 215 108 moveto +161 108 lineto +161 72 lineto +215 72 lineto +closepath +fill +0.537 0.247 0.902 nodecolor +newpath 215 108 moveto +161 108 lineto +161 72 lineto +215 72 lineto +closepath +stroke +gsave 10 dict begin +0.000 0.000 0.000 nodecolor +169 85 moveto +(Type\(\)) +[7.2 6.96 6.96 6.24 4.56 4.56] +xshow +end grestore +end grestore +% Aggregate()->Type() +newpath 188 144 moveto +188 136 188 127 188 118 curveto +stroke +gsave 10 dict begin +solid +1 setlinewidth +0.000 0.000 0.000 edgecolor +newpath 192 118 moveto +188 108 lineto +185 118 lineto +closepath +fill +0.000 0.000 0.000 edgecolor +newpath 192 118 moveto +188 108 lineto +185 118 lineto +closepath +stroke +end grestore +% Category +[ /Rect [ 154 0 222 36 ] + /Border [ 0 0 0 ] + /Action << /Subtype /URI /URI (books/bookvol10.pamphlet) >> + /Subtype /Link +/ANN pdfmark +gsave 10 dict begin +filled +0.537 0.247 0.902 nodecolor +0.537 0.247 0.902 nodecolor +newpath 222 36 moveto +154 36 lineto +154 0 lineto +222 0 lineto +closepath +fill +0.537 0.247 0.902 nodecolor +newpath 222 36 moveto +154 36 lineto +154 0 lineto +222 0 lineto +closepath +stroke +gsave 10 dict begin +0.000 0.000 0.000 nodecolor +162 13 moveto +(Category) +[9.36 6.24 3.84 6.24 6.96 6.96 5.04 6.96] +xshow +end grestore +end grestore +% Type()->Category +newpath 188 72 moveto +188 64 188 55 188 46 curveto +stroke +gsave 10 dict begin +solid +1 setlinewidth +0.000 0.000 0.000 edgecolor +newpath 192 46 moveto +188 36 lineto +185 46 lineto +closepath +fill +0.000 0.000 0.000 edgecolor +newpath 192 46 moveto +188 36 lineto +185 46 lineto +closepath +stroke +end grestore +endpage +showpage +grestore +%%PageTrailer +%%EndPage: 1 +%%Trailer +%%Pages: 1 +end +restore +%%EOF diff --git a/books/ps/v10doublylinkedaggregate.ps b/books/ps/v10doublylinkedaggregate.ps new file mode 100644 index 0000000..4e20549 --- /dev/null +++ b/books/ps/v10doublylinkedaggregate.ps @@ -0,0 +1,503 @@ +%!PS-Adobe-2.0 +%%Creator: dot version 2.8 (Thu Sep 14 20:34:11 UTC 2006) +%%For: (root) root +%%Title: pic +%%Pages: (atend) +%%BoundingBox: 36 36 246 440 +%%EndComments +save +%%BeginProlog +/DotDict 200 dict def +DotDict begin + +/setupLatin1 { +mark +/EncodingVector 256 array def + EncodingVector 0 + +ISOLatin1Encoding 0 255 getinterval putinterval +EncodingVector 45 /hyphen put + +% Set up ISO Latin 1 character encoding +/starnetISO { + dup dup findfont dup length dict begin + { 1 index /FID ne { def }{ pop pop } ifelse + } forall + /Encoding EncodingVector def + currentdict end definefont +} def +/Times-Roman starnetISO def +/Times-Italic starnetISO def +/Times-Bold starnetISO def +/Times-BoldItalic starnetISO def +/Helvetica starnetISO def +/Helvetica-Oblique starnetISO def +/Helvetica-Bold starnetISO def +/Helvetica-BoldOblique starnetISO def +/Courier starnetISO def +/Courier-Oblique starnetISO def +/Courier-Bold starnetISO def +/Courier-BoldOblique starnetISO def +cleartomark +} bind def + +%%BeginResource: procset graphviz 0 0 +/coord-font-family /Times-Roman def +/default-font-family /Times-Roman def +/coordfont coord-font-family findfont 8 scalefont def + +/InvScaleFactor 1.0 def +/set_scale { + dup 1 exch div /InvScaleFactor exch def + dup scale +} bind def + +% styles +/solid { [] 0 setdash } bind def +/dashed { [9 InvScaleFactor mul dup ] 0 setdash } bind def +/dotted { [1 InvScaleFactor mul 6 InvScaleFactor mul] 0 setdash } bind def +/invis {/fill {newpath} def /stroke {newpath} def /show {pop newpath} def} bind def +/bold { 2 setlinewidth } bind def +/filled { } bind def +/unfilled { } bind def +/rounded { } bind def +/diagonals { } bind def + +% hooks for setting color +/nodecolor { sethsbcolor } bind def +/edgecolor { sethsbcolor } bind def +/graphcolor { sethsbcolor } bind def +/nopcolor {pop pop pop} bind def + +/beginpage { % i j npages + /npages exch def + /j exch def + /i exch def + /str 10 string def + npages 1 gt { + gsave + coordfont setfont + 0 0 moveto + (\() show i str cvs show (,) show j str cvs show (\)) show + grestore + } if +} bind def + +/set_font { + findfont exch + scalefont setfont +} def + +% draw aligned label in bounding box aligned to current point +/alignedtext { % width adj text + /text exch def + /adj exch def + /width exch def + gsave + width 0 gt { + text stringwidth pop adj mul 0 rmoveto + } if + [] 0 setdash + text show + grestore +} def + +/boxprim { % xcorner ycorner xsize ysize + 4 2 roll + moveto + 2 copy + exch 0 rlineto + 0 exch rlineto + pop neg 0 rlineto + closepath +} bind def + +/ellipse_path { + /ry exch def + /rx exch def + /y exch def + /x exch def + matrix currentmatrix + newpath + x y translate + rx ry scale + 0 0 1 0 360 arc + setmatrix +} bind def + +/endpage { showpage } bind def +/showpage { } def + +/layercolorseq + [ % layer color sequence - darkest to lightest + [0 0 0] + [.2 .8 .8] + [.4 .8 .8] + [.6 .8 .8] + [.8 .8 .8] + ] +def + +/layerlen layercolorseq length def + +/setlayer {/maxlayer exch def /curlayer exch def + layercolorseq curlayer 1 sub layerlen mod get + aload pop sethsbcolor + /nodecolor {nopcolor} def + /edgecolor {nopcolor} def + /graphcolor {nopcolor} def +} bind def + +/onlayer { curlayer ne {invis} if } def + +/onlayers { + /myupper exch def + /mylower exch def + curlayer mylower lt + curlayer myupper gt + or + {invis} if +} def + +/curlayer 0 def + +%%EndResource +%%EndProlog +%%BeginSetup +14 default-font-family set_font +1 setmiterlimit +% /arrowlength 10 def +% /arrowwidth 5 def + +% make sure pdfmark is harmless for PS-interpreters other than Distiller +/pdfmark where {pop} {userdict /pdfmark /cleartomark load put} ifelse +% make '<<' and '>>' safe on PS Level 1 devices +/languagelevel where {pop languagelevel}{1} ifelse +2 lt { + userdict (<<) cvn ([) cvn load put + userdict (>>) cvn ([) cvn load put +} if + +%%EndSetup +%%Page: 1 1 +%%PageBoundingBox: 36 36 246 440 +%%PageOrientation: Portrait +gsave +36 36 210 404 boxprim clip newpath +36 36 translate +0 0 1 beginpage +1.0000 set_scale +4 4 translate 0 rotate +0.167 0.600 1.000 graphcolor +0.167 0.600 1.000 graphcolor +newpath -6 -6 moveto +-6 402 lineto +208 402 lineto +208 -6 lineto +closepath +fill +0.167 0.600 1.000 graphcolor +newpath -6 -6 moveto +-6 402 lineto +208 402 lineto +208 -6 lineto +closepath +stroke +0.000 0.000 0.000 graphcolor +14.00 /Times-Roman set_font +% DoublyLinkedAggregate(a:Type) +[ /Rect [ 0 360 202 396 ] + /Border [ 0 0 0 ] + /Action << /Subtype /URI /URI (books/bookvol10.pamphlet) >> + /Subtype /Link +/ANN pdfmark +gsave 10 dict begin +filled +0.537 0.247 0.902 nodecolor +0.537 0.247 0.902 nodecolor +newpath 202 396 moveto +0 396 lineto +0 360 lineto +202 360 lineto +closepath +fill +0.537 0.247 0.902 nodecolor +newpath 202 396 moveto +0 396 lineto +0 360 lineto +202 360 lineto +closepath +stroke +gsave 10 dict begin +0.000 0.000 0.000 nodecolor +7 373 moveto +(DoublyLinkedAggregate\(a:Type\)) +[10.08 6.96 6.96 6.96 3.6 6.96 8.64 3.84 6.96 6.72 6.24 6.96 9.84 6.96 7.2 4.8 6.24 6.72 6.24 3.84 6.24 4.56 6.24 3.84 7.2 6.96 6.96 6.24 4.56] +xshow +end grestore +end grestore +% RecursiveAggregate(a:Type) +[ /Rect [ 13 288 189 324 ] + /Border [ 0 0 0 ] + /Action << /Subtype /URI /URI (books/bookvol10.pamphlet) >> + /Subtype /Link +/ANN pdfmark +gsave 10 dict begin +filled +0.537 0.247 0.902 nodecolor +0.537 0.247 0.902 nodecolor +newpath 189 324 moveto +13 324 lineto +13 288 lineto +189 288 lineto +closepath +fill +0.537 0.247 0.902 nodecolor +newpath 189 324 moveto +13 324 lineto +13 288 lineto +189 288 lineto +closepath +stroke +gsave 10 dict begin +0.000 0.000 0.000 nodecolor +20 301 moveto +(RecursiveAggregate\(a:Type\)) +[9.12 6.24 6.24 6.96 4.8 5.52 3.84 6.48 6.24 9.84 6.96 7.2 4.8 6.24 6.72 6.24 3.84 6.24 4.56 6.24 3.84 7.2 6.96 6.96 6.24 4.56] +xshow +end grestore +end grestore +% DoublyLinkedAggregate(a:Type)->RecursiveAggregate(a:Type) +newpath 101 360 moveto +101 352 101 343 101 334 curveto +stroke +gsave 10 dict begin +solid +1 setlinewidth +0.000 0.000 0.000 edgecolor +newpath 105 334 moveto +101 324 lineto +98 334 lineto +closepath +fill +0.000 0.000 0.000 edgecolor +newpath 105 334 moveto +101 324 lineto +98 334 lineto +closepath +stroke +end grestore +% HomogeneousAggregate(a:Type) +[ /Rect [ 0 216 202 252 ] + /Border [ 0 0 0 ] + /Action << /Subtype /URI /URI (books/bookvol10.pamphlet) >> + /Subtype /Link +/ANN pdfmark +gsave 10 dict begin +filled +0.537 0.247 0.902 nodecolor +0.537 0.247 0.902 nodecolor +newpath 202 252 moveto +0 252 lineto +0 216 lineto +202 216 lineto +closepath +fill +0.537 0.247 0.902 nodecolor +newpath 202 252 moveto +0 252 lineto +0 216 lineto +202 216 lineto +closepath +stroke +gsave 10 dict begin +0.000 0.000 0.000 nodecolor +7 229 moveto +(HomogeneousAggregate\(a:Type\)) +[10.08 6.96 10.8 6.96 6.72 6.24 6.96 6.24 6.96 6.96 5.52 9.84 6.96 7.2 4.8 6.24 6.72 6.24 3.84 6.24 4.56 6.24 3.84 7.2 6.96 6.96 6.24 4.56] +xshow +end grestore +end grestore +% RecursiveAggregate(a:Type)->HomogeneousAggregate(a:Type) +newpath 101 288 moveto +101 280 101 271 101 262 curveto +stroke +gsave 10 dict begin +solid +1 setlinewidth +0.000 0.000 0.000 edgecolor +newpath 105 262 moveto +101 252 lineto +98 262 lineto +closepath +fill +0.000 0.000 0.000 edgecolor +newpath 105 262 moveto +101 252 lineto +98 262 lineto +closepath +stroke +end grestore +% Aggregate() +[ /Rect [ 59 144 143 180 ] + /Border [ 0 0 0 ] + /Action << /Subtype /URI /URI (books/bookvol10.pamphlet) >> + /Subtype /Link +/ANN pdfmark +gsave 10 dict begin +filled +0.537 0.247 0.902 nodecolor +0.537 0.247 0.902 nodecolor +newpath 143 180 moveto +59 180 lineto +59 144 lineto +143 144 lineto +closepath +fill +0.537 0.247 0.902 nodecolor +newpath 143 180 moveto +59 180 lineto +59 144 lineto +143 144 lineto +closepath +stroke +gsave 10 dict begin +0.000 0.000 0.000 nodecolor +66 157 moveto +(Aggregate\(\)) +[9.84 6.96 7.2 4.8 6.24 6.72 6.24 3.84 6.24 4.56 4.56] +xshow +end grestore +end grestore +% HomogeneousAggregate(a:Type)->Aggregate() +newpath 101 216 moveto +101 208 101 199 101 190 curveto +stroke +gsave 10 dict begin +solid +1 setlinewidth +0.000 0.000 0.000 edgecolor +newpath 105 190 moveto +101 180 lineto +98 190 lineto +closepath +fill +0.000 0.000 0.000 edgecolor +newpath 105 190 moveto +101 180 lineto +98 190 lineto +closepath +stroke +end grestore +% Type() +[ /Rect [ 74 72 128 108 ] + /Border [ 0 0 0 ] + /Action << /Subtype /URI /URI (books/bookvol10.pamphlet) >> + /Subtype /Link +/ANN pdfmark +gsave 10 dict begin +filled +0.537 0.247 0.902 nodecolor +0.537 0.247 0.902 nodecolor +newpath 128 108 moveto +74 108 lineto +74 72 lineto +128 72 lineto +closepath +fill +0.537 0.247 0.902 nodecolor +newpath 128 108 moveto +74 108 lineto +74 72 lineto +128 72 lineto +closepath +stroke +gsave 10 dict begin +0.000 0.000 0.000 nodecolor +82 85 moveto +(Type\(\)) +[7.2 6.96 6.96 6.24 4.56 4.56] +xshow +end grestore +end grestore +% Aggregate()->Type() +newpath 101 144 moveto +101 136 101 127 101 118 curveto +stroke +gsave 10 dict begin +solid +1 setlinewidth +0.000 0.000 0.000 edgecolor +newpath 105 118 moveto +101 108 lineto +98 118 lineto +closepath +fill +0.000 0.000 0.000 edgecolor +newpath 105 118 moveto +101 108 lineto +98 118 lineto +closepath +stroke +end grestore +% Category +[ /Rect [ 67 0 135 36 ] + /Border [ 0 0 0 ] + /Action << /Subtype /URI /URI (books/bookvol10.pamphlet) >> + /Subtype /Link +/ANN pdfmark +gsave 10 dict begin +filled +0.537 0.247 0.902 nodecolor +0.537 0.247 0.902 nodecolor +newpath 135 36 moveto +67 36 lineto +67 0 lineto +135 0 lineto +closepath +fill +0.537 0.247 0.902 nodecolor +newpath 135 36 moveto +67 36 lineto +67 0 lineto +135 0 lineto +closepath +stroke +gsave 10 dict begin +0.000 0.000 0.000 nodecolor +75 13 moveto +(Category) +[9.36 6.24 3.84 6.24 6.96 6.96 5.04 6.96] +xshow +end grestore +end grestore +% Type()->Category +newpath 101 72 moveto +101 64 101 55 101 46 curveto +stroke +gsave 10 dict begin +solid +1 setlinewidth +0.000 0.000 0.000 edgecolor +newpath 105 46 moveto +101 36 lineto +98 46 lineto +closepath +fill +0.000 0.000 0.000 edgecolor +newpath 105 46 moveto +101 36 lineto +98 46 lineto +closepath +stroke +end grestore +endpage +showpage +grestore +%%PageTrailer +%%EndPage: 1 +%%Trailer +%%Pages: 1 +end +restore +%%EOF diff --git a/books/ps/v10eltab.ps b/books/ps/v10eltab.ps new file mode 100644 index 0000000..9902751 --- /dev/null +++ b/books/ps/v10eltab.ps @@ -0,0 +1,299 @@ +%!PS-Adobe-2.0 +%%Creator: dot version 2.8 (Thu Sep 14 20:34:11 UTC 2006) +%%For: (root) root +%%Title: pic +%%Pages: (atend) +%%BoundingBox: 36 36 230 152 +%%EndComments +save +%%BeginProlog +/DotDict 200 dict def +DotDict begin + +/setupLatin1 { +mark +/EncodingVector 256 array def + EncodingVector 0 + +ISOLatin1Encoding 0 255 getinterval putinterval +EncodingVector 45 /hyphen put + +% Set up ISO Latin 1 character encoding +/starnetISO { + dup dup findfont dup length dict begin + { 1 index /FID ne { def }{ pop pop } ifelse + } forall + /Encoding EncodingVector def + currentdict end definefont +} def +/Times-Roman starnetISO def +/Times-Italic starnetISO def +/Times-Bold starnetISO def +/Times-BoldItalic starnetISO def +/Helvetica starnetISO def +/Helvetica-Oblique starnetISO def +/Helvetica-Bold starnetISO def +/Helvetica-BoldOblique starnetISO def +/Courier starnetISO def +/Courier-Oblique starnetISO def +/Courier-Bold starnetISO def +/Courier-BoldOblique starnetISO def +cleartomark +} bind def + +%%BeginResource: procset graphviz 0 0 +/coord-font-family /Times-Roman def +/default-font-family /Times-Roman def +/coordfont coord-font-family findfont 8 scalefont def + +/InvScaleFactor 1.0 def +/set_scale { + dup 1 exch div /InvScaleFactor exch def + dup scale +} bind def + +% styles +/solid { [] 0 setdash } bind def +/dashed { [9 InvScaleFactor mul dup ] 0 setdash } bind def +/dotted { [1 InvScaleFactor mul 6 InvScaleFactor mul] 0 setdash } bind def +/invis {/fill {newpath} def /stroke {newpath} def /show {pop newpath} def} bind def +/bold { 2 setlinewidth } bind def +/filled { } bind def +/unfilled { } bind def +/rounded { } bind def +/diagonals { } bind def + +% hooks for setting color +/nodecolor { sethsbcolor } bind def +/edgecolor { sethsbcolor } bind def +/graphcolor { sethsbcolor } bind def +/nopcolor {pop pop pop} bind def + +/beginpage { % i j npages + /npages exch def + /j exch def + /i exch def + /str 10 string def + npages 1 gt { + gsave + coordfont setfont + 0 0 moveto + (\() show i str cvs show (,) show j str cvs show (\)) show + grestore + } if +} bind def + +/set_font { + findfont exch + scalefont setfont +} def + +% draw aligned label in bounding box aligned to current point +/alignedtext { % width adj text + /text exch def + /adj exch def + /width exch def + gsave + width 0 gt { + text stringwidth pop adj mul 0 rmoveto + } if + [] 0 setdash + text show + grestore +} def + +/boxprim { % xcorner ycorner xsize ysize + 4 2 roll + moveto + 2 copy + exch 0 rlineto + 0 exch rlineto + pop neg 0 rlineto + closepath +} bind def + +/ellipse_path { + /ry exch def + /rx exch def + /y exch def + /x exch def + matrix currentmatrix + newpath + x y translate + rx ry scale + 0 0 1 0 360 arc + setmatrix +} bind def + +/endpage { showpage } bind def +/showpage { } def + +/layercolorseq + [ % layer color sequence - darkest to lightest + [0 0 0] + [.2 .8 .8] + [.4 .8 .8] + [.6 .8 .8] + [.8 .8 .8] + ] +def + +/layerlen layercolorseq length def + +/setlayer {/maxlayer exch def /curlayer exch def + layercolorseq curlayer 1 sub layerlen mod get + aload pop sethsbcolor + /nodecolor {nopcolor} def + /edgecolor {nopcolor} def + /graphcolor {nopcolor} def +} bind def + +/onlayer { curlayer ne {invis} if } def + +/onlayers { + /myupper exch def + /mylower exch def + curlayer mylower lt + curlayer myupper gt + or + {invis} if +} def + +/curlayer 0 def + +%%EndResource +%%EndProlog +%%BeginSetup +14 default-font-family set_font +1 setmiterlimit +% /arrowlength 10 def +% /arrowwidth 5 def + +% make sure pdfmark is harmless for PS-interpreters other than Distiller +/pdfmark where {pop} {userdict /pdfmark /cleartomark load put} ifelse +% make '<<' and '>>' safe on PS Level 1 devices +/languagelevel where {pop languagelevel}{1} ifelse +2 lt { + userdict (<<) cvn ([) cvn load put + userdict (>>) cvn ([) cvn load put +} if + +%%EndSetup +%%Page: 1 1 +%%PageBoundingBox: 36 36 230 152 +%%PageOrientation: Portrait +gsave +36 36 194 116 boxprim clip newpath +36 36 translate +0 0 1 beginpage +1.0000 set_scale +4 4 translate 0 rotate +0.167 0.600 1.000 graphcolor +0.167 0.600 1.000 graphcolor +newpath -6 -6 moveto +-6 114 lineto +192 114 lineto +192 -6 lineto +closepath +fill +0.167 0.600 1.000 graphcolor +newpath -6 -6 moveto +-6 114 lineto +192 114 lineto +192 -6 lineto +closepath +stroke +0.000 0.000 0.000 graphcolor +14.00 /Times-Roman set_font +% Eltable(a:SetCategory,b:Type) +[ /Rect [ 0 72 186 108 ] + /Border [ 0 0 0 ] + /Action << /Subtype /URI /URI (books/bookvol10.pamphlet) >> + /Subtype /Link +/ANN pdfmark +gsave 10 dict begin +filled +0.537 0.247 0.902 nodecolor +0.537 0.247 0.902 nodecolor +newpath 186 108 moveto +0 108 lineto +0 72 lineto +186 72 lineto +closepath +fill +0.537 0.247 0.902 nodecolor +newpath 186 108 moveto +0 108 lineto +0 72 lineto +186 72 lineto +closepath +stroke +gsave 10 dict begin +0.000 0.000 0.000 nodecolor +8 85 moveto +(Eltable\(a:SetCategory,b:Type\)) +[8.64 3.84 4.08 6.24 6.96 3.84 6.24 4.56 6.24 3.84 7.68 6 3.84 9.36 6.24 3.84 6.24 6.96 6.96 5.04 6 3.6 6.96 3.84 7.2 6.96 6.96 6.24 4.56] +xshow +end grestore +end grestore +% Category +[ /Rect [ 59 0 127 36 ] + /Border [ 0 0 0 ] + /Action << /Subtype /URI /URI (books/bookvol10.pamphlet) >> + /Subtype /Link +/ANN pdfmark +gsave 10 dict begin +filled +0.537 0.247 0.902 nodecolor +0.537 0.247 0.902 nodecolor +newpath 127 36 moveto +59 36 lineto +59 0 lineto +127 0 lineto +closepath +fill +0.537 0.247 0.902 nodecolor +newpath 127 36 moveto +59 36 lineto +59 0 lineto +127 0 lineto +closepath +stroke +gsave 10 dict begin +0.000 0.000 0.000 nodecolor +67 13 moveto +(Category) +[9.36 6.24 3.84 6.24 6.96 6.96 5.04 6.96] +xshow +end grestore +end grestore +% Eltable(a:SetCategory,b:Type)->Category +newpath 93 72 moveto +93 64 93 55 93 46 curveto +stroke +gsave 10 dict begin +solid +1 setlinewidth +0.000 0.000 0.000 edgecolor +newpath 97 46 moveto +93 36 lineto +90 46 lineto +closepath +fill +0.000 0.000 0.000 edgecolor +newpath 97 46 moveto +93 36 lineto +90 46 lineto +closepath +stroke +end grestore +endpage +showpage +grestore +%%PageTrailer +%%EndPage: 1 +%%Trailer +%%Pages: 1 +end +restore +%%EOF diff --git a/books/ps/v10eltableaggregate.ps b/books/ps/v10eltableaggregate.ps new file mode 100644 index 0000000..9cdd304 --- /dev/null +++ b/books/ps/v10eltableaggregate.ps @@ -0,0 +1,350 @@ +%!PS-Adobe-2.0 +%%Creator: dot version 2.8 (Thu Sep 14 20:34:11 UTC 2006) +%%For: (root) root +%%Title: pic +%%Pages: (atend) +%%BoundingBox: 36 36 288 224 +%%EndComments +save +%%BeginProlog +/DotDict 200 dict def +DotDict begin + +/setupLatin1 { +mark +/EncodingVector 256 array def + EncodingVector 0 + +ISOLatin1Encoding 0 255 getinterval putinterval +EncodingVector 45 /hyphen put + +% Set up ISO Latin 1 character encoding +/starnetISO { + dup dup findfont dup length dict begin + { 1 index /FID ne { def }{ pop pop } ifelse + } forall + /Encoding EncodingVector def + currentdict end definefont +} def +/Times-Roman starnetISO def +/Times-Italic starnetISO def +/Times-Bold starnetISO def +/Times-BoldItalic starnetISO def +/Helvetica starnetISO def +/Helvetica-Oblique starnetISO def +/Helvetica-Bold starnetISO def +/Helvetica-BoldOblique starnetISO def +/Courier starnetISO def +/Courier-Oblique starnetISO def +/Courier-Bold starnetISO def +/Courier-BoldOblique starnetISO def +cleartomark +} bind def + +%%BeginResource: procset graphviz 0 0 +/coord-font-family /Times-Roman def +/default-font-family /Times-Roman def +/coordfont coord-font-family findfont 8 scalefont def + +/InvScaleFactor 1.0 def +/set_scale { + dup 1 exch div /InvScaleFactor exch def + dup scale +} bind def + +% styles +/solid { [] 0 setdash } bind def +/dashed { [9 InvScaleFactor mul dup ] 0 setdash } bind def +/dotted { [1 InvScaleFactor mul 6 InvScaleFactor mul] 0 setdash } bind def +/invis {/fill {newpath} def /stroke {newpath} def /show {pop newpath} def} bind def +/bold { 2 setlinewidth } bind def +/filled { } bind def +/unfilled { } bind def +/rounded { } bind def +/diagonals { } bind def + +% hooks for setting color +/nodecolor { sethsbcolor } bind def +/edgecolor { sethsbcolor } bind def +/graphcolor { sethsbcolor } bind def +/nopcolor {pop pop pop} bind def + +/beginpage { % i j npages + /npages exch def + /j exch def + /i exch def + /str 10 string def + npages 1 gt { + gsave + coordfont setfont + 0 0 moveto + (\() show i str cvs show (,) show j str cvs show (\)) show + grestore + } if +} bind def + +/set_font { + findfont exch + scalefont setfont +} def + +% draw aligned label in bounding box aligned to current point +/alignedtext { % width adj text + /text exch def + /adj exch def + /width exch def + gsave + width 0 gt { + text stringwidth pop adj mul 0 rmoveto + } if + [] 0 setdash + text show + grestore +} def + +/boxprim { % xcorner ycorner xsize ysize + 4 2 roll + moveto + 2 copy + exch 0 rlineto + 0 exch rlineto + pop neg 0 rlineto + closepath +} bind def + +/ellipse_path { + /ry exch def + /rx exch def + /y exch def + /x exch def + matrix currentmatrix + newpath + x y translate + rx ry scale + 0 0 1 0 360 arc + setmatrix +} bind def + +/endpage { showpage } bind def +/showpage { } def + +/layercolorseq + [ % layer color sequence - darkest to lightest + [0 0 0] + [.2 .8 .8] + [.4 .8 .8] + [.6 .8 .8] + [.8 .8 .8] + ] +def + +/layerlen layercolorseq length def + +/setlayer {/maxlayer exch def /curlayer exch def + layercolorseq curlayer 1 sub layerlen mod get + aload pop sethsbcolor + /nodecolor {nopcolor} def + /edgecolor {nopcolor} def + /graphcolor {nopcolor} def +} bind def + +/onlayer { curlayer ne {invis} if } def + +/onlayers { + /myupper exch def + /mylower exch def + curlayer mylower lt + curlayer myupper gt + or + {invis} if +} def + +/curlayer 0 def + +%%EndResource +%%EndProlog +%%BeginSetup +14 default-font-family set_font +1 setmiterlimit +% /arrowlength 10 def +% /arrowwidth 5 def + +% make sure pdfmark is harmless for PS-interpreters other than Distiller +/pdfmark where {pop} {userdict /pdfmark /cleartomark load put} ifelse +% make '<<' and '>>' safe on PS Level 1 devices +/languagelevel where {pop languagelevel}{1} ifelse +2 lt { + userdict (<<) cvn ([) cvn load put + userdict (>>) cvn ([) cvn load put +} if + +%%EndSetup +%%Page: 1 1 +%%PageBoundingBox: 36 36 288 224 +%%PageOrientation: Portrait +gsave +36 36 252 188 boxprim clip newpath +36 36 translate +0 0 1 beginpage +1.0000 set_scale +4 4 translate 0 rotate +0.167 0.600 1.000 graphcolor +0.167 0.600 1.000 graphcolor +newpath -6 -6 moveto +-6 186 lineto +250 186 lineto +250 -6 lineto +closepath +fill +0.167 0.600 1.000 graphcolor +newpath -6 -6 moveto +-6 186 lineto +250 186 lineto +250 -6 lineto +closepath +stroke +0.000 0.000 0.000 graphcolor +14.00 /Times-Roman set_font +% EltableAggregate(a:SetCategory,b:Type) +[ /Rect [ 0 144 244 180 ] + /Border [ 0 0 0 ] + /Action << /Subtype /URI /URI (books/bookvol10.pamphlet) >> + /Subtype /Link +/ANN pdfmark +gsave 10 dict begin +filled +0.537 0.247 0.902 nodecolor +0.537 0.247 0.902 nodecolor +newpath 244 180 moveto +0 180 lineto +0 144 lineto +244 144 lineto +closepath +fill +0.537 0.247 0.902 nodecolor +newpath 244 180 moveto +0 180 lineto +0 144 lineto +244 144 lineto +closepath +stroke +gsave 10 dict begin +0.000 0.000 0.000 nodecolor +8 157 moveto +(EltableAggregate\(a:SetCategory,b:Type\)) +[8.64 3.84 4.08 6.24 6.96 3.84 6.24 9.84 6.96 7.2 4.8 6.24 6.72 6.24 3.84 6.24 4.56 6.24 3.84 7.68 6 3.84 9.36 6.24 3.84 6.24 6.96 6.96 5.04 6 3.6 6.96 3.84 7.2 6.96 6.96 6.24 4.56] +xshow +end grestore +end grestore +% Eltable(a:SetCategory,b:Type) +[ /Rect [ 29 72 215 108 ] + /Border [ 0 0 0 ] + /Action << /Subtype /URI /URI (books/bookvol10.pamphlet) >> + /Subtype /Link +/ANN pdfmark +gsave 10 dict begin +filled +0.537 0.247 0.902 nodecolor +0.537 0.247 0.902 nodecolor +newpath 215 108 moveto +29 108 lineto +29 72 lineto +215 72 lineto +closepath +fill +0.537 0.247 0.902 nodecolor +newpath 215 108 moveto +29 108 lineto +29 72 lineto +215 72 lineto +closepath +stroke +gsave 10 dict begin +0.000 0.000 0.000 nodecolor +37 85 moveto +(Eltable\(a:SetCategory,b:Type\)) +[8.64 3.84 4.08 6.24 6.96 3.84 6.24 4.56 6.24 3.84 7.68 6 3.84 9.36 6.24 3.84 6.24 6.96 6.96 5.04 6 3.6 6.96 3.84 7.2 6.96 6.96 6.24 4.56] +xshow +end grestore +end grestore +% EltableAggregate(a:SetCategory,b:Type)->Eltable(a:SetCategory,b:Type) +newpath 122 144 moveto +122 136 122 127 122 118 curveto +stroke +gsave 10 dict begin +solid +1 setlinewidth +0.000 0.000 0.000 edgecolor +newpath 126 118 moveto +122 108 lineto +119 118 lineto +closepath +fill +0.000 0.000 0.000 edgecolor +newpath 126 118 moveto +122 108 lineto +119 118 lineto +closepath +stroke +end grestore +% Category +[ /Rect [ 88 0 156 36 ] + /Border [ 0 0 0 ] + /Action << /Subtype /URI /URI (books/bookvol10.pamphlet) >> + /Subtype /Link +/ANN pdfmark +gsave 10 dict begin +filled +0.537 0.247 0.902 nodecolor +0.537 0.247 0.902 nodecolor +newpath 156 36 moveto +88 36 lineto +88 0 lineto +156 0 lineto +closepath +fill +0.537 0.247 0.902 nodecolor +newpath 156 36 moveto +88 36 lineto +88 0 lineto +156 0 lineto +closepath +stroke +gsave 10 dict begin +0.000 0.000 0.000 nodecolor +96 13 moveto +(Category) +[9.36 6.24 3.84 6.24 6.96 6.96 5.04 6.96] +xshow +end grestore +end grestore +% Eltable(a:SetCategory,b:Type)->Category +newpath 122 72 moveto +122 64 122 55 122 46 curveto +stroke +gsave 10 dict begin +solid +1 setlinewidth +0.000 0.000 0.000 edgecolor +newpath 126 46 moveto +122 36 lineto +119 46 lineto +closepath +fill +0.000 0.000 0.000 edgecolor +newpath 126 46 moveto +122 36 lineto +119 46 lineto +closepath +stroke +end grestore +endpage +showpage +grestore +%%PageTrailer +%%EndPage: 1 +%%Trailer +%%Pages: 1 +end +restore +%%EOF diff --git a/books/ps/v10extensiblelinearaggregate.ps b/books/ps/v10extensiblelinearaggregate.ps new file mode 100644 index 0000000..4906b76 --- /dev/null +++ b/books/ps/v10extensiblelinearaggregate.ps @@ -0,0 +1,574 @@ +%!PS-Adobe-2.0 +%%Creator: dot version 2.8 (Thu Sep 14 20:34:11 UTC 2006) +%%For: (root) root +%%Title: pic +%%Pages: (atend) +%%BoundingBox: 36 36 430 440 +%%EndComments +save +%%BeginProlog +/DotDict 200 dict def +DotDict begin + +/setupLatin1 { +mark +/EncodingVector 256 array def + EncodingVector 0 + +ISOLatin1Encoding 0 255 getinterval putinterval +EncodingVector 45 /hyphen put + +% Set up ISO Latin 1 character encoding +/starnetISO { + dup dup findfont dup length dict begin + { 1 index /FID ne { def }{ pop pop } ifelse + } forall + /Encoding EncodingVector def + currentdict end definefont +} def +/Times-Roman starnetISO def +/Times-Italic starnetISO def +/Times-Bold starnetISO def +/Times-BoldItalic starnetISO def +/Helvetica starnetISO def +/Helvetica-Oblique starnetISO def +/Helvetica-Bold starnetISO def +/Helvetica-BoldOblique starnetISO def +/Courier starnetISO def +/Courier-Oblique starnetISO def +/Courier-Bold starnetISO def +/Courier-BoldOblique starnetISO def +cleartomark +} bind def + +%%BeginResource: procset graphviz 0 0 +/coord-font-family /Times-Roman def +/default-font-family /Times-Roman def +/coordfont coord-font-family findfont 8 scalefont def + +/InvScaleFactor 1.0 def +/set_scale { + dup 1 exch div /InvScaleFactor exch def + dup scale +} bind def + +% styles +/solid { [] 0 setdash } bind def +/dashed { [9 InvScaleFactor mul dup ] 0 setdash } bind def +/dotted { [1 InvScaleFactor mul 6 InvScaleFactor mul] 0 setdash } bind def +/invis {/fill {newpath} def /stroke {newpath} def /show {pop newpath} def} bind def +/bold { 2 setlinewidth } bind def +/filled { } bind def +/unfilled { } bind def +/rounded { } bind def +/diagonals { } bind def + +% hooks for setting color +/nodecolor { sethsbcolor } bind def +/edgecolor { sethsbcolor } bind def +/graphcolor { sethsbcolor } bind def +/nopcolor {pop pop pop} bind def + +/beginpage { % i j npages + /npages exch def + /j exch def + /i exch def + /str 10 string def + npages 1 gt { + gsave + coordfont setfont + 0 0 moveto + (\() show i str cvs show (,) show j str cvs show (\)) show + grestore + } if +} bind def + +/set_font { + findfont exch + scalefont setfont +} def + +% draw aligned label in bounding box aligned to current point +/alignedtext { % width adj text + /text exch def + /adj exch def + /width exch def + gsave + width 0 gt { + text stringwidth pop adj mul 0 rmoveto + } if + [] 0 setdash + text show + grestore +} def + +/boxprim { % xcorner ycorner xsize ysize + 4 2 roll + moveto + 2 copy + exch 0 rlineto + 0 exch rlineto + pop neg 0 rlineto + closepath +} bind def + +/ellipse_path { + /ry exch def + /rx exch def + /y exch def + /x exch def + matrix currentmatrix + newpath + x y translate + rx ry scale + 0 0 1 0 360 arc + setmatrix +} bind def + +/endpage { showpage } bind def +/showpage { } def + +/layercolorseq + [ % layer color sequence - darkest to lightest + [0 0 0] + [.2 .8 .8] + [.4 .8 .8] + [.6 .8 .8] + [.8 .8 .8] + ] +def + +/layerlen layercolorseq length def + +/setlayer {/maxlayer exch def /curlayer exch def + layercolorseq curlayer 1 sub layerlen mod get + aload pop sethsbcolor + /nodecolor {nopcolor} def + /edgecolor {nopcolor} def + /graphcolor {nopcolor} def +} bind def + +/onlayer { curlayer ne {invis} if } def + +/onlayers { + /myupper exch def + /mylower exch def + curlayer mylower lt + curlayer myupper gt + or + {invis} if +} def + +/curlayer 0 def + +%%EndResource +%%EndProlog +%%BeginSetup +14 default-font-family set_font +1 setmiterlimit +% /arrowlength 10 def +% /arrowwidth 5 def + +% make sure pdfmark is harmless for PS-interpreters other than Distiller +/pdfmark where {pop} {userdict /pdfmark /cleartomark load put} ifelse +% make '<<' and '>>' safe on PS Level 1 devices +/languagelevel where {pop languagelevel}{1} ifelse +2 lt { + userdict (<<) cvn ([) cvn load put + userdict (>>) cvn ([) cvn load put +} if + +%%EndSetup +%%Page: 1 1 +%%PageBoundingBox: 36 36 430 440 +%%PageOrientation: Portrait +gsave +36 36 394 404 boxprim clip newpath +36 36 translate +0 0 1 beginpage +1.0000 set_scale +4 4 translate 0 rotate +0.167 0.600 1.000 graphcolor +0.167 0.600 1.000 graphcolor +newpath -6 -6 moveto +-6 402 lineto +392 402 lineto +392 -6 lineto +closepath +fill +0.167 0.600 1.000 graphcolor +newpath -6 -6 moveto +-6 402 lineto +392 402 lineto +392 -6 lineto +closepath +stroke +0.000 0.000 0.000 graphcolor +14.00 /Times-Roman set_font +% ExtensibleLinearAggregate(a:Type) +[ /Rect [ 116 360 332 396 ] + /Border [ 0 0 0 ] + /Action << /Subtype /URI /URI (books/bookvol10.pamphlet) >> + /Subtype /Link +/ANN pdfmark +gsave 10 dict begin +filled +0.537 0.247 0.902 nodecolor +0.537 0.247 0.902 nodecolor +newpath 332 396 moveto +116 396 lineto +116 360 lineto +332 360 lineto +closepath +fill +0.537 0.247 0.902 nodecolor +newpath 332 396 moveto +116 396 lineto +116 360 lineto +332 360 lineto +closepath +stroke +gsave 10 dict begin +0.000 0.000 0.000 nodecolor +123 373 moveto +(ExtensibleLinearAggregate\(a:Type\)) +[8.64 6.96 3.84 6.24 6.96 5.52 3.84 6.96 3.84 6.24 8.64 3.84 6.96 6.24 6.24 4.8 9.84 6.96 7.2 4.8 6.24 6.72 6.24 3.84 6.24 4.56 6.24 3.84 7.2 6.96 6.96 6.24 4.56] +xshow +end grestore +end grestore +% LinearAggregate(a:Type) +[ /Rect [ 145 288 303 324 ] + /Border [ 0 0 0 ] + /Action << /Subtype /URI /URI (books/bookvol10.pamphlet) >> + /Subtype /Link +/ANN pdfmark +gsave 10 dict begin +filled +0.537 0.247 0.902 nodecolor +0.537 0.247 0.902 nodecolor +newpath 303 324 moveto +145 324 lineto +145 288 lineto +303 288 lineto +closepath +fill +0.537 0.247 0.902 nodecolor +newpath 303 324 moveto +145 324 lineto +145 288 lineto +303 288 lineto +closepath +stroke +gsave 10 dict begin +0.000 0.000 0.000 nodecolor +153 301 moveto +(LinearAggregate\(a:Type\)) +[8.64 3.84 6.96 6.24 6.24 4.8 9.84 6.96 7.2 4.8 6.24 6.72 6.24 3.84 6.24 4.56 6.24 3.84 7.2 6.96 6.96 6.24 4.56] +xshow +end grestore +end grestore +% ExtensibleLinearAggregate(a:Type)->LinearAggregate(a:Type) +newpath 224 360 moveto +224 352 224 343 224 334 curveto +stroke +gsave 10 dict begin +solid +1 setlinewidth +0.000 0.000 0.000 edgecolor +newpath 228 334 moveto +224 324 lineto +221 334 lineto +closepath +fill +0.000 0.000 0.000 edgecolor +newpath 228 334 moveto +224 324 lineto +221 334 lineto +closepath +stroke +end grestore +% IndexedAggregate(b:Integer,a:Type) +[ /Rect [ 31 216 249 252 ] + /Border [ 0 0 0 ] + /Action << /Subtype /URI /URI (books/bookvol10.pamphlet) >> + /Subtype /Link +/ANN pdfmark +gsave 10 dict begin +filled +0.404 0.667 0.545 nodecolor +0.404 0.667 0.545 nodecolor +newpath 249 252 moveto +31 252 lineto +31 216 lineto +249 216 lineto +closepath +fill +0.404 0.667 0.545 nodecolor +newpath 249 252 moveto +31 252 lineto +31 216 lineto +249 216 lineto +closepath +stroke +gsave 10 dict begin +0.000 0.000 0.000 nodecolor +38 229 moveto +(IndexedAggregate\(b:Integer,a:Type\)) +[4.56 6.96 6.96 5.76 6.48 6.24 6.96 9.84 6.96 7.2 4.8 6.24 6.72 6.24 3.84 6.24 4.56 6.96 3.84 4.56 6.96 3.84 6.24 6.72 6.24 4.32 3.6 6.24 3.84 7.2 6.96 6.96 6.24 4.56] +xshow +end grestore +end grestore +% LinearAggregate(a:Type)->IndexedAggregate(b:Integer,a:Type) +newpath 203 288 moveto +193 279 180 268 169 259 curveto +stroke +gsave 10 dict begin +solid +1 setlinewidth +0.000 0.000 0.000 edgecolor +newpath 171 256 moveto +161 252 lineto +166 261 lineto +closepath +fill +0.000 0.000 0.000 edgecolor +newpath 171 256 moveto +161 252 lineto +166 261 lineto +closepath +stroke +end grestore +% Collection(a:Type) +[ /Rect [ 266 144 386 180 ] + /Border [ 0 0 0 ] + /Action << /Subtype /URI /URI (books/bookvol10.pamphlet) >> + /Subtype /Link +/ANN pdfmark +gsave 10 dict begin +filled +0.537 0.247 0.902 nodecolor +0.537 0.247 0.902 nodecolor +newpath 386 180 moveto +266 180 lineto +266 144 lineto +386 144 lineto +closepath +fill +0.537 0.247 0.902 nodecolor +newpath 386 180 moveto +266 180 lineto +266 144 lineto +386 144 lineto +closepath +stroke +gsave 10 dict begin +0.000 0.000 0.000 nodecolor +273 157 moveto +(Collection\(a:Type\)) +[9.36 6.96 3.84 3.84 6.24 6.24 3.84 3.84 6.96 6.96 4.56 6.24 3.84 7.2 6.96 6.96 6.24 4.56] +xshow +end grestore +end grestore +% LinearAggregate(a:Type)->Collection(a:Type) +newpath 237 288 moveto +254 263 286 218 307 188 curveto +stroke +gsave 10 dict begin +solid +1 setlinewidth +0.000 0.000 0.000 edgecolor +newpath 310 190 moveto +313 180 lineto +304 186 lineto +closepath +fill +0.000 0.000 0.000 edgecolor +newpath 310 190 moveto +313 180 lineto +304 186 lineto +closepath +stroke +end grestore +% IndexedAggregate(a:SetCategory,b:Type) +[ /Rect [ 0 144 248 180 ] + /Border [ 0 0 0 ] + /Action << /Subtype /URI /URI (books/bookvol10.pamphlet) >> + /Subtype /Link +/ANN pdfmark +gsave 10 dict begin +filled +0.537 0.247 0.902 nodecolor +0.537 0.247 0.902 nodecolor +newpath 248 180 moveto +0 180 lineto +0 144 lineto +248 144 lineto +closepath +fill +0.537 0.247 0.902 nodecolor +newpath 248 180 moveto +0 180 lineto +0 144 lineto +248 144 lineto +closepath +stroke +gsave 10 dict begin +0.000 0.000 0.000 nodecolor +7 157 moveto +(IndexedAggregate\(a:SetCategory,b:Type\)) +[4.56 6.96 6.96 5.76 6.48 6.24 6.96 9.84 6.96 7.2 4.8 6.24 6.72 6.24 3.84 6.24 4.56 6.24 3.84 7.68 6 3.84 9.36 6.24 3.84 6.24 6.96 6.96 5.04 6 3.6 6.96 3.84 7.2 6.96 6.96 6.24 4.56] +xshow +end grestore +end grestore +% IndexedAggregate(b:Integer,a:Type)->IndexedAggregate(a:SetCategory,b:Type) +newpath 136 216 moveto +134 208 132 199 130 190 curveto +stroke +gsave 10 dict begin +solid +1 setlinewidth +0.000 0.000 0.000 edgecolor +newpath 133 189 moveto +128 180 lineto +127 190 lineto +closepath +fill +0.000 0.000 0.000 edgecolor +newpath 133 189 moveto +128 180 lineto +127 190 lineto +closepath +stroke +end grestore +% HomogeneousAggregate(a:Type) +[ /Rect [ 124 72 326 108 ] + /Border [ 0 0 0 ] + /Action << /Subtype /URI /URI (books/bookvol10.pamphlet) >> + /Subtype /Link +/ANN pdfmark +gsave 10 dict begin +filled +0.537 0.247 0.902 nodecolor +0.537 0.247 0.902 nodecolor +newpath 326 108 moveto +124 108 lineto +124 72 lineto +326 72 lineto +closepath +fill +0.537 0.247 0.902 nodecolor +newpath 326 108 moveto +124 108 lineto +124 72 lineto +326 72 lineto +closepath +stroke +gsave 10 dict begin +0.000 0.000 0.000 nodecolor +131 85 moveto +(HomogeneousAggregate\(a:Type\)) +[10.08 6.96 10.8 6.96 6.72 6.24 6.96 6.24 6.96 6.96 5.52 9.84 6.96 7.2 4.8 6.24 6.72 6.24 3.84 6.24 4.56 6.24 3.84 7.2 6.96 6.96 6.24 4.56] +xshow +end grestore +end grestore +% Collection(a:Type)->HomogeneousAggregate(a:Type) +newpath 301 144 moveto +289 135 273 124 259 114 curveto +stroke +gsave 10 dict begin +solid +1 setlinewidth +0.000 0.000 0.000 edgecolor +newpath 260 111 moveto +250 108 lineto +256 116 lineto +closepath +fill +0.000 0.000 0.000 edgecolor +newpath 260 111 moveto +250 108 lineto +256 116 lineto +closepath +stroke +end grestore +% IndexedAggregate(a:SetCategory,b:Type)->HomogeneousAggregate(a:Type) +newpath 149 144 moveto +161 135 177 124 191 114 curveto +stroke +gsave 10 dict begin +solid +1 setlinewidth +0.000 0.000 0.000 edgecolor +newpath 194 116 moveto +200 108 lineto +190 111 lineto +closepath +fill +0.000 0.000 0.000 edgecolor +newpath 194 116 moveto +200 108 lineto +190 111 lineto +closepath +stroke +end grestore +% ... +[ /Rect [ 198 0 252 36 ] + /Border [ 0 0 0 ] + /Action << /Subtype /URI /URI (books/bookvol10.pamphlet) >> + /Subtype /Link +/ANN pdfmark +gsave 10 dict begin +filled +0.537 0.247 0.902 nodecolor +0.537 0.247 0.902 nodecolor +newpath 252 36 moveto +198 36 lineto +198 0 lineto +252 0 lineto +closepath +fill +0.537 0.247 0.902 nodecolor +newpath 252 36 moveto +198 36 lineto +198 0 lineto +252 0 lineto +closepath +stroke +gsave 10 dict begin +0.000 0.000 0.000 nodecolor +219 13 moveto +(...) +[3.6 3.6 3.6] +xshow +end grestore +end grestore +% HomogeneousAggregate(a:Type)->... +newpath 225 72 moveto +225 64 225 55 225 46 curveto +stroke +gsave 10 dict begin +solid +1 setlinewidth +0.000 0.000 0.000 edgecolor +newpath 229 46 moveto +225 36 lineto +222 46 lineto +closepath +fill +0.000 0.000 0.000 edgecolor +newpath 229 46 moveto +225 36 lineto +222 46 lineto +closepath +stroke +end grestore +endpage +showpage +grestore +%%PageTrailer +%%EndPage: 1 +%%Trailer +%%Pages: 1 +end +restore +%%EOF diff --git a/books/ps/v10finitelinearaggregate.ps b/books/ps/v10finitelinearaggregate.ps new file mode 100644 index 0000000..525dca5 --- /dev/null +++ b/books/ps/v10finitelinearaggregate.ps @@ -0,0 +1,574 @@ +%!PS-Adobe-2.0 +%%Creator: dot version 2.8 (Thu Sep 14 20:34:11 UTC 2006) +%%For: (root) root +%%Title: pic +%%Pages: (atend) +%%BoundingBox: 36 36 430 440 +%%EndComments +save +%%BeginProlog +/DotDict 200 dict def +DotDict begin + +/setupLatin1 { +mark +/EncodingVector 256 array def + EncodingVector 0 + +ISOLatin1Encoding 0 255 getinterval putinterval +EncodingVector 45 /hyphen put + +% Set up ISO Latin 1 character encoding +/starnetISO { + dup dup findfont dup length dict begin + { 1 index /FID ne { def }{ pop pop } ifelse + } forall + /Encoding EncodingVector def + currentdict end definefont +} def +/Times-Roman starnetISO def +/Times-Italic starnetISO def +/Times-Bold starnetISO def +/Times-BoldItalic starnetISO def +/Helvetica starnetISO def +/Helvetica-Oblique starnetISO def +/Helvetica-Bold starnetISO def +/Helvetica-BoldOblique starnetISO def +/Courier starnetISO def +/Courier-Oblique starnetISO def +/Courier-Bold starnetISO def +/Courier-BoldOblique starnetISO def +cleartomark +} bind def + +%%BeginResource: procset graphviz 0 0 +/coord-font-family /Times-Roman def +/default-font-family /Times-Roman def +/coordfont coord-font-family findfont 8 scalefont def + +/InvScaleFactor 1.0 def +/set_scale { + dup 1 exch div /InvScaleFactor exch def + dup scale +} bind def + +% styles +/solid { [] 0 setdash } bind def +/dashed { [9 InvScaleFactor mul dup ] 0 setdash } bind def +/dotted { [1 InvScaleFactor mul 6 InvScaleFactor mul] 0 setdash } bind def +/invis {/fill {newpath} def /stroke {newpath} def /show {pop newpath} def} bind def +/bold { 2 setlinewidth } bind def +/filled { } bind def +/unfilled { } bind def +/rounded { } bind def +/diagonals { } bind def + +% hooks for setting color +/nodecolor { sethsbcolor } bind def +/edgecolor { sethsbcolor } bind def +/graphcolor { sethsbcolor } bind def +/nopcolor {pop pop pop} bind def + +/beginpage { % i j npages + /npages exch def + /j exch def + /i exch def + /str 10 string def + npages 1 gt { + gsave + coordfont setfont + 0 0 moveto + (\() show i str cvs show (,) show j str cvs show (\)) show + grestore + } if +} bind def + +/set_font { + findfont exch + scalefont setfont +} def + +% draw aligned label in bounding box aligned to current point +/alignedtext { % width adj text + /text exch def + /adj exch def + /width exch def + gsave + width 0 gt { + text stringwidth pop adj mul 0 rmoveto + } if + [] 0 setdash + text show + grestore +} def + +/boxprim { % xcorner ycorner xsize ysize + 4 2 roll + moveto + 2 copy + exch 0 rlineto + 0 exch rlineto + pop neg 0 rlineto + closepath +} bind def + +/ellipse_path { + /ry exch def + /rx exch def + /y exch def + /x exch def + matrix currentmatrix + newpath + x y translate + rx ry scale + 0 0 1 0 360 arc + setmatrix +} bind def + +/endpage { showpage } bind def +/showpage { } def + +/layercolorseq + [ % layer color sequence - darkest to lightest + [0 0 0] + [.2 .8 .8] + [.4 .8 .8] + [.6 .8 .8] + [.8 .8 .8] + ] +def + +/layerlen layercolorseq length def + +/setlayer {/maxlayer exch def /curlayer exch def + layercolorseq curlayer 1 sub layerlen mod get + aload pop sethsbcolor + /nodecolor {nopcolor} def + /edgecolor {nopcolor} def + /graphcolor {nopcolor} def +} bind def + +/onlayer { curlayer ne {invis} if } def + +/onlayers { + /myupper exch def + /mylower exch def + curlayer mylower lt + curlayer myupper gt + or + {invis} if +} def + +/curlayer 0 def + +%%EndResource +%%EndProlog +%%BeginSetup +14 default-font-family set_font +1 setmiterlimit +% /arrowlength 10 def +% /arrowwidth 5 def + +% make sure pdfmark is harmless for PS-interpreters other than Distiller +/pdfmark where {pop} {userdict /pdfmark /cleartomark load put} ifelse +% make '<<' and '>>' safe on PS Level 1 devices +/languagelevel where {pop languagelevel}{1} ifelse +2 lt { + userdict (<<) cvn ([) cvn load put + userdict (>>) cvn ([) cvn load put +} if + +%%EndSetup +%%Page: 1 1 +%%PageBoundingBox: 36 36 430 440 +%%PageOrientation: Portrait +gsave +36 36 394 404 boxprim clip newpath +36 36 translate +0 0 1 beginpage +1.0000 set_scale +4 4 translate 0 rotate +0.167 0.600 1.000 graphcolor +0.167 0.600 1.000 graphcolor +newpath -6 -6 moveto +-6 402 lineto +392 402 lineto +392 -6 lineto +closepath +fill +0.167 0.600 1.000 graphcolor +newpath -6 -6 moveto +-6 402 lineto +392 402 lineto +392 -6 lineto +closepath +stroke +0.000 0.000 0.000 graphcolor +14.00 /Times-Roman set_font +% FiniteLinearAggregate(a:Type) +[ /Rect [ 129 360 319 396 ] + /Border [ 0 0 0 ] + /Action << /Subtype /URI /URI (books/bookvol10.pamphlet) >> + /Subtype /Link +/ANN pdfmark +gsave 10 dict begin +filled +0.537 0.247 0.902 nodecolor +0.537 0.247 0.902 nodecolor +newpath 319 396 moveto +129 396 lineto +129 360 lineto +319 360 lineto +closepath +fill +0.537 0.247 0.902 nodecolor +newpath 319 396 moveto +129 396 lineto +129 360 lineto +319 360 lineto +closepath +stroke +gsave 10 dict begin +0.000 0.000 0.000 nodecolor +137 373 moveto +(FiniteLinearAggregate\(a:Type\)) +[7.44 3.84 6.96 3.84 3.84 6.24 8.64 3.84 6.96 6.24 6.24 4.8 9.84 6.96 7.2 4.8 6.24 6.72 6.24 3.84 6.24 4.56 6.24 3.84 7.2 6.96 6.96 6.24 4.56] +xshow +end grestore +end grestore +% LinearAggregate(a:Type) +[ /Rect [ 145 288 303 324 ] + /Border [ 0 0 0 ] + /Action << /Subtype /URI /URI (books/bookvol10.pamphlet) >> + /Subtype /Link +/ANN pdfmark +gsave 10 dict begin +filled +0.537 0.247 0.902 nodecolor +0.537 0.247 0.902 nodecolor +newpath 303 324 moveto +145 324 lineto +145 288 lineto +303 288 lineto +closepath +fill +0.537 0.247 0.902 nodecolor +newpath 303 324 moveto +145 324 lineto +145 288 lineto +303 288 lineto +closepath +stroke +gsave 10 dict begin +0.000 0.000 0.000 nodecolor +153 301 moveto +(LinearAggregate\(a:Type\)) +[8.64 3.84 6.96 6.24 6.24 4.8 9.84 6.96 7.2 4.8 6.24 6.72 6.24 3.84 6.24 4.56 6.24 3.84 7.2 6.96 6.96 6.24 4.56] +xshow +end grestore +end grestore +% FiniteLinearAggregate(a:Type)->LinearAggregate(a:Type) +newpath 224 360 moveto +224 352 224 343 224 334 curveto +stroke +gsave 10 dict begin +solid +1 setlinewidth +0.000 0.000 0.000 edgecolor +newpath 228 334 moveto +224 324 lineto +221 334 lineto +closepath +fill +0.000 0.000 0.000 edgecolor +newpath 228 334 moveto +224 324 lineto +221 334 lineto +closepath +stroke +end grestore +% IndexedAggregate(b:Integer,a:Type) +[ /Rect [ 31 216 249 252 ] + /Border [ 0 0 0 ] + /Action << /Subtype /URI /URI (books/bookvol10.pamphlet) >> + /Subtype /Link +/ANN pdfmark +gsave 10 dict begin +filled +0.404 0.667 0.545 nodecolor +0.404 0.667 0.545 nodecolor +newpath 249 252 moveto +31 252 lineto +31 216 lineto +249 216 lineto +closepath +fill +0.404 0.667 0.545 nodecolor +newpath 249 252 moveto +31 252 lineto +31 216 lineto +249 216 lineto +closepath +stroke +gsave 10 dict begin +0.000 0.000 0.000 nodecolor +38 229 moveto +(IndexedAggregate\(b:Integer,a:Type\)) +[4.56 6.96 6.96 5.76 6.48 6.24 6.96 9.84 6.96 7.2 4.8 6.24 6.72 6.24 3.84 6.24 4.56 6.96 3.84 4.56 6.96 3.84 6.24 6.72 6.24 4.32 3.6 6.24 3.84 7.2 6.96 6.96 6.24 4.56] +xshow +end grestore +end grestore +% LinearAggregate(a:Type)->IndexedAggregate(b:Integer,a:Type) +newpath 203 288 moveto +193 279 180 268 169 259 curveto +stroke +gsave 10 dict begin +solid +1 setlinewidth +0.000 0.000 0.000 edgecolor +newpath 171 256 moveto +161 252 lineto +166 261 lineto +closepath +fill +0.000 0.000 0.000 edgecolor +newpath 171 256 moveto +161 252 lineto +166 261 lineto +closepath +stroke +end grestore +% Collection(a:Type) +[ /Rect [ 266 144 386 180 ] + /Border [ 0 0 0 ] + /Action << /Subtype /URI /URI (books/bookvol10.pamphlet) >> + /Subtype /Link +/ANN pdfmark +gsave 10 dict begin +filled +0.537 0.247 0.902 nodecolor +0.537 0.247 0.902 nodecolor +newpath 386 180 moveto +266 180 lineto +266 144 lineto +386 144 lineto +closepath +fill +0.537 0.247 0.902 nodecolor +newpath 386 180 moveto +266 180 lineto +266 144 lineto +386 144 lineto +closepath +stroke +gsave 10 dict begin +0.000 0.000 0.000 nodecolor +273 157 moveto +(Collection\(a:Type\)) +[9.36 6.96 3.84 3.84 6.24 6.24 3.84 3.84 6.96 6.96 4.56 6.24 3.84 7.2 6.96 6.96 6.24 4.56] +xshow +end grestore +end grestore +% LinearAggregate(a:Type)->Collection(a:Type) +newpath 237 288 moveto +254 263 286 218 307 188 curveto +stroke +gsave 10 dict begin +solid +1 setlinewidth +0.000 0.000 0.000 edgecolor +newpath 310 190 moveto +313 180 lineto +304 186 lineto +closepath +fill +0.000 0.000 0.000 edgecolor +newpath 310 190 moveto +313 180 lineto +304 186 lineto +closepath +stroke +end grestore +% IndexedAggregate(a:SetCategory,b:Type) +[ /Rect [ 0 144 248 180 ] + /Border [ 0 0 0 ] + /Action << /Subtype /URI /URI (books/bookvol10.pamphlet) >> + /Subtype /Link +/ANN pdfmark +gsave 10 dict begin +filled +0.537 0.247 0.902 nodecolor +0.537 0.247 0.902 nodecolor +newpath 248 180 moveto +0 180 lineto +0 144 lineto +248 144 lineto +closepath +fill +0.537 0.247 0.902 nodecolor +newpath 248 180 moveto +0 180 lineto +0 144 lineto +248 144 lineto +closepath +stroke +gsave 10 dict begin +0.000 0.000 0.000 nodecolor +7 157 moveto +(IndexedAggregate\(a:SetCategory,b:Type\)) +[4.56 6.96 6.96 5.76 6.48 6.24 6.96 9.84 6.96 7.2 4.8 6.24 6.72 6.24 3.84 6.24 4.56 6.24 3.84 7.68 6 3.84 9.36 6.24 3.84 6.24 6.96 6.96 5.04 6 3.6 6.96 3.84 7.2 6.96 6.96 6.24 4.56] +xshow +end grestore +end grestore +% IndexedAggregate(b:Integer,a:Type)->IndexedAggregate(a:SetCategory,b:Type) +newpath 136 216 moveto +134 208 132 199 130 190 curveto +stroke +gsave 10 dict begin +solid +1 setlinewidth +0.000 0.000 0.000 edgecolor +newpath 133 189 moveto +128 180 lineto +127 190 lineto +closepath +fill +0.000 0.000 0.000 edgecolor +newpath 133 189 moveto +128 180 lineto +127 190 lineto +closepath +stroke +end grestore +% HomogeneousAggregate(a:Type) +[ /Rect [ 124 72 326 108 ] + /Border [ 0 0 0 ] + /Action << /Subtype /URI /URI (books/bookvol10.pamphlet) >> + /Subtype /Link +/ANN pdfmark +gsave 10 dict begin +filled +0.537 0.247 0.902 nodecolor +0.537 0.247 0.902 nodecolor +newpath 326 108 moveto +124 108 lineto +124 72 lineto +326 72 lineto +closepath +fill +0.537 0.247 0.902 nodecolor +newpath 326 108 moveto +124 108 lineto +124 72 lineto +326 72 lineto +closepath +stroke +gsave 10 dict begin +0.000 0.000 0.000 nodecolor +131 85 moveto +(HomogeneousAggregate\(a:Type\)) +[10.08 6.96 10.8 6.96 6.72 6.24 6.96 6.24 6.96 6.96 5.52 9.84 6.96 7.2 4.8 6.24 6.72 6.24 3.84 6.24 4.56 6.24 3.84 7.2 6.96 6.96 6.24 4.56] +xshow +end grestore +end grestore +% Collection(a:Type)->HomogeneousAggregate(a:Type) +newpath 301 144 moveto +289 135 273 124 259 114 curveto +stroke +gsave 10 dict begin +solid +1 setlinewidth +0.000 0.000 0.000 edgecolor +newpath 260 111 moveto +250 108 lineto +256 116 lineto +closepath +fill +0.000 0.000 0.000 edgecolor +newpath 260 111 moveto +250 108 lineto +256 116 lineto +closepath +stroke +end grestore +% IndexedAggregate(a:SetCategory,b:Type)->HomogeneousAggregate(a:Type) +newpath 149 144 moveto +161 135 177 124 191 114 curveto +stroke +gsave 10 dict begin +solid +1 setlinewidth +0.000 0.000 0.000 edgecolor +newpath 194 116 moveto +200 108 lineto +190 111 lineto +closepath +fill +0.000 0.000 0.000 edgecolor +newpath 194 116 moveto +200 108 lineto +190 111 lineto +closepath +stroke +end grestore +% ... +[ /Rect [ 198 0 252 36 ] + /Border [ 0 0 0 ] + /Action << /Subtype /URI /URI (books/bookvol10.pamphlet) >> + /Subtype /Link +/ANN pdfmark +gsave 10 dict begin +filled +0.537 0.247 0.902 nodecolor +0.537 0.247 0.902 nodecolor +newpath 252 36 moveto +198 36 lineto +198 0 lineto +252 0 lineto +closepath +fill +0.537 0.247 0.902 nodecolor +newpath 252 36 moveto +198 36 lineto +198 0 lineto +252 0 lineto +closepath +stroke +gsave 10 dict begin +0.000 0.000 0.000 nodecolor +219 13 moveto +(...) +[3.6 3.6 3.6] +xshow +end grestore +end grestore +% HomogeneousAggregate(a:Type)->... +newpath 225 72 moveto +225 64 225 55 225 46 curveto +stroke +gsave 10 dict begin +solid +1 setlinewidth +0.000 0.000 0.000 edgecolor +newpath 229 46 moveto +225 36 lineto +222 46 lineto +closepath +fill +0.000 0.000 0.000 edgecolor +newpath 229 46 moveto +225 36 lineto +222 46 lineto +closepath +stroke +end grestore +endpage +showpage +grestore +%%PageTrailer +%%EndPage: 1 +%%Trailer +%%Pages: 1 +end +restore +%%EOF diff --git a/books/ps/v10homogeneousaggregate.ps b/books/ps/v10homogeneousaggregate.ps new file mode 100644 index 0000000..98515fc --- /dev/null +++ b/books/ps/v10homogeneousaggregate.ps @@ -0,0 +1,401 @@ +%!PS-Adobe-2.0 +%%Creator: dot version 2.8 (Thu Sep 14 20:34:11 UTC 2006) +%%For: (root) root +%%Title: pic +%%Pages: (atend) +%%BoundingBox: 36 36 246 296 +%%EndComments +save +%%BeginProlog +/DotDict 200 dict def +DotDict begin + +/setupLatin1 { +mark +/EncodingVector 256 array def + EncodingVector 0 + +ISOLatin1Encoding 0 255 getinterval putinterval +EncodingVector 45 /hyphen put + +% Set up ISO Latin 1 character encoding +/starnetISO { + dup dup findfont dup length dict begin + { 1 index /FID ne { def }{ pop pop } ifelse + } forall + /Encoding EncodingVector def + currentdict end definefont +} def +/Times-Roman starnetISO def +/Times-Italic starnetISO def +/Times-Bold starnetISO def +/Times-BoldItalic starnetISO def +/Helvetica starnetISO def +/Helvetica-Oblique starnetISO def +/Helvetica-Bold starnetISO def +/Helvetica-BoldOblique starnetISO def +/Courier starnetISO def +/Courier-Oblique starnetISO def +/Courier-Bold starnetISO def +/Courier-BoldOblique starnetISO def +cleartomark +} bind def + +%%BeginResource: procset graphviz 0 0 +/coord-font-family /Times-Roman def +/default-font-family /Times-Roman def +/coordfont coord-font-family findfont 8 scalefont def + +/InvScaleFactor 1.0 def +/set_scale { + dup 1 exch div /InvScaleFactor exch def + dup scale +} bind def + +% styles +/solid { [] 0 setdash } bind def +/dashed { [9 InvScaleFactor mul dup ] 0 setdash } bind def +/dotted { [1 InvScaleFactor mul 6 InvScaleFactor mul] 0 setdash } bind def +/invis {/fill {newpath} def /stroke {newpath} def /show {pop newpath} def} bind def +/bold { 2 setlinewidth } bind def +/filled { } bind def +/unfilled { } bind def +/rounded { } bind def +/diagonals { } bind def + +% hooks for setting color +/nodecolor { sethsbcolor } bind def +/edgecolor { sethsbcolor } bind def +/graphcolor { sethsbcolor } bind def +/nopcolor {pop pop pop} bind def + +/beginpage { % i j npages + /npages exch def + /j exch def + /i exch def + /str 10 string def + npages 1 gt { + gsave + coordfont setfont + 0 0 moveto + (\() show i str cvs show (,) show j str cvs show (\)) show + grestore + } if +} bind def + +/set_font { + findfont exch + scalefont setfont +} def + +% draw aligned label in bounding box aligned to current point +/alignedtext { % width adj text + /text exch def + /adj exch def + /width exch def + gsave + width 0 gt { + text stringwidth pop adj mul 0 rmoveto + } if + [] 0 setdash + text show + grestore +} def + +/boxprim { % xcorner ycorner xsize ysize + 4 2 roll + moveto + 2 copy + exch 0 rlineto + 0 exch rlineto + pop neg 0 rlineto + closepath +} bind def + +/ellipse_path { + /ry exch def + /rx exch def + /y exch def + /x exch def + matrix currentmatrix + newpath + x y translate + rx ry scale + 0 0 1 0 360 arc + setmatrix +} bind def + +/endpage { showpage } bind def +/showpage { } def + +/layercolorseq + [ % layer color sequence - darkest to lightest + [0 0 0] + [.2 .8 .8] + [.4 .8 .8] + [.6 .8 .8] + [.8 .8 .8] + ] +def + +/layerlen layercolorseq length def + +/setlayer {/maxlayer exch def /curlayer exch def + layercolorseq curlayer 1 sub layerlen mod get + aload pop sethsbcolor + /nodecolor {nopcolor} def + /edgecolor {nopcolor} def + /graphcolor {nopcolor} def +} bind def + +/onlayer { curlayer ne {invis} if } def + +/onlayers { + /myupper exch def + /mylower exch def + curlayer mylower lt + curlayer myupper gt + or + {invis} if +} def + +/curlayer 0 def + +%%EndResource +%%EndProlog +%%BeginSetup +14 default-font-family set_font +1 setmiterlimit +% /arrowlength 10 def +% /arrowwidth 5 def + +% make sure pdfmark is harmless for PS-interpreters other than Distiller +/pdfmark where {pop} {userdict /pdfmark /cleartomark load put} ifelse +% make '<<' and '>>' safe on PS Level 1 devices +/languagelevel where {pop languagelevel}{1} ifelse +2 lt { + userdict (<<) cvn ([) cvn load put + userdict (>>) cvn ([) cvn load put +} if + +%%EndSetup +%%Page: 1 1 +%%PageBoundingBox: 36 36 246 296 +%%PageOrientation: Portrait +gsave +36 36 210 260 boxprim clip newpath +36 36 translate +0 0 1 beginpage +1.0000 set_scale +4 4 translate 0 rotate +0.167 0.600 1.000 graphcolor +0.167 0.600 1.000 graphcolor +newpath -6 -6 moveto +-6 258 lineto +208 258 lineto +208 -6 lineto +closepath +fill +0.167 0.600 1.000 graphcolor +newpath -6 -6 moveto +-6 258 lineto +208 258 lineto +208 -6 lineto +closepath +stroke +0.000 0.000 0.000 graphcolor +14.00 /Times-Roman set_font +% HomogeneousAggregate(a:Type) +[ /Rect [ 0 216 202 252 ] + /Border [ 0 0 0 ] + /Action << /Subtype /URI /URI (books/bookvol10.pamphlet) >> + /Subtype /Link +/ANN pdfmark +gsave 10 dict begin +filled +0.537 0.247 0.902 nodecolor +0.537 0.247 0.902 nodecolor +newpath 202 252 moveto +0 252 lineto +0 216 lineto +202 216 lineto +closepath +fill +0.537 0.247 0.902 nodecolor +newpath 202 252 moveto +0 252 lineto +0 216 lineto +202 216 lineto +closepath +stroke +gsave 10 dict begin +0.000 0.000 0.000 nodecolor +7 229 moveto +(HomogeneousAggregate\(a:Type\)) +[10.08 6.96 10.8 6.96 6.72 6.24 6.96 6.24 6.96 6.96 5.52 9.84 6.96 7.2 4.8 6.24 6.72 6.24 3.84 6.24 4.56 6.24 3.84 7.2 6.96 6.96 6.24 4.56] +xshow +end grestore +end grestore +% Aggregate() +[ /Rect [ 59 144 143 180 ] + /Border [ 0 0 0 ] + /Action << /Subtype /URI /URI (books/bookvol10.pamphlet) >> + /Subtype /Link +/ANN pdfmark +gsave 10 dict begin +filled +0.537 0.247 0.902 nodecolor +0.537 0.247 0.902 nodecolor +newpath 143 180 moveto +59 180 lineto +59 144 lineto +143 144 lineto +closepath +fill +0.537 0.247 0.902 nodecolor +newpath 143 180 moveto +59 180 lineto +59 144 lineto +143 144 lineto +closepath +stroke +gsave 10 dict begin +0.000 0.000 0.000 nodecolor +66 157 moveto +(Aggregate\(\)) +[9.84 6.96 7.2 4.8 6.24 6.72 6.24 3.84 6.24 4.56 4.56] +xshow +end grestore +end grestore +% HomogeneousAggregate(a:Type)->Aggregate() +newpath 101 216 moveto +101 208 101 199 101 190 curveto +stroke +gsave 10 dict begin +solid +1 setlinewidth +0.000 0.000 0.000 edgecolor +newpath 105 190 moveto +101 180 lineto +98 190 lineto +closepath +fill +0.000 0.000 0.000 edgecolor +newpath 105 190 moveto +101 180 lineto +98 190 lineto +closepath +stroke +end grestore +% Type() +[ /Rect [ 74 72 128 108 ] + /Border [ 0 0 0 ] + /Action << /Subtype /URI /URI (books/bookvol10.pamphlet) >> + /Subtype /Link +/ANN pdfmark +gsave 10 dict begin +filled +0.537 0.247 0.902 nodecolor +0.537 0.247 0.902 nodecolor +newpath 128 108 moveto +74 108 lineto +74 72 lineto +128 72 lineto +closepath +fill +0.537 0.247 0.902 nodecolor +newpath 128 108 moveto +74 108 lineto +74 72 lineto +128 72 lineto +closepath +stroke +gsave 10 dict begin +0.000 0.000 0.000 nodecolor +82 85 moveto +(Type\(\)) +[7.2 6.96 6.96 6.24 4.56 4.56] +xshow +end grestore +end grestore +% Aggregate()->Type() +newpath 101 144 moveto +101 136 101 127 101 118 curveto +stroke +gsave 10 dict begin +solid +1 setlinewidth +0.000 0.000 0.000 edgecolor +newpath 105 118 moveto +101 108 lineto +98 118 lineto +closepath +fill +0.000 0.000 0.000 edgecolor +newpath 105 118 moveto +101 108 lineto +98 118 lineto +closepath +stroke +end grestore +% Category +[ /Rect [ 67 0 135 36 ] + /Border [ 0 0 0 ] + /Action << /Subtype /URI /URI (books/bookvol10.pamphlet) >> + /Subtype /Link +/ANN pdfmark +gsave 10 dict begin +filled +0.537 0.247 0.902 nodecolor +0.537 0.247 0.902 nodecolor +newpath 135 36 moveto +67 36 lineto +67 0 lineto +135 0 lineto +closepath +fill +0.537 0.247 0.902 nodecolor +newpath 135 36 moveto +67 36 lineto +67 0 lineto +135 0 lineto +closepath +stroke +gsave 10 dict begin +0.000 0.000 0.000 nodecolor +75 13 moveto +(Category) +[9.36 6.24 3.84 6.24 6.96 6.96 5.04 6.96] +xshow +end grestore +end grestore +% Type()->Category +newpath 101 72 moveto +101 64 101 55 101 46 curveto +stroke +gsave 10 dict begin +solid +1 setlinewidth +0.000 0.000 0.000 edgecolor +newpath 105 46 moveto +101 36 lineto +98 46 lineto +closepath +fill +0.000 0.000 0.000 edgecolor +newpath 105 46 moveto +101 36 lineto +98 46 lineto +closepath +stroke +end grestore +endpage +showpage +grestore +%%PageTrailer +%%EndPage: 1 +%%Trailer +%%Pages: 1 +end +restore +%%EOF diff --git a/books/ps/v10indexedaggregate.ps b/books/ps/v10indexedaggregate.ps new file mode 100644 index 0000000..8dce4c2 --- /dev/null +++ b/books/ps/v10indexedaggregate.ps @@ -0,0 +1,574 @@ +%!PS-Adobe-2.0 +%%Creator: dot version 2.8 (Thu Sep 14 20:34:11 UTC 2006) +%%For: (root) root +%%Title: pic +%%Pages: (atend) +%%BoundingBox: 36 36 436 368 +%%EndComments +save +%%BeginProlog +/DotDict 200 dict def +DotDict begin + +/setupLatin1 { +mark +/EncodingVector 256 array def + EncodingVector 0 + +ISOLatin1Encoding 0 255 getinterval putinterval +EncodingVector 45 /hyphen put + +% Set up ISO Latin 1 character encoding +/starnetISO { + dup dup findfont dup length dict begin + { 1 index /FID ne { def }{ pop pop } ifelse + } forall + /Encoding EncodingVector def + currentdict end definefont +} def +/Times-Roman starnetISO def +/Times-Italic starnetISO def +/Times-Bold starnetISO def +/Times-BoldItalic starnetISO def +/Helvetica starnetISO def +/Helvetica-Oblique starnetISO def +/Helvetica-Bold starnetISO def +/Helvetica-BoldOblique starnetISO def +/Courier starnetISO def +/Courier-Oblique starnetISO def +/Courier-Bold starnetISO def +/Courier-BoldOblique starnetISO def +cleartomark +} bind def + +%%BeginResource: procset graphviz 0 0 +/coord-font-family /Times-Roman def +/default-font-family /Times-Roman def +/coordfont coord-font-family findfont 8 scalefont def + +/InvScaleFactor 1.0 def +/set_scale { + dup 1 exch div /InvScaleFactor exch def + dup scale +} bind def + +% styles +/solid { [] 0 setdash } bind def +/dashed { [9 InvScaleFactor mul dup ] 0 setdash } bind def +/dotted { [1 InvScaleFactor mul 6 InvScaleFactor mul] 0 setdash } bind def +/invis {/fill {newpath} def /stroke {newpath} def /show {pop newpath} def} bind def +/bold { 2 setlinewidth } bind def +/filled { } bind def +/unfilled { } bind def +/rounded { } bind def +/diagonals { } bind def + +% hooks for setting color +/nodecolor { sethsbcolor } bind def +/edgecolor { sethsbcolor } bind def +/graphcolor { sethsbcolor } bind def +/nopcolor {pop pop pop} bind def + +/beginpage { % i j npages + /npages exch def + /j exch def + /i exch def + /str 10 string def + npages 1 gt { + gsave + coordfont setfont + 0 0 moveto + (\() show i str cvs show (,) show j str cvs show (\)) show + grestore + } if +} bind def + +/set_font { + findfont exch + scalefont setfont +} def + +% draw aligned label in bounding box aligned to current point +/alignedtext { % width adj text + /text exch def + /adj exch def + /width exch def + gsave + width 0 gt { + text stringwidth pop adj mul 0 rmoveto + } if + [] 0 setdash + text show + grestore +} def + +/boxprim { % xcorner ycorner xsize ysize + 4 2 roll + moveto + 2 copy + exch 0 rlineto + 0 exch rlineto + pop neg 0 rlineto + closepath +} bind def + +/ellipse_path { + /ry exch def + /rx exch def + /y exch def + /x exch def + matrix currentmatrix + newpath + x y translate + rx ry scale + 0 0 1 0 360 arc + setmatrix +} bind def + +/endpage { showpage } bind def +/showpage { } def + +/layercolorseq + [ % layer color sequence - darkest to lightest + [0 0 0] + [.2 .8 .8] + [.4 .8 .8] + [.6 .8 .8] + [.8 .8 .8] + ] +def + +/layerlen layercolorseq length def + +/setlayer {/maxlayer exch def /curlayer exch def + layercolorseq curlayer 1 sub layerlen mod get + aload pop sethsbcolor + /nodecolor {nopcolor} def + /edgecolor {nopcolor} def + /graphcolor {nopcolor} def +} bind def + +/onlayer { curlayer ne {invis} if } def + +/onlayers { + /myupper exch def + /mylower exch def + curlayer mylower lt + curlayer myupper gt + or + {invis} if +} def + +/curlayer 0 def + +%%EndResource +%%EndProlog +%%BeginSetup +14 default-font-family set_font +1 setmiterlimit +% /arrowlength 10 def +% /arrowwidth 5 def + +% make sure pdfmark is harmless for PS-interpreters other than Distiller +/pdfmark where {pop} {userdict /pdfmark /cleartomark load put} ifelse +% make '<<' and '>>' safe on PS Level 1 devices +/languagelevel where {pop languagelevel}{1} ifelse +2 lt { + userdict (<<) cvn ([) cvn load put + userdict (>>) cvn ([) cvn load put +} if + +%%EndSetup +%%Page: 1 1 +%%PageBoundingBox: 36 36 436 368 +%%PageOrientation: Portrait +gsave +36 36 400 332 boxprim clip newpath +36 36 translate +0 0 1 beginpage +1.0000 set_scale +4 4 translate 0 rotate +0.167 0.600 1.000 graphcolor +0.167 0.600 1.000 graphcolor +newpath -6 -6 moveto +-6 330 lineto +398 330 lineto +398 -6 lineto +closepath +fill +0.167 0.600 1.000 graphcolor +newpath -6 -6 moveto +-6 330 lineto +398 330 lineto +398 -6 lineto +closepath +stroke +0.000 0.000 0.000 graphcolor +14.00 /Times-Roman set_font +% IndexedAggregate(a:SetCategory,b:Type) +[ /Rect [ 54 288 302 324 ] + /Border [ 0 0 0 ] + /Action << /Subtype /URI /URI (books/bookvol10.pamphlet) >> + /Subtype /Link +/ANN pdfmark +gsave 10 dict begin +filled +0.537 0.247 0.902 nodecolor +0.537 0.247 0.902 nodecolor +newpath 302 324 moveto +54 324 lineto +54 288 lineto +302 288 lineto +closepath +fill +0.537 0.247 0.902 nodecolor +newpath 302 324 moveto +54 324 lineto +54 288 lineto +302 288 lineto +closepath +stroke +gsave 10 dict begin +0.000 0.000 0.000 nodecolor +61 301 moveto +(IndexedAggregate\(a:SetCategory,b:Type\)) +[4.56 6.96 6.96 5.76 6.48 6.24 6.96 9.84 6.96 7.2 4.8 6.24 6.72 6.24 3.84 6.24 4.56 6.24 3.84 7.68 6 3.84 9.36 6.24 3.84 6.24 6.96 6.96 5.04 6 3.6 6.96 3.84 7.2 6.96 6.96 6.24 4.56] +xshow +end grestore +end grestore +% HomogeneousAggregate(a:Type) +[ /Rect [ 0 216 202 252 ] + /Border [ 0 0 0 ] + /Action << /Subtype /URI /URI (books/bookvol10.pamphlet) >> + /Subtype /Link +/ANN pdfmark +gsave 10 dict begin +filled +0.537 0.247 0.902 nodecolor +0.537 0.247 0.902 nodecolor +newpath 202 252 moveto +0 252 lineto +0 216 lineto +202 216 lineto +closepath +fill +0.537 0.247 0.902 nodecolor +newpath 202 252 moveto +0 252 lineto +0 216 lineto +202 216 lineto +closepath +stroke +gsave 10 dict begin +0.000 0.000 0.000 nodecolor +7 229 moveto +(HomogeneousAggregate\(a:Type\)) +[10.08 6.96 10.8 6.96 6.72 6.24 6.96 6.24 6.96 6.96 5.52 9.84 6.96 7.2 4.8 6.24 6.72 6.24 3.84 6.24 4.56 6.24 3.84 7.2 6.96 6.96 6.24 4.56] +xshow +end grestore +end grestore +% IndexedAggregate(a:SetCategory,b:Type)->HomogeneousAggregate(a:Type) +newpath 159 288 moveto +149 279 138 269 128 259 curveto +stroke +gsave 10 dict begin +solid +1 setlinewidth +0.000 0.000 0.000 edgecolor +newpath 130 256 moveto +120 252 lineto +125 261 lineto +closepath +fill +0.000 0.000 0.000 edgecolor +newpath 130 256 moveto +120 252 lineto +125 261 lineto +closepath +stroke +end grestore +% EltableAggregate(a:SetCategory,b:Type) +[ /Rect [ 148 144 392 180 ] + /Border [ 0 0 0 ] + /Action << /Subtype /URI /URI (books/bookvol10.pamphlet) >> + /Subtype /Link +/ANN pdfmark +gsave 10 dict begin +filled +0.537 0.247 0.902 nodecolor +0.537 0.247 0.902 nodecolor +newpath 392 180 moveto +148 180 lineto +148 144 lineto +392 144 lineto +closepath +fill +0.537 0.247 0.902 nodecolor +newpath 392 180 moveto +148 180 lineto +148 144 lineto +392 144 lineto +closepath +stroke +gsave 10 dict begin +0.000 0.000 0.000 nodecolor +156 157 moveto +(EltableAggregate\(a:SetCategory,b:Type\)) +[8.64 3.84 4.08 6.24 6.96 3.84 6.24 9.84 6.96 7.2 4.8 6.24 6.72 6.24 3.84 6.24 4.56 6.24 3.84 7.68 6 3.84 9.36 6.24 3.84 6.24 6.96 6.96 5.04 6 3.6 6.96 3.84 7.2 6.96 6.96 6.24 4.56] +xshow +end grestore +end grestore +% IndexedAggregate(a:SetCategory,b:Type)->EltableAggregate(a:SetCategory,b:Type) +newpath 190 288 moveto +205 263 235 218 253 189 curveto +stroke +gsave 10 dict begin +solid +1 setlinewidth +0.000 0.000 0.000 edgecolor +newpath 256 190 moveto +258 180 lineto +250 187 lineto +closepath +fill +0.000 0.000 0.000 edgecolor +newpath 256 190 moveto +258 180 lineto +250 187 lineto +closepath +stroke +end grestore +% Aggregate() +[ /Rect [ 46 144 130 180 ] + /Border [ 0 0 0 ] + /Action << /Subtype /URI /URI (books/bookvol10.pamphlet) >> + /Subtype /Link +/ANN pdfmark +gsave 10 dict begin +filled +0.537 0.247 0.902 nodecolor +0.537 0.247 0.902 nodecolor +newpath 130 180 moveto +46 180 lineto +46 144 lineto +130 144 lineto +closepath +fill +0.537 0.247 0.902 nodecolor +newpath 130 180 moveto +46 180 lineto +46 144 lineto +130 144 lineto +closepath +stroke +gsave 10 dict begin +0.000 0.000 0.000 nodecolor +53 157 moveto +(Aggregate\(\)) +[9.84 6.96 7.2 4.8 6.24 6.72 6.24 3.84 6.24 4.56 4.56] +xshow +end grestore +end grestore +% HomogeneousAggregate(a:Type)->Aggregate() +newpath 98 216 moveto +97 208 95 199 93 190 curveto +stroke +gsave 10 dict begin +solid +1 setlinewidth +0.000 0.000 0.000 edgecolor +newpath 96 189 moveto +91 180 lineto +90 190 lineto +closepath +fill +0.000 0.000 0.000 edgecolor +newpath 96 189 moveto +91 180 lineto +90 190 lineto +closepath +stroke +end grestore +% Eltable(a:SetCategory,b:Type) +[ /Rect [ 166 72 352 108 ] + /Border [ 0 0 0 ] + /Action << /Subtype /URI /URI (books/bookvol10.pamphlet) >> + /Subtype /Link +/ANN pdfmark +gsave 10 dict begin +filled +0.537 0.247 0.902 nodecolor +0.537 0.247 0.902 nodecolor +newpath 352 108 moveto +166 108 lineto +166 72 lineto +352 72 lineto +closepath +fill +0.537 0.247 0.902 nodecolor +newpath 352 108 moveto +166 108 lineto +166 72 lineto +352 72 lineto +closepath +stroke +gsave 10 dict begin +0.000 0.000 0.000 nodecolor +174 85 moveto +(Eltable\(a:SetCategory,b:Type\)) +[8.64 3.84 4.08 6.24 6.96 3.84 6.24 4.56 6.24 3.84 7.68 6 3.84 9.36 6.24 3.84 6.24 6.96 6.96 5.04 6 3.6 6.96 3.84 7.2 6.96 6.96 6.24 4.56] +xshow +end grestore +end grestore +% EltableAggregate(a:SetCategory,b:Type)->Eltable(a:SetCategory,b:Type) +newpath 267 144 moveto +266 136 264 127 263 118 curveto +stroke +gsave 10 dict begin +solid +1 setlinewidth +0.000 0.000 0.000 edgecolor +newpath 266 118 moveto +262 108 lineto +260 118 lineto +closepath +fill +0.000 0.000 0.000 edgecolor +newpath 266 118 moveto +262 108 lineto +260 118 lineto +closepath +stroke +end grestore +% Type() +[ /Rect [ 83 72 137 108 ] + /Border [ 0 0 0 ] + /Action << /Subtype /URI /URI (books/bookvol10.pamphlet) >> + /Subtype /Link +/ANN pdfmark +gsave 10 dict begin +filled +0.537 0.247 0.902 nodecolor +0.537 0.247 0.902 nodecolor +newpath 137 108 moveto +83 108 lineto +83 72 lineto +137 72 lineto +closepath +fill +0.537 0.247 0.902 nodecolor +newpath 137 108 moveto +83 108 lineto +83 72 lineto +137 72 lineto +closepath +stroke +gsave 10 dict begin +0.000 0.000 0.000 nodecolor +91 85 moveto +(Type\(\)) +[7.2 6.96 6.96 6.24 4.56 4.56] +xshow +end grestore +end grestore +% Aggregate()->Type() +newpath 94 144 moveto +96 136 99 126 102 118 curveto +stroke +gsave 10 dict begin +solid +1 setlinewidth +0.000 0.000 0.000 edgecolor +newpath 105 119 moveto +105 108 lineto +99 117 lineto +closepath +fill +0.000 0.000 0.000 edgecolor +newpath 105 119 moveto +105 108 lineto +99 117 lineto +closepath +stroke +end grestore +% Category +[ /Rect [ 150 0 218 36 ] + /Border [ 0 0 0 ] + /Action << /Subtype /URI /URI (books/bookvol10.pamphlet) >> + /Subtype /Link +/ANN pdfmark +gsave 10 dict begin +filled +0.537 0.247 0.902 nodecolor +0.537 0.247 0.902 nodecolor +newpath 218 36 moveto +150 36 lineto +150 0 lineto +218 0 lineto +closepath +fill +0.537 0.247 0.902 nodecolor +newpath 218 36 moveto +150 36 lineto +150 0 lineto +218 0 lineto +closepath +stroke +gsave 10 dict begin +0.000 0.000 0.000 nodecolor +158 13 moveto +(Category) +[9.36 6.24 3.84 6.24 6.96 6.96 5.04 6.96] +xshow +end grestore +end grestore +% Type()->Category +newpath 129 72 moveto +138 63 149 53 159 43 curveto +stroke +gsave 10 dict begin +solid +1 setlinewidth +0.000 0.000 0.000 edgecolor +newpath 161 46 moveto +166 36 lineto +156 41 lineto +closepath +fill +0.000 0.000 0.000 edgecolor +newpath 161 46 moveto +166 36 lineto +156 41 lineto +closepath +stroke +end grestore +% Eltable(a:SetCategory,b:Type)->Category +newpath 240 72 moveto +231 63 220 53 210 43 curveto +stroke +gsave 10 dict begin +solid +1 setlinewidth +0.000 0.000 0.000 edgecolor +newpath 213 41 moveto +203 36 lineto +208 46 lineto +closepath +fill +0.000 0.000 0.000 edgecolor +newpath 213 41 moveto +203 36 lineto +208 46 lineto +closepath +stroke +end grestore +endpage +showpage +grestore +%%PageTrailer +%%EndPage: 1 +%%Trailer +%%Pages: 1 +end +restore +%%EOF diff --git a/books/ps/v10keyeddictionary.ps b/books/ps/v10keyeddictionary.ps new file mode 100644 index 0000000..02ee4d3 --- /dev/null +++ b/books/ps/v10keyeddictionary.ps @@ -0,0 +1,676 @@ +%!PS-Adobe-2.0 +%%Creator: dot version 2.8 (Thu Sep 14 20:34:11 UTC 2006) +%%For: (root) root +%%Title: pic +%%Pages: (atend) +%%BoundingBox: 36 36 410 512 +%%EndComments +save +%%BeginProlog +/DotDict 200 dict def +DotDict begin + +/setupLatin1 { +mark +/EncodingVector 256 array def + EncodingVector 0 + +ISOLatin1Encoding 0 255 getinterval putinterval +EncodingVector 45 /hyphen put + +% Set up ISO Latin 1 character encoding +/starnetISO { + dup dup findfont dup length dict begin + { 1 index /FID ne { def }{ pop pop } ifelse + } forall + /Encoding EncodingVector def + currentdict end definefont +} def +/Times-Roman starnetISO def +/Times-Italic starnetISO def +/Times-Bold starnetISO def +/Times-BoldItalic starnetISO def +/Helvetica starnetISO def +/Helvetica-Oblique starnetISO def +/Helvetica-Bold starnetISO def +/Helvetica-BoldOblique starnetISO def +/Courier starnetISO def +/Courier-Oblique starnetISO def +/Courier-Bold starnetISO def +/Courier-BoldOblique starnetISO def +cleartomark +} bind def + +%%BeginResource: procset graphviz 0 0 +/coord-font-family /Times-Roman def +/default-font-family /Times-Roman def +/coordfont coord-font-family findfont 8 scalefont def + +/InvScaleFactor 1.0 def +/set_scale { + dup 1 exch div /InvScaleFactor exch def + dup scale +} bind def + +% styles +/solid { [] 0 setdash } bind def +/dashed { [9 InvScaleFactor mul dup ] 0 setdash } bind def +/dotted { [1 InvScaleFactor mul 6 InvScaleFactor mul] 0 setdash } bind def +/invis {/fill {newpath} def /stroke {newpath} def /show {pop newpath} def} bind def +/bold { 2 setlinewidth } bind def +/filled { } bind def +/unfilled { } bind def +/rounded { } bind def +/diagonals { } bind def + +% hooks for setting color +/nodecolor { sethsbcolor } bind def +/edgecolor { sethsbcolor } bind def +/graphcolor { sethsbcolor } bind def +/nopcolor {pop pop pop} bind def + +/beginpage { % i j npages + /npages exch def + /j exch def + /i exch def + /str 10 string def + npages 1 gt { + gsave + coordfont setfont + 0 0 moveto + (\() show i str cvs show (,) show j str cvs show (\)) show + grestore + } if +} bind def + +/set_font { + findfont exch + scalefont setfont +} def + +% draw aligned label in bounding box aligned to current point +/alignedtext { % width adj text + /text exch def + /adj exch def + /width exch def + gsave + width 0 gt { + text stringwidth pop adj mul 0 rmoveto + } if + [] 0 setdash + text show + grestore +} def + +/boxprim { % xcorner ycorner xsize ysize + 4 2 roll + moveto + 2 copy + exch 0 rlineto + 0 exch rlineto + pop neg 0 rlineto + closepath +} bind def + +/ellipse_path { + /ry exch def + /rx exch def + /y exch def + /x exch def + matrix currentmatrix + newpath + x y translate + rx ry scale + 0 0 1 0 360 arc + setmatrix +} bind def + +/endpage { showpage } bind def +/showpage { } def + +/layercolorseq + [ % layer color sequence - darkest to lightest + [0 0 0] + [.2 .8 .8] + [.4 .8 .8] + [.6 .8 .8] + [.8 .8 .8] + ] +def + +/layerlen layercolorseq length def + +/setlayer {/maxlayer exch def /curlayer exch def + layercolorseq curlayer 1 sub layerlen mod get + aload pop sethsbcolor + /nodecolor {nopcolor} def + /edgecolor {nopcolor} def + /graphcolor {nopcolor} def +} bind def + +/onlayer { curlayer ne {invis} if } def + +/onlayers { + /myupper exch def + /mylower exch def + curlayer mylower lt + curlayer myupper gt + or + {invis} if +} def + +/curlayer 0 def + +%%EndResource +%%EndProlog +%%BeginSetup +14 default-font-family set_font +1 setmiterlimit +% /arrowlength 10 def +% /arrowwidth 5 def + +% make sure pdfmark is harmless for PS-interpreters other than Distiller +/pdfmark where {pop} {userdict /pdfmark /cleartomark load put} ifelse +% make '<<' and '>>' safe on PS Level 1 devices +/languagelevel where {pop languagelevel}{1} ifelse +2 lt { + userdict (<<) cvn ([) cvn load put + userdict (>>) cvn ([) cvn load put +} if + +%%EndSetup +%%Page: 1 1 +%%PageBoundingBox: 36 36 410 512 +%%PageOrientation: Portrait +gsave +36 36 374 476 boxprim clip newpath +36 36 translate +0 0 1 beginpage +1.0000 set_scale +4 4 translate 0 rotate +0.167 0.600 1.000 graphcolor +0.167 0.600 1.000 graphcolor +newpath -6 -6 moveto +-6 474 lineto +372 474 lineto +372 -6 lineto +closepath +fill +0.167 0.600 1.000 graphcolor +newpath -6 -6 moveto +-6 474 lineto +372 474 lineto +372 -6 lineto +closepath +stroke +0.000 0.000 0.000 graphcolor +14.00 /Times-Roman set_font +% KeyedDictionary(a:SetCategory,b:SetCategory) +[ /Rect [ 47 432 331 468 ] + /Border [ 0 0 0 ] + /Action << /Subtype /URI /URI (books/bookvol10.pamphlet) >> + /Subtype /Link +/ANN pdfmark +gsave 10 dict begin +filled +0.537 0.247 0.902 nodecolor +0.537 0.247 0.902 nodecolor +newpath 331 468 moveto +47 468 lineto +47 432 lineto +331 432 lineto +closepath +fill +0.537 0.247 0.902 nodecolor +newpath 331 468 moveto +47 468 lineto +47 432 lineto +331 432 lineto +closepath +stroke +gsave 10 dict begin +0.000 0.000 0.000 nodecolor +55 445 moveto +(KeyedDictionary\(a:SetCategory,b:SetCategory\)) +[9.6 5.76 6.48 6.24 6.96 10.08 3.84 6.24 3.84 3.84 6.96 6.96 6.24 5.04 6.96 4.56 6.24 3.84 7.68 6 3.84 9.36 6.24 3.84 6.24 6.96 6.96 5.04 6 3.6 6.96 3.84 7.68 6 3.84 9.36 6.24 3.84 6.24 6.96 6.96 5.04 6.96 4.56] +xshow +end grestore +end grestore +% Dictionary(Record(a:SetCategory,b:SetCategory)) +[ /Rect [ 40 360 338 396 ] + /Border [ 0 0 0 ] + /Action << /Subtype /URI /URI (books/bookvol10.pamphlet) >> + /Subtype /Link +/ANN pdfmark +gsave 10 dict begin +filled +0.404 0.667 0.545 nodecolor +0.404 0.667 0.545 nodecolor +newpath 338 396 moveto +40 396 lineto +40 360 lineto +338 360 lineto +closepath +fill +0.404 0.667 0.545 nodecolor +newpath 338 396 moveto +40 396 lineto +40 360 lineto +338 360 lineto +closepath +stroke +gsave 10 dict begin +0.000 0.000 0.000 nodecolor +48 373 moveto +(Dictionary\(Record\(a:SetCategory,b:SetCategory\)\)) +[10.08 3.84 6.24 3.84 3.84 6.96 6.96 6.24 5.04 6.96 4.56 9.12 6.24 6.24 6.96 4.56 6.96 4.56 6.24 3.84 7.68 6 3.84 9.36 6.24 3.84 6.24 6.96 6.96 5.04 6 3.6 6.96 3.84 7.68 6 3.84 9.36 6.24 3.84 6.24 6.96 6.96 5.04 6.96 4.56 4.56] +xshow +end grestore +end grestore +% KeyedDictionary(a:SetCategory,b:SetCategory)->Dictionary(Record(a:SetCategory,b:SetCategory)) +newpath 189 432 moveto +189 424 189 415 189 406 curveto +stroke +gsave 10 dict begin +solid +1 setlinewidth +0.000 0.000 0.000 edgecolor +newpath 193 406 moveto +189 396 lineto +186 406 lineto +closepath +fill +0.000 0.000 0.000 edgecolor +newpath 193 406 moveto +189 396 lineto +186 406 lineto +closepath +stroke +end grestore +% Dictionary(a:SetCategory) +[ /Rect [ 106 288 272 324 ] + /Border [ 0 0 0 ] + /Action << /Subtype /URI /URI (books/bookvol10.pamphlet) >> + /Subtype /Link +/ANN pdfmark +gsave 10 dict begin +filled +0.537 0.247 0.902 nodecolor +0.537 0.247 0.902 nodecolor +newpath 272 324 moveto +106 324 lineto +106 288 lineto +272 288 lineto +closepath +fill +0.537 0.247 0.902 nodecolor +newpath 272 324 moveto +106 324 lineto +106 288 lineto +272 288 lineto +closepath +stroke +gsave 10 dict begin +0.000 0.000 0.000 nodecolor +114 301 moveto +(Dictionary\(a:SetCategory\)) +[10.08 3.84 6.24 3.84 3.84 6.96 6.96 6.24 5.04 6.96 4.56 6.24 3.84 7.68 6 3.84 9.36 6.24 3.84 6.24 6.96 6.96 5.04 6.96 4.56] +xshow +end grestore +end grestore +% Dictionary(Record(a:SetCategory,b:SetCategory))->Dictionary(a:SetCategory) +newpath 189 360 moveto +189 352 189 343 189 334 curveto +stroke +gsave 10 dict begin +solid +1 setlinewidth +0.000 0.000 0.000 edgecolor +newpath 193 334 moveto +189 324 lineto +186 334 lineto +closepath +fill +0.000 0.000 0.000 edgecolor +newpath 193 334 moveto +189 324 lineto +186 334 lineto +closepath +stroke +end grestore +% DictionaryOperations(a:SetCategory) +[ /Rect [ 76 216 302 252 ] + /Border [ 0 0 0 ] + /Action << /Subtype /URI /URI (books/bookvol10.pamphlet) >> + /Subtype /Link +/ANN pdfmark +gsave 10 dict begin +filled +0.537 0.247 0.902 nodecolor +0.537 0.247 0.902 nodecolor +newpath 302 252 moveto +76 252 lineto +76 216 lineto +302 216 lineto +closepath +fill +0.537 0.247 0.902 nodecolor +newpath 302 252 moveto +76 252 lineto +76 216 lineto +302 216 lineto +closepath +stroke +gsave 10 dict begin +0.000 0.000 0.000 nodecolor +83 229 moveto +(DictionaryOperations\(a:SetCategory\)) +[10.08 3.84 6.24 3.84 3.84 6.96 6.96 6.24 5.04 6.96 10.08 6.96 6.24 4.8 6.24 3.84 3.84 6.96 6.96 5.52 4.56 6.24 3.84 7.68 6 3.84 9.36 6.24 3.84 6.24 6.96 6.96 5.04 6.96 4.56] +xshow +end grestore +end grestore +% Dictionary(a:SetCategory)->DictionaryOperations(a:SetCategory) +newpath 189 288 moveto +189 280 189 271 189 262 curveto +stroke +gsave 10 dict begin +solid +1 setlinewidth +0.000 0.000 0.000 edgecolor +newpath 193 262 moveto +189 252 lineto +186 262 lineto +closepath +fill +0.000 0.000 0.000 edgecolor +newpath 193 262 moveto +189 252 lineto +186 262 lineto +closepath +stroke +end grestore +% BagAggregate(a:SetCategory) +[ /Rect [ 0 144 186 180 ] + /Border [ 0 0 0 ] + /Action << /Subtype /URI /URI (books/bookvol10.pamphlet) >> + /Subtype /Link +/ANN pdfmark +gsave 10 dict begin +filled +0.404 0.667 0.545 nodecolor +0.404 0.667 0.545 nodecolor +newpath 186 180 moveto +0 180 lineto +0 144 lineto +186 144 lineto +closepath +fill +0.404 0.667 0.545 nodecolor +newpath 186 180 moveto +0 180 lineto +0 144 lineto +186 144 lineto +closepath +stroke +gsave 10 dict begin +0.000 0.000 0.000 nodecolor +7 157 moveto +(BagAggregate\(a:SetCategory\)) +[9.36 6.24 6.96 9.84 6.96 7.2 4.8 6.24 6.72 6.24 3.84 6.24 4.56 6.24 3.84 7.68 6 3.84 9.36 6.24 3.84 6.24 6.96 6.96 5.04 6.96 4.56] +xshow +end grestore +end grestore +% DictionaryOperations(a:SetCategory)->BagAggregate(a:SetCategory) +newpath 165 216 moveto +153 207 138 196 125 186 curveto +stroke +gsave 10 dict begin +solid +1 setlinewidth +0.000 0.000 0.000 edgecolor +newpath 127 183 moveto +117 180 lineto +123 189 lineto +closepath +fill +0.000 0.000 0.000 edgecolor +newpath 127 183 moveto +117 180 lineto +123 189 lineto +closepath +stroke +end grestore +% Collection(a:SetCategory) +[ /Rect [ 204 144 366 180 ] + /Border [ 0 0 0 ] + /Action << /Subtype /URI /URI (books/bookvol10.pamphlet) >> + /Subtype /Link +/ANN pdfmark +gsave 10 dict begin +filled +0.404 0.667 0.545 nodecolor +0.404 0.667 0.545 nodecolor +newpath 366 180 moveto +204 180 lineto +204 144 lineto +366 144 lineto +closepath +fill +0.404 0.667 0.545 nodecolor +newpath 366 180 moveto +204 180 lineto +204 144 lineto +366 144 lineto +closepath +stroke +gsave 10 dict begin +0.000 0.000 0.000 nodecolor +211 157 moveto +(Collection\(a:SetCategory\)) +[9.36 6.96 3.84 3.84 6.24 6.24 3.84 3.84 6.96 6.96 4.56 6.24 3.84 7.68 6 3.84 9.36 6.24 3.84 6.24 6.96 6.96 5.04 6.96 4.56] +xshow +end grestore +end grestore +% DictionaryOperations(a:SetCategory)->Collection(a:SetCategory) +newpath 213 216 moveto +225 207 240 196 253 186 curveto +stroke +gsave 10 dict begin +solid +1 setlinewidth +0.000 0.000 0.000 edgecolor +newpath 255 189 moveto +261 180 lineto +251 183 lineto +closepath +fill +0.000 0.000 0.000 edgecolor +newpath 255 189 moveto +261 180 lineto +251 183 lineto +closepath +stroke +end grestore +% BagAggregate(a:Type) +[ /Rect [ 31 72 175 108 ] + /Border [ 0 0 0 ] + /Action << /Subtype /URI /URI (books/bookvol10.pamphlet) >> + /Subtype /Link +/ANN pdfmark +gsave 10 dict begin +filled +0.537 0.247 0.902 nodecolor +0.537 0.247 0.902 nodecolor +newpath 175 108 moveto +31 108 lineto +31 72 lineto +175 72 lineto +closepath +fill +0.537 0.247 0.902 nodecolor +newpath 175 108 moveto +31 108 lineto +31 72 lineto +175 72 lineto +closepath +stroke +gsave 10 dict begin +0.000 0.000 0.000 nodecolor +38 85 moveto +(BagAggregate\(a:Type\)) +[9.36 6.24 6.96 9.84 6.96 7.2 4.8 6.24 6.72 6.24 3.84 6.24 4.56 6.24 3.84 7.2 6.96 6.96 6.24 4.56] +xshow +end grestore +end grestore +% BagAggregate(a:SetCategory)->BagAggregate(a:Type) +newpath 96 144 moveto +97 136 98 127 99 118 curveto +stroke +gsave 10 dict begin +solid +1 setlinewidth +0.000 0.000 0.000 edgecolor +newpath 102 118 moveto +100 108 lineto +96 118 lineto +closepath +fill +0.000 0.000 0.000 edgecolor +newpath 102 118 moveto +100 108 lineto +96 118 lineto +closepath +stroke +end grestore +% Collection(a:Type) +[ /Rect [ 214 72 334 108 ] + /Border [ 0 0 0 ] + /Action << /Subtype /URI /URI (books/bookvol10.pamphlet) >> + /Subtype /Link +/ANN pdfmark +gsave 10 dict begin +filled +0.537 0.247 0.902 nodecolor +0.537 0.247 0.902 nodecolor +newpath 334 108 moveto +214 108 lineto +214 72 lineto +334 72 lineto +closepath +fill +0.537 0.247 0.902 nodecolor +newpath 334 108 moveto +214 108 lineto +214 72 lineto +334 72 lineto +closepath +stroke +gsave 10 dict begin +0.000 0.000 0.000 nodecolor +221 85 moveto +(Collection\(a:Type\)) +[9.36 6.96 3.84 3.84 6.24 6.24 3.84 3.84 6.96 6.96 4.56 6.24 3.84 7.2 6.96 6.96 6.24 4.56] +xshow +end grestore +end grestore +% Collection(a:SetCategory)->Collection(a:Type) +newpath 282 144 moveto +281 136 279 127 278 118 curveto +stroke +gsave 10 dict begin +solid +1 setlinewidth +0.000 0.000 0.000 edgecolor +newpath 281 118 moveto +277 108 lineto +275 118 lineto +closepath +fill +0.000 0.000 0.000 edgecolor +newpath 281 118 moveto +277 108 lineto +275 118 lineto +closepath +stroke +end grestore +% ... +[ /Rect [ 161 0 215 36 ] + /Border [ 0 0 0 ] + /Action << /Subtype /URI /URI (books/bookvol10.pamphlet) >> + /Subtype /Link +/ANN pdfmark +gsave 10 dict begin +filled +0.537 0.247 0.902 nodecolor +0.537 0.247 0.902 nodecolor +newpath 215 36 moveto +161 36 lineto +161 0 lineto +215 0 lineto +closepath +fill +0.537 0.247 0.902 nodecolor +newpath 215 36 moveto +161 36 lineto +161 0 lineto +215 0 lineto +closepath +stroke +gsave 10 dict begin +0.000 0.000 0.000 nodecolor +182 13 moveto +(...) +[3.6 3.6 3.6] +xshow +end grestore +end grestore +% Collection(a:Type)->... +newpath 252 72 moveto +241 63 228 52 217 42 curveto +stroke +gsave 10 dict begin +solid +1 setlinewidth +0.000 0.000 0.000 edgecolor +newpath 219 39 moveto +209 36 lineto +215 45 lineto +closepath +fill +0.000 0.000 0.000 edgecolor +newpath 219 39 moveto +209 36 lineto +215 45 lineto +closepath +stroke +end grestore +% BagAggregate(a:Type)->... +newpath 124 72 moveto +135 63 148 52 159 42 curveto +stroke +gsave 10 dict begin +solid +1 setlinewidth +0.000 0.000 0.000 edgecolor +newpath 161 45 moveto +167 36 lineto +157 39 lineto +closepath +fill +0.000 0.000 0.000 edgecolor +newpath 161 45 moveto +167 36 lineto +157 39 lineto +closepath +stroke +end grestore +endpage +showpage +grestore +%%PageTrailer +%%EndPage: 1 +%%Trailer +%%Pages: 1 +end +restore +%%EOF diff --git a/books/ps/v10koerce.ps b/books/ps/v10koerce.ps new file mode 100644 index 0000000..dc41712 --- /dev/null +++ b/books/ps/v10koerce.ps @@ -0,0 +1,299 @@ +%!PS-Adobe-2.0 +%%Creator: dot version 2.8 (Thu Sep 14 20:34:11 UTC 2006) +%%For: (root) root +%%Title: pic +%%Pages: (atend) +%%BoundingBox: 36 36 176 152 +%%EndComments +save +%%BeginProlog +/DotDict 200 dict def +DotDict begin + +/setupLatin1 { +mark +/EncodingVector 256 array def + EncodingVector 0 + +ISOLatin1Encoding 0 255 getinterval putinterval +EncodingVector 45 /hyphen put + +% Set up ISO Latin 1 character encoding +/starnetISO { + dup dup findfont dup length dict begin + { 1 index /FID ne { def }{ pop pop } ifelse + } forall + /Encoding EncodingVector def + currentdict end definefont +} def +/Times-Roman starnetISO def +/Times-Italic starnetISO def +/Times-Bold starnetISO def +/Times-BoldItalic starnetISO def +/Helvetica starnetISO def +/Helvetica-Oblique starnetISO def +/Helvetica-Bold starnetISO def +/Helvetica-BoldOblique starnetISO def +/Courier starnetISO def +/Courier-Oblique starnetISO def +/Courier-Bold starnetISO def +/Courier-BoldOblique starnetISO def +cleartomark +} bind def + +%%BeginResource: procset graphviz 0 0 +/coord-font-family /Times-Roman def +/default-font-family /Times-Roman def +/coordfont coord-font-family findfont 8 scalefont def + +/InvScaleFactor 1.0 def +/set_scale { + dup 1 exch div /InvScaleFactor exch def + dup scale +} bind def + +% styles +/solid { [] 0 setdash } bind def +/dashed { [9 InvScaleFactor mul dup ] 0 setdash } bind def +/dotted { [1 InvScaleFactor mul 6 InvScaleFactor mul] 0 setdash } bind def +/invis {/fill {newpath} def /stroke {newpath} def /show {pop newpath} def} bind def +/bold { 2 setlinewidth } bind def +/filled { } bind def +/unfilled { } bind def +/rounded { } bind def +/diagonals { } bind def + +% hooks for setting color +/nodecolor { sethsbcolor } bind def +/edgecolor { sethsbcolor } bind def +/graphcolor { sethsbcolor } bind def +/nopcolor {pop pop pop} bind def + +/beginpage { % i j npages + /npages exch def + /j exch def + /i exch def + /str 10 string def + npages 1 gt { + gsave + coordfont setfont + 0 0 moveto + (\() show i str cvs show (,) show j str cvs show (\)) show + grestore + } if +} bind def + +/set_font { + findfont exch + scalefont setfont +} def + +% draw aligned label in bounding box aligned to current point +/alignedtext { % width adj text + /text exch def + /adj exch def + /width exch def + gsave + width 0 gt { + text stringwidth pop adj mul 0 rmoveto + } if + [] 0 setdash + text show + grestore +} def + +/boxprim { % xcorner ycorner xsize ysize + 4 2 roll + moveto + 2 copy + exch 0 rlineto + 0 exch rlineto + pop neg 0 rlineto + closepath +} bind def + +/ellipse_path { + /ry exch def + /rx exch def + /y exch def + /x exch def + matrix currentmatrix + newpath + x y translate + rx ry scale + 0 0 1 0 360 arc + setmatrix +} bind def + +/endpage { showpage } bind def +/showpage { } def + +/layercolorseq + [ % layer color sequence - darkest to lightest + [0 0 0] + [.2 .8 .8] + [.4 .8 .8] + [.6 .8 .8] + [.8 .8 .8] + ] +def + +/layerlen layercolorseq length def + +/setlayer {/maxlayer exch def /curlayer exch def + layercolorseq curlayer 1 sub layerlen mod get + aload pop sethsbcolor + /nodecolor {nopcolor} def + /edgecolor {nopcolor} def + /graphcolor {nopcolor} def +} bind def + +/onlayer { curlayer ne {invis} if } def + +/onlayers { + /myupper exch def + /mylower exch def + curlayer mylower lt + curlayer myupper gt + or + {invis} if +} def + +/curlayer 0 def + +%%EndResource +%%EndProlog +%%BeginSetup +14 default-font-family set_font +1 setmiterlimit +% /arrowlength 10 def +% /arrowwidth 5 def + +% make sure pdfmark is harmless for PS-interpreters other than Distiller +/pdfmark where {pop} {userdict /pdfmark /cleartomark load put} ifelse +% make '<<' and '>>' safe on PS Level 1 devices +/languagelevel where {pop languagelevel}{1} ifelse +2 lt { + userdict (<<) cvn ([) cvn load put + userdict (>>) cvn ([) cvn load put +} if + +%%EndSetup +%%Page: 1 1 +%%PageBoundingBox: 36 36 176 152 +%%PageOrientation: Portrait +gsave +36 36 140 116 boxprim clip newpath +36 36 translate +0 0 1 beginpage +1.0000 set_scale +4 4 translate 0 rotate +0.167 0.600 1.000 graphcolor +0.167 0.600 1.000 graphcolor +newpath -6 -6 moveto +-6 114 lineto +138 114 lineto +138 -6 lineto +closepath +fill +0.167 0.600 1.000 graphcolor +newpath -6 -6 moveto +-6 114 lineto +138 114 lineto +138 -6 lineto +closepath +stroke +0.000 0.000 0.000 graphcolor +14.00 /Times-Roman set_font +% CoercibleTo(a:Type) +[ /Rect [ 0 72 132 108 ] + /Border [ 0 0 0 ] + /Action << /Subtype /URI /URI (books/bookvol10.pamphlet) >> + /Subtype /Link +/ANN pdfmark +gsave 10 dict begin +filled +0.537 0.247 0.902 nodecolor +0.537 0.247 0.902 nodecolor +newpath 132 108 moveto +0 108 lineto +0 72 lineto +132 72 lineto +closepath +fill +0.537 0.247 0.902 nodecolor +newpath 132 108 moveto +0 108 lineto +0 72 lineto +132 72 lineto +closepath +stroke +gsave 10 dict begin +0.000 0.000 0.000 nodecolor +8 85 moveto +(CoercibleTo\(a:Type\)) +[9.36 6.96 6.24 4.8 6.24 3.84 6.96 3.84 6.24 7.44 6.96 4.56 6.24 3.84 7.2 6.96 6.96 6.24 4.56] +xshow +end grestore +end grestore +% Category +[ /Rect [ 32 0 100 36 ] + /Border [ 0 0 0 ] + /Action << /Subtype /URI /URI (books/bookvol10.pamphlet) >> + /Subtype /Link +/ANN pdfmark +gsave 10 dict begin +filled +0.537 0.247 0.902 nodecolor +0.537 0.247 0.902 nodecolor +newpath 100 36 moveto +32 36 lineto +32 0 lineto +100 0 lineto +closepath +fill +0.537 0.247 0.902 nodecolor +newpath 100 36 moveto +32 36 lineto +32 0 lineto +100 0 lineto +closepath +stroke +gsave 10 dict begin +0.000 0.000 0.000 nodecolor +40 13 moveto +(Category) +[9.36 6.24 3.84 6.24 6.96 6.96 5.04 6.96] +xshow +end grestore +end grestore +% CoercibleTo(a:Type)->Category +newpath 66 72 moveto +66 64 66 55 66 46 curveto +stroke +gsave 10 dict begin +solid +1 setlinewidth +0.000 0.000 0.000 edgecolor +newpath 70 46 moveto +66 36 lineto +63 46 lineto +closepath +fill +0.000 0.000 0.000 edgecolor +newpath 70 46 moveto +66 36 lineto +63 46 lineto +closepath +stroke +end grestore +endpage +showpage +grestore +%%PageTrailer +%%EndPage: 1 +%%Trailer +%%Pages: 1 +end +restore +%%EOF diff --git a/books/ps/v10konvert.ps b/books/ps/v10konvert.ps new file mode 100644 index 0000000..aedf31c --- /dev/null +++ b/books/ps/v10konvert.ps @@ -0,0 +1,299 @@ +%!PS-Adobe-2.0 +%%Creator: dot version 2.8 (Thu Sep 14 20:34:11 UTC 2006) +%%For: (root) root +%%Title: pic +%%Pages: (atend) +%%BoundingBox: 36 36 186 152 +%%EndComments +save +%%BeginProlog +/DotDict 200 dict def +DotDict begin + +/setupLatin1 { +mark +/EncodingVector 256 array def + EncodingVector 0 + +ISOLatin1Encoding 0 255 getinterval putinterval +EncodingVector 45 /hyphen put + +% Set up ISO Latin 1 character encoding +/starnetISO { + dup dup findfont dup length dict begin + { 1 index /FID ne { def }{ pop pop } ifelse + } forall + /Encoding EncodingVector def + currentdict end definefont +} def +/Times-Roman starnetISO def +/Times-Italic starnetISO def +/Times-Bold starnetISO def +/Times-BoldItalic starnetISO def +/Helvetica starnetISO def +/Helvetica-Oblique starnetISO def +/Helvetica-Bold starnetISO def +/Helvetica-BoldOblique starnetISO def +/Courier starnetISO def +/Courier-Oblique starnetISO def +/Courier-Bold starnetISO def +/Courier-BoldOblique starnetISO def +cleartomark +} bind def + +%%BeginResource: procset graphviz 0 0 +/coord-font-family /Times-Roman def +/default-font-family /Times-Roman def +/coordfont coord-font-family findfont 8 scalefont def + +/InvScaleFactor 1.0 def +/set_scale { + dup 1 exch div /InvScaleFactor exch def + dup scale +} bind def + +% styles +/solid { [] 0 setdash } bind def +/dashed { [9 InvScaleFactor mul dup ] 0 setdash } bind def +/dotted { [1 InvScaleFactor mul 6 InvScaleFactor mul] 0 setdash } bind def +/invis {/fill {newpath} def /stroke {newpath} def /show {pop newpath} def} bind def +/bold { 2 setlinewidth } bind def +/filled { } bind def +/unfilled { } bind def +/rounded { } bind def +/diagonals { } bind def + +% hooks for setting color +/nodecolor { sethsbcolor } bind def +/edgecolor { sethsbcolor } bind def +/graphcolor { sethsbcolor } bind def +/nopcolor {pop pop pop} bind def + +/beginpage { % i j npages + /npages exch def + /j exch def + /i exch def + /str 10 string def + npages 1 gt { + gsave + coordfont setfont + 0 0 moveto + (\() show i str cvs show (,) show j str cvs show (\)) show + grestore + } if +} bind def + +/set_font { + findfont exch + scalefont setfont +} def + +% draw aligned label in bounding box aligned to current point +/alignedtext { % width adj text + /text exch def + /adj exch def + /width exch def + gsave + width 0 gt { + text stringwidth pop adj mul 0 rmoveto + } if + [] 0 setdash + text show + grestore +} def + +/boxprim { % xcorner ycorner xsize ysize + 4 2 roll + moveto + 2 copy + exch 0 rlineto + 0 exch rlineto + pop neg 0 rlineto + closepath +} bind def + +/ellipse_path { + /ry exch def + /rx exch def + /y exch def + /x exch def + matrix currentmatrix + newpath + x y translate + rx ry scale + 0 0 1 0 360 arc + setmatrix +} bind def + +/endpage { showpage } bind def +/showpage { } def + +/layercolorseq + [ % layer color sequence - darkest to lightest + [0 0 0] + [.2 .8 .8] + [.4 .8 .8] + [.6 .8 .8] + [.8 .8 .8] + ] +def + +/layerlen layercolorseq length def + +/setlayer {/maxlayer exch def /curlayer exch def + layercolorseq curlayer 1 sub layerlen mod get + aload pop sethsbcolor + /nodecolor {nopcolor} def + /edgecolor {nopcolor} def + /graphcolor {nopcolor} def +} bind def + +/onlayer { curlayer ne {invis} if } def + +/onlayers { + /myupper exch def + /mylower exch def + curlayer mylower lt + curlayer myupper gt + or + {invis} if +} def + +/curlayer 0 def + +%%EndResource +%%EndProlog +%%BeginSetup +14 default-font-family set_font +1 setmiterlimit +% /arrowlength 10 def +% /arrowwidth 5 def + +% make sure pdfmark is harmless for PS-interpreters other than Distiller +/pdfmark where {pop} {userdict /pdfmark /cleartomark load put} ifelse +% make '<<' and '>>' safe on PS Level 1 devices +/languagelevel where {pop languagelevel}{1} ifelse +2 lt { + userdict (<<) cvn ([) cvn load put + userdict (>>) cvn ([) cvn load put +} if + +%%EndSetup +%%Page: 1 1 +%%PageBoundingBox: 36 36 186 152 +%%PageOrientation: Portrait +gsave +36 36 150 116 boxprim clip newpath +36 36 translate +0 0 1 beginpage +1.0000 set_scale +4 4 translate 0 rotate +0.167 0.600 1.000 graphcolor +0.167 0.600 1.000 graphcolor +newpath -6 -6 moveto +-6 114 lineto +148 114 lineto +148 -6 lineto +closepath +fill +0.167 0.600 1.000 graphcolor +newpath -6 -6 moveto +-6 114 lineto +148 114 lineto +148 -6 lineto +closepath +stroke +0.000 0.000 0.000 graphcolor +14.00 /Times-Roman set_font +% ConvertibleTo(a:Type) +[ /Rect [ 0 72 142 108 ] + /Border [ 0 0 0 ] + /Action << /Subtype /URI /URI (books/bookvol10.pamphlet) >> + /Subtype /Link +/ANN pdfmark +gsave 10 dict begin +filled +0.537 0.247 0.902 nodecolor +0.537 0.247 0.902 nodecolor +newpath 142 108 moveto +0 108 lineto +0 72 lineto +142 72 lineto +closepath +fill +0.537 0.247 0.902 nodecolor +newpath 142 108 moveto +0 108 lineto +0 72 lineto +142 72 lineto +closepath +stroke +gsave 10 dict begin +0.000 0.000 0.000 nodecolor +7 85 moveto +(ConvertibleTo\(a:Type\)) +[9.36 6.96 6.48 6.48 6.24 5.04 3.84 3.84 6.96 3.84 6.24 7.44 6.96 4.56 6.24 3.84 7.2 6.96 6.96 6.24 4.56] +xshow +end grestore +end grestore +% Category +[ /Rect [ 37 0 105 36 ] + /Border [ 0 0 0 ] + /Action << /Subtype /URI /URI (books/bookvol10.pamphlet) >> + /Subtype /Link +/ANN pdfmark +gsave 10 dict begin +filled +0.537 0.247 0.902 nodecolor +0.537 0.247 0.902 nodecolor +newpath 105 36 moveto +37 36 lineto +37 0 lineto +105 0 lineto +closepath +fill +0.537 0.247 0.902 nodecolor +newpath 105 36 moveto +37 36 lineto +37 0 lineto +105 0 lineto +closepath +stroke +gsave 10 dict begin +0.000 0.000 0.000 nodecolor +45 13 moveto +(Category) +[9.36 6.24 3.84 6.24 6.96 6.96 5.04 6.96] +xshow +end grestore +end grestore +% ConvertibleTo(a:Type)->Category +newpath 71 72 moveto +71 64 71 55 71 46 curveto +stroke +gsave 10 dict begin +solid +1 setlinewidth +0.000 0.000 0.000 edgecolor +newpath 75 46 moveto +71 36 lineto +68 46 lineto +closepath +fill +0.000 0.000 0.000 edgecolor +newpath 75 46 moveto +71 36 lineto +68 46 lineto +closepath +stroke +end grestore +endpage +showpage +grestore +%%PageTrailer +%%EndPage: 1 +%%Trailer +%%Pages: 1 +end +restore +%%EOF diff --git a/books/ps/v10linearaggregate.ps b/books/ps/v10linearaggregate.ps new file mode 100644 index 0000000..65d310e --- /dev/null +++ b/books/ps/v10linearaggregate.ps @@ -0,0 +1,625 @@ +%!PS-Adobe-2.0 +%%Creator: dot version 2.8 (Thu Sep 14 20:34:11 UTC 2006) +%%For: (root) root +%%Title: pic +%%Pages: (atend) +%%BoundingBox: 36 36 430 512 +%%EndComments +save +%%BeginProlog +/DotDict 200 dict def +DotDict begin + +/setupLatin1 { +mark +/EncodingVector 256 array def + EncodingVector 0 + +ISOLatin1Encoding 0 255 getinterval putinterval +EncodingVector 45 /hyphen put + +% Set up ISO Latin 1 character encoding +/starnetISO { + dup dup findfont dup length dict begin + { 1 index /FID ne { def }{ pop pop } ifelse + } forall + /Encoding EncodingVector def + currentdict end definefont +} def +/Times-Roman starnetISO def +/Times-Italic starnetISO def +/Times-Bold starnetISO def +/Times-BoldItalic starnetISO def +/Helvetica starnetISO def +/Helvetica-Oblique starnetISO def +/Helvetica-Bold starnetISO def +/Helvetica-BoldOblique starnetISO def +/Courier starnetISO def +/Courier-Oblique starnetISO def +/Courier-Bold starnetISO def +/Courier-BoldOblique starnetISO def +cleartomark +} bind def + +%%BeginResource: procset graphviz 0 0 +/coord-font-family /Times-Roman def +/default-font-family /Times-Roman def +/coordfont coord-font-family findfont 8 scalefont def + +/InvScaleFactor 1.0 def +/set_scale { + dup 1 exch div /InvScaleFactor exch def + dup scale +} bind def + +% styles +/solid { [] 0 setdash } bind def +/dashed { [9 InvScaleFactor mul dup ] 0 setdash } bind def +/dotted { [1 InvScaleFactor mul 6 InvScaleFactor mul] 0 setdash } bind def +/invis {/fill {newpath} def /stroke {newpath} def /show {pop newpath} def} bind def +/bold { 2 setlinewidth } bind def +/filled { } bind def +/unfilled { } bind def +/rounded { } bind def +/diagonals { } bind def + +% hooks for setting color +/nodecolor { sethsbcolor } bind def +/edgecolor { sethsbcolor } bind def +/graphcolor { sethsbcolor } bind def +/nopcolor {pop pop pop} bind def + +/beginpage { % i j npages + /npages exch def + /j exch def + /i exch def + /str 10 string def + npages 1 gt { + gsave + coordfont setfont + 0 0 moveto + (\() show i str cvs show (,) show j str cvs show (\)) show + grestore + } if +} bind def + +/set_font { + findfont exch + scalefont setfont +} def + +% draw aligned label in bounding box aligned to current point +/alignedtext { % width adj text + /text exch def + /adj exch def + /width exch def + gsave + width 0 gt { + text stringwidth pop adj mul 0 rmoveto + } if + [] 0 setdash + text show + grestore +} def + +/boxprim { % xcorner ycorner xsize ysize + 4 2 roll + moveto + 2 copy + exch 0 rlineto + 0 exch rlineto + pop neg 0 rlineto + closepath +} bind def + +/ellipse_path { + /ry exch def + /rx exch def + /y exch def + /x exch def + matrix currentmatrix + newpath + x y translate + rx ry scale + 0 0 1 0 360 arc + setmatrix +} bind def + +/endpage { showpage } bind def +/showpage { } def + +/layercolorseq + [ % layer color sequence - darkest to lightest + [0 0 0] + [.2 .8 .8] + [.4 .8 .8] + [.6 .8 .8] + [.8 .8 .8] + ] +def + +/layerlen layercolorseq length def + +/setlayer {/maxlayer exch def /curlayer exch def + layercolorseq curlayer 1 sub layerlen mod get + aload pop sethsbcolor + /nodecolor {nopcolor} def + /edgecolor {nopcolor} def + /graphcolor {nopcolor} def +} bind def + +/onlayer { curlayer ne {invis} if } def + +/onlayers { + /myupper exch def + /mylower exch def + curlayer mylower lt + curlayer myupper gt + or + {invis} if +} def + +/curlayer 0 def + +%%EndResource +%%EndProlog +%%BeginSetup +14 default-font-family set_font +1 setmiterlimit +% /arrowlength 10 def +% /arrowwidth 5 def + +% make sure pdfmark is harmless for PS-interpreters other than Distiller +/pdfmark where {pop} {userdict /pdfmark /cleartomark load put} ifelse +% make '<<' and '>>' safe on PS Level 1 devices +/languagelevel where {pop languagelevel}{1} ifelse +2 lt { + userdict (<<) cvn ([) cvn load put + userdict (>>) cvn ([) cvn load put +} if + +%%EndSetup +%%Page: 1 1 +%%PageBoundingBox: 36 36 430 512 +%%PageOrientation: Portrait +gsave +36 36 394 476 boxprim clip newpath +36 36 translate +0 0 1 beginpage +1.0000 set_scale +4 4 translate 0 rotate +0.167 0.600 1.000 graphcolor +0.167 0.600 1.000 graphcolor +newpath -6 -6 moveto +-6 474 lineto +392 474 lineto +392 -6 lineto +closepath +fill +0.167 0.600 1.000 graphcolor +newpath -6 -6 moveto +-6 474 lineto +392 474 lineto +392 -6 lineto +closepath +stroke +0.000 0.000 0.000 graphcolor +14.00 /Times-Roman set_font +% LinearAggregate(a:Type) +[ /Rect [ 145 432 303 468 ] + /Border [ 0 0 0 ] + /Action << /Subtype /URI /URI (books/bookvol10.pamphlet) >> + /Subtype /Link +/ANN pdfmark +gsave 10 dict begin +filled +0.537 0.247 0.902 nodecolor +0.537 0.247 0.902 nodecolor +newpath 303 468 moveto +145 468 lineto +145 432 lineto +303 432 lineto +closepath +fill +0.537 0.247 0.902 nodecolor +newpath 303 468 moveto +145 468 lineto +145 432 lineto +303 432 lineto +closepath +stroke +gsave 10 dict begin +0.000 0.000 0.000 nodecolor +153 445 moveto +(LinearAggregate\(a:Type\)) +[8.64 3.84 6.96 6.24 6.24 4.8 9.84 6.96 7.2 4.8 6.24 6.72 6.24 3.84 6.24 4.56 6.24 3.84 7.2 6.96 6.96 6.24 4.56] +xshow +end grestore +end grestore +% IndexedAggregate(b:Integer,a:Type) +[ /Rect [ 31 360 249 396 ] + /Border [ 0 0 0 ] + /Action << /Subtype /URI /URI (books/bookvol10.pamphlet) >> + /Subtype /Link +/ANN pdfmark +gsave 10 dict begin +filled +0.404 0.667 0.545 nodecolor +0.404 0.667 0.545 nodecolor +newpath 249 396 moveto +31 396 lineto +31 360 lineto +249 360 lineto +closepath +fill +0.404 0.667 0.545 nodecolor +newpath 249 396 moveto +31 396 lineto +31 360 lineto +249 360 lineto +closepath +stroke +gsave 10 dict begin +0.000 0.000 0.000 nodecolor +38 373 moveto +(IndexedAggregate\(b:Integer,a:Type\)) +[4.56 6.96 6.96 5.76 6.48 6.24 6.96 9.84 6.96 7.2 4.8 6.24 6.72 6.24 3.84 6.24 4.56 6.96 3.84 4.56 6.96 3.84 6.24 6.72 6.24 4.32 3.6 6.24 3.84 7.2 6.96 6.96 6.24 4.56] +xshow +end grestore +end grestore +% LinearAggregate(a:Type)->IndexedAggregate(b:Integer,a:Type) +newpath 203 432 moveto +193 423 180 412 169 403 curveto +stroke +gsave 10 dict begin +solid +1 setlinewidth +0.000 0.000 0.000 edgecolor +newpath 171 400 moveto +161 396 lineto +166 405 lineto +closepath +fill +0.000 0.000 0.000 edgecolor +newpath 171 400 moveto +161 396 lineto +166 405 lineto +closepath +stroke +end grestore +% Collection(a:Type) +[ /Rect [ 266 288 386 324 ] + /Border [ 0 0 0 ] + /Action << /Subtype /URI /URI (books/bookvol10.pamphlet) >> + /Subtype /Link +/ANN pdfmark +gsave 10 dict begin +filled +0.537 0.247 0.902 nodecolor +0.537 0.247 0.902 nodecolor +newpath 386 324 moveto +266 324 lineto +266 288 lineto +386 288 lineto +closepath +fill +0.537 0.247 0.902 nodecolor +newpath 386 324 moveto +266 324 lineto +266 288 lineto +386 288 lineto +closepath +stroke +gsave 10 dict begin +0.000 0.000 0.000 nodecolor +273 301 moveto +(Collection\(a:Type\)) +[9.36 6.96 3.84 3.84 6.24 6.24 3.84 3.84 6.96 6.96 4.56 6.24 3.84 7.2 6.96 6.96 6.24 4.56] +xshow +end grestore +end grestore +% LinearAggregate(a:Type)->Collection(a:Type) +newpath 237 432 moveto +254 407 286 362 307 332 curveto +stroke +gsave 10 dict begin +solid +1 setlinewidth +0.000 0.000 0.000 edgecolor +newpath 310 334 moveto +313 324 lineto +304 330 lineto +closepath +fill +0.000 0.000 0.000 edgecolor +newpath 310 334 moveto +313 324 lineto +304 330 lineto +closepath +stroke +end grestore +% IndexedAggregate(a:SetCategory,b:Type) +[ /Rect [ 0 288 248 324 ] + /Border [ 0 0 0 ] + /Action << /Subtype /URI /URI (books/bookvol10.pamphlet) >> + /Subtype /Link +/ANN pdfmark +gsave 10 dict begin +filled +0.537 0.247 0.902 nodecolor +0.537 0.247 0.902 nodecolor +newpath 248 324 moveto +0 324 lineto +0 288 lineto +248 288 lineto +closepath +fill +0.537 0.247 0.902 nodecolor +newpath 248 324 moveto +0 324 lineto +0 288 lineto +248 288 lineto +closepath +stroke +gsave 10 dict begin +0.000 0.000 0.000 nodecolor +7 301 moveto +(IndexedAggregate\(a:SetCategory,b:Type\)) +[4.56 6.96 6.96 5.76 6.48 6.24 6.96 9.84 6.96 7.2 4.8 6.24 6.72 6.24 3.84 6.24 4.56 6.24 3.84 7.68 6 3.84 9.36 6.24 3.84 6.24 6.96 6.96 5.04 6 3.6 6.96 3.84 7.2 6.96 6.96 6.24 4.56] +xshow +end grestore +end grestore +% IndexedAggregate(b:Integer,a:Type)->IndexedAggregate(a:SetCategory,b:Type) +newpath 136 360 moveto +134 352 132 343 130 334 curveto +stroke +gsave 10 dict begin +solid +1 setlinewidth +0.000 0.000 0.000 edgecolor +newpath 133 333 moveto +128 324 lineto +127 334 lineto +closepath +fill +0.000 0.000 0.000 edgecolor +newpath 133 333 moveto +128 324 lineto +127 334 lineto +closepath +stroke +end grestore +% HomogeneousAggregate(a:Type) +[ /Rect [ 124 216 326 252 ] + /Border [ 0 0 0 ] + /Action << /Subtype /URI /URI (books/bookvol10.pamphlet) >> + /Subtype /Link +/ANN pdfmark +gsave 10 dict begin +filled +0.537 0.247 0.902 nodecolor +0.537 0.247 0.902 nodecolor +newpath 326 252 moveto +124 252 lineto +124 216 lineto +326 216 lineto +closepath +fill +0.537 0.247 0.902 nodecolor +newpath 326 252 moveto +124 252 lineto +124 216 lineto +326 216 lineto +closepath +stroke +gsave 10 dict begin +0.000 0.000 0.000 nodecolor +131 229 moveto +(HomogeneousAggregate\(a:Type\)) +[10.08 6.96 10.8 6.96 6.72 6.24 6.96 6.24 6.96 6.96 5.52 9.84 6.96 7.2 4.8 6.24 6.72 6.24 3.84 6.24 4.56 6.24 3.84 7.2 6.96 6.96 6.24 4.56] +xshow +end grestore +end grestore +% Collection(a:Type)->HomogeneousAggregate(a:Type) +newpath 301 288 moveto +289 279 273 268 259 258 curveto +stroke +gsave 10 dict begin +solid +1 setlinewidth +0.000 0.000 0.000 edgecolor +newpath 260 255 moveto +250 252 lineto +256 260 lineto +closepath +fill +0.000 0.000 0.000 edgecolor +newpath 260 255 moveto +250 252 lineto +256 260 lineto +closepath +stroke +end grestore +% IndexedAggregate(a:SetCategory,b:Type)->HomogeneousAggregate(a:Type) +newpath 149 288 moveto +161 279 177 268 191 258 curveto +stroke +gsave 10 dict begin +solid +1 setlinewidth +0.000 0.000 0.000 edgecolor +newpath 194 260 moveto +200 252 lineto +190 255 lineto +closepath +fill +0.000 0.000 0.000 edgecolor +newpath 194 260 moveto +200 252 lineto +190 255 lineto +closepath +stroke +end grestore +% Aggregate() +[ /Rect [ 183 144 267 180 ] + /Border [ 0 0 0 ] + /Action << /Subtype /URI /URI (books/bookvol10.pamphlet) >> + /Subtype /Link +/ANN pdfmark +gsave 10 dict begin +filled +0.537 0.247 0.902 nodecolor +0.537 0.247 0.902 nodecolor +newpath 267 180 moveto +183 180 lineto +183 144 lineto +267 144 lineto +closepath +fill +0.537 0.247 0.902 nodecolor +newpath 267 180 moveto +183 180 lineto +183 144 lineto +267 144 lineto +closepath +stroke +gsave 10 dict begin +0.000 0.000 0.000 nodecolor +190 157 moveto +(Aggregate\(\)) +[9.84 6.96 7.2 4.8 6.24 6.72 6.24 3.84 6.24 4.56 4.56] +xshow +end grestore +end grestore +% HomogeneousAggregate(a:Type)->Aggregate() +newpath 225 216 moveto +225 208 225 199 225 190 curveto +stroke +gsave 10 dict begin +solid +1 setlinewidth +0.000 0.000 0.000 edgecolor +newpath 229 190 moveto +225 180 lineto +222 190 lineto +closepath +fill +0.000 0.000 0.000 edgecolor +newpath 229 190 moveto +225 180 lineto +222 190 lineto +closepath +stroke +end grestore +% Type() +[ /Rect [ 198 72 252 108 ] + /Border [ 0 0 0 ] + /Action << /Subtype /URI /URI (books/bookvol10.pamphlet) >> + /Subtype /Link +/ANN pdfmark +gsave 10 dict begin +filled +0.537 0.247 0.902 nodecolor +0.537 0.247 0.902 nodecolor +newpath 252 108 moveto +198 108 lineto +198 72 lineto +252 72 lineto +closepath +fill +0.537 0.247 0.902 nodecolor +newpath 252 108 moveto +198 108 lineto +198 72 lineto +252 72 lineto +closepath +stroke +gsave 10 dict begin +0.000 0.000 0.000 nodecolor +206 85 moveto +(Type\(\)) +[7.2 6.96 6.96 6.24 4.56 4.56] +xshow +end grestore +end grestore +% Aggregate()->Type() +newpath 225 144 moveto +225 136 225 127 225 118 curveto +stroke +gsave 10 dict begin +solid +1 setlinewidth +0.000 0.000 0.000 edgecolor +newpath 229 118 moveto +225 108 lineto +222 118 lineto +closepath +fill +0.000 0.000 0.000 edgecolor +newpath 229 118 moveto +225 108 lineto +222 118 lineto +closepath +stroke +end grestore +% Category +[ /Rect [ 191 0 259 36 ] + /Border [ 0 0 0 ] + /Action << /Subtype /URI /URI (books/bookvol10.pamphlet) >> + /Subtype /Link +/ANN pdfmark +gsave 10 dict begin +filled +0.537 0.247 0.902 nodecolor +0.537 0.247 0.902 nodecolor +newpath 259 36 moveto +191 36 lineto +191 0 lineto +259 0 lineto +closepath +fill +0.537 0.247 0.902 nodecolor +newpath 259 36 moveto +191 36 lineto +191 0 lineto +259 0 lineto +closepath +stroke +gsave 10 dict begin +0.000 0.000 0.000 nodecolor +199 13 moveto +(Category) +[9.36 6.24 3.84 6.24 6.96 6.96 5.04 6.96] +xshow +end grestore +end grestore +% Type()->Category +newpath 225 72 moveto +225 64 225 55 225 46 curveto +stroke +gsave 10 dict begin +solid +1 setlinewidth +0.000 0.000 0.000 edgecolor +newpath 229 46 moveto +225 36 lineto +222 46 lineto +closepath +fill +0.000 0.000 0.000 edgecolor +newpath 229 46 moveto +225 36 lineto +222 46 lineto +closepath +stroke +end grestore +endpage +showpage +grestore +%%PageTrailer +%%EndPage: 1 +%%Trailer +%%Pages: 1 +end +restore +%%EOF diff --git a/books/ps/v10listaggregate.ps b/books/ps/v10listaggregate.ps new file mode 100644 index 0000000..17e72f0 --- /dev/null +++ b/books/ps/v10listaggregate.ps @@ -0,0 +1,697 @@ +%!PS-Adobe-2.0 +%%Creator: dot version 2.8 (Thu Sep 14 20:34:11 UTC 2006) +%%For: (root) root +%%Title: pic +%%Pages: (atend) +%%BoundingBox: 36 36 471 440 +%%EndComments +save +%%BeginProlog +/DotDict 200 dict def +DotDict begin + +/setupLatin1 { +mark +/EncodingVector 256 array def + EncodingVector 0 + +ISOLatin1Encoding 0 255 getinterval putinterval +EncodingVector 45 /hyphen put + +% Set up ISO Latin 1 character encoding +/starnetISO { + dup dup findfont dup length dict begin + { 1 index /FID ne { def }{ pop pop } ifelse + } forall + /Encoding EncodingVector def + currentdict end definefont +} def +/Times-Roman starnetISO def +/Times-Italic starnetISO def +/Times-Bold starnetISO def +/Times-BoldItalic starnetISO def +/Helvetica starnetISO def +/Helvetica-Oblique starnetISO def +/Helvetica-Bold starnetISO def +/Helvetica-BoldOblique starnetISO def +/Courier starnetISO def +/Courier-Oblique starnetISO def +/Courier-Bold starnetISO def +/Courier-BoldOblique starnetISO def +cleartomark +} bind def + +%%BeginResource: procset graphviz 0 0 +/coord-font-family /Times-Roman def +/default-font-family /Times-Roman def +/coordfont coord-font-family findfont 8 scalefont def + +/InvScaleFactor 1.0 def +/set_scale { + dup 1 exch div /InvScaleFactor exch def + dup scale +} bind def + +% styles +/solid { [] 0 setdash } bind def +/dashed { [9 InvScaleFactor mul dup ] 0 setdash } bind def +/dotted { [1 InvScaleFactor mul 6 InvScaleFactor mul] 0 setdash } bind def +/invis {/fill {newpath} def /stroke {newpath} def /show {pop newpath} def} bind def +/bold { 2 setlinewidth } bind def +/filled { } bind def +/unfilled { } bind def +/rounded { } bind def +/diagonals { } bind def + +% hooks for setting color +/nodecolor { sethsbcolor } bind def +/edgecolor { sethsbcolor } bind def +/graphcolor { sethsbcolor } bind def +/nopcolor {pop pop pop} bind def + +/beginpage { % i j npages + /npages exch def + /j exch def + /i exch def + /str 10 string def + npages 1 gt { + gsave + coordfont setfont + 0 0 moveto + (\() show i str cvs show (,) show j str cvs show (\)) show + grestore + } if +} bind def + +/set_font { + findfont exch + scalefont setfont +} def + +% draw aligned label in bounding box aligned to current point +/alignedtext { % width adj text + /text exch def + /adj exch def + /width exch def + gsave + width 0 gt { + text stringwidth pop adj mul 0 rmoveto + } if + [] 0 setdash + text show + grestore +} def + +/boxprim { % xcorner ycorner xsize ysize + 4 2 roll + moveto + 2 copy + exch 0 rlineto + 0 exch rlineto + pop neg 0 rlineto + closepath +} bind def + +/ellipse_path { + /ry exch def + /rx exch def + /y exch def + /x exch def + matrix currentmatrix + newpath + x y translate + rx ry scale + 0 0 1 0 360 arc + setmatrix +} bind def + +/endpage { showpage } bind def +/showpage { } def + +/layercolorseq + [ % layer color sequence - darkest to lightest + [0 0 0] + [.2 .8 .8] + [.4 .8 .8] + [.6 .8 .8] + [.8 .8 .8] + ] +def + +/layerlen layercolorseq length def + +/setlayer {/maxlayer exch def /curlayer exch def + layercolorseq curlayer 1 sub layerlen mod get + aload pop sethsbcolor + /nodecolor {nopcolor} def + /edgecolor {nopcolor} def + /graphcolor {nopcolor} def +} bind def + +/onlayer { curlayer ne {invis} if } def + +/onlayers { + /myupper exch def + /mylower exch def + curlayer mylower lt + curlayer myupper gt + or + {invis} if +} def + +/curlayer 0 def + +%%EndResource +%%EndProlog +%%BeginSetup +14 default-font-family set_font +1 setmiterlimit +% /arrowlength 10 def +% /arrowwidth 5 def + +% make sure pdfmark is harmless for PS-interpreters other than Distiller +/pdfmark where {pop} {userdict /pdfmark /cleartomark load put} ifelse +% make '<<' and '>>' safe on PS Level 1 devices +/languagelevel where {pop languagelevel}{1} ifelse +2 lt { + userdict (<<) cvn ([) cvn load put + userdict (>>) cvn ([) cvn load put +} if + +%%EndSetup +%%Page: 1 1 +%%PageBoundingBox: 36 36 471 440 +%%PageOrientation: Portrait +gsave +36 36 435 404 boxprim clip newpath +36 36 translate +0 0 1 beginpage +1.0000 set_scale +4 4 translate 0 rotate +0.167 0.600 1.000 graphcolor +0.167 0.600 1.000 graphcolor +newpath -6 -6 moveto +-6 402 lineto +433 402 lineto +433 -6 lineto +closepath +fill +0.167 0.600 1.000 graphcolor +newpath -6 -6 moveto +-6 402 lineto +433 402 lineto +433 -6 lineto +closepath +stroke +0.000 0.000 0.000 graphcolor +14.00 /Times-Roman set_font +% ListAggregate(a:Type) +[ /Rect [ 137 360 279 396 ] + /Border [ 0 0 0 ] + /Action << /Subtype /URI /URI (books/bookvol10.pamphlet) >> + /Subtype /Link +/ANN pdfmark +gsave 10 dict begin +filled +0.537 0.247 0.902 nodecolor +0.537 0.247 0.902 nodecolor +newpath 279 396 moveto +137 396 lineto +137 360 lineto +279 360 lineto +closepath +fill +0.537 0.247 0.902 nodecolor +newpath 279 396 moveto +137 396 lineto +137 360 lineto +279 360 lineto +closepath +stroke +gsave 10 dict begin +0.000 0.000 0.000 nodecolor +144 373 moveto +(ListAggregate\(a:Type\)) +[8.64 3.84 5.28 3.84 9.84 6.96 7.2 4.8 6.24 6.72 6.24 3.84 6.24 4.56 6.24 3.84 7.2 6.96 6.96 6.24 4.56] +xshow +end grestore +end grestore +% FiniteLinearAggregate(a:Type) +[ /Rect [ 3 288 193 324 ] + /Border [ 0 0 0 ] + /Action << /Subtype /URI /URI (books/bookvol10.pamphlet) >> + /Subtype /Link +/ANN pdfmark +gsave 10 dict begin +filled +0.537 0.247 0.902 nodecolor +0.537 0.247 0.902 nodecolor +newpath 193 324 moveto +3 324 lineto +3 288 lineto +193 288 lineto +closepath +fill +0.537 0.247 0.902 nodecolor +newpath 193 324 moveto +3 324 lineto +3 288 lineto +193 288 lineto +closepath +stroke +gsave 10 dict begin +0.000 0.000 0.000 nodecolor +11 301 moveto +(FiniteLinearAggregate\(a:Type\)) +[7.44 3.84 6.96 3.84 3.84 6.24 8.64 3.84 6.96 6.24 6.24 4.8 9.84 6.96 7.2 4.8 6.24 6.72 6.24 3.84 6.24 4.56 6.24 3.84 7.2 6.96 6.96 6.24 4.56] +xshow +end grestore +end grestore +% ListAggregate(a:Type)->FiniteLinearAggregate(a:Type) +newpath 180 360 moveto +166 351 149 340 134 330 curveto +stroke +gsave 10 dict begin +solid +1 setlinewidth +0.000 0.000 0.000 edgecolor +newpath 135 327 moveto +125 324 lineto +131 332 lineto +closepath +fill +0.000 0.000 0.000 edgecolor +newpath 135 327 moveto +125 324 lineto +131 332 lineto +closepath +stroke +end grestore +% ExtensibleLinearAggregate(a:Type) +[ /Rect [ 211 288 427 324 ] + /Border [ 0 0 0 ] + /Action << /Subtype /URI /URI (books/bookvol10.pamphlet) >> + /Subtype /Link +/ANN pdfmark +gsave 10 dict begin +filled +0.537 0.247 0.902 nodecolor +0.537 0.247 0.902 nodecolor +newpath 427 324 moveto +211 324 lineto +211 288 lineto +427 288 lineto +closepath +fill +0.537 0.247 0.902 nodecolor +newpath 427 324 moveto +211 324 lineto +211 288 lineto +427 288 lineto +closepath +stroke +gsave 10 dict begin +0.000 0.000 0.000 nodecolor +218 301 moveto +(ExtensibleLinearAggregate\(a:Type\)) +[8.64 6.96 3.84 6.24 6.96 5.52 3.84 6.96 3.84 6.24 8.64 3.84 6.96 6.24 6.24 4.8 9.84 6.96 7.2 4.8 6.24 6.72 6.24 3.84 6.24 4.56 6.24 3.84 7.2 6.96 6.96 6.24 4.56] +xshow +end grestore +end grestore +% ListAggregate(a:Type)->ExtensibleLinearAggregate(a:Type) +newpath 236 360 moveto +250 351 268 340 283 330 curveto +stroke +gsave 10 dict begin +solid +1 setlinewidth +0.000 0.000 0.000 edgecolor +newpath 285 333 moveto +291 324 lineto +281 327 lineto +closepath +fill +0.000 0.000 0.000 edgecolor +newpath 285 333 moveto +291 324 lineto +281 327 lineto +closepath +stroke +end grestore +% LinearAggregate(a:Type) +[ /Rect [ 129 216 287 252 ] + /Border [ 0 0 0 ] + /Action << /Subtype /URI /URI (books/bookvol10.pamphlet) >> + /Subtype /Link +/ANN pdfmark +gsave 10 dict begin +filled +0.537 0.247 0.902 nodecolor +0.537 0.247 0.902 nodecolor +newpath 287 252 moveto +129 252 lineto +129 216 lineto +287 216 lineto +closepath +fill +0.537 0.247 0.902 nodecolor +newpath 287 252 moveto +129 252 lineto +129 216 lineto +287 216 lineto +closepath +stroke +gsave 10 dict begin +0.000 0.000 0.000 nodecolor +137 229 moveto +(LinearAggregate\(a:Type\)) +[8.64 3.84 6.96 6.24 6.24 4.8 9.84 6.96 7.2 4.8 6.24 6.72 6.24 3.84 6.24 4.56 6.24 3.84 7.2 6.96 6.96 6.24 4.56] +xshow +end grestore +end grestore +% FiniteLinearAggregate(a:Type)->LinearAggregate(a:Type) +newpath 126 288 moveto +139 279 157 268 172 258 curveto +stroke +gsave 10 dict begin +solid +1 setlinewidth +0.000 0.000 0.000 edgecolor +newpath 175 260 moveto +181 252 lineto +171 255 lineto +closepath +fill +0.000 0.000 0.000 edgecolor +newpath 175 260 moveto +181 252 lineto +171 255 lineto +closepath +stroke +end grestore +% ExtensibleLinearAggregate(a:Type)->LinearAggregate(a:Type) +newpath 291 288 moveto +277 279 259 268 244 258 curveto +stroke +gsave 10 dict begin +solid +1 setlinewidth +0.000 0.000 0.000 edgecolor +newpath 246 255 moveto +236 252 lineto +242 261 lineto +closepath +fill +0.000 0.000 0.000 edgecolor +newpath 246 255 moveto +236 252 lineto +242 261 lineto +closepath +stroke +end grestore +% IndexedAggregate(b:Integer,a:Type) +[ /Rect [ 31 144 249 180 ] + /Border [ 0 0 0 ] + /Action << /Subtype /URI /URI (books/bookvol10.pamphlet) >> + /Subtype /Link +/ANN pdfmark +gsave 10 dict begin +filled +0.404 0.667 0.545 nodecolor +0.404 0.667 0.545 nodecolor +newpath 249 180 moveto +31 180 lineto +31 144 lineto +249 144 lineto +closepath +fill +0.404 0.667 0.545 nodecolor +newpath 249 180 moveto +31 180 lineto +31 144 lineto +249 144 lineto +closepath +stroke +gsave 10 dict begin +0.000 0.000 0.000 nodecolor +38 157 moveto +(IndexedAggregate\(b:Integer,a:Type\)) +[4.56 6.96 6.96 5.76 6.48 6.24 6.96 9.84 6.96 7.2 4.8 6.24 6.72 6.24 3.84 6.24 4.56 6.96 3.84 4.56 6.96 3.84 6.24 6.72 6.24 4.32 3.6 6.24 3.84 7.2 6.96 6.96 6.24 4.56] +xshow +end grestore +end grestore +% LinearAggregate(a:Type)->IndexedAggregate(b:Integer,a:Type) +newpath 191 216 moveto +183 207 173 197 164 188 curveto +stroke +gsave 10 dict begin +solid +1 setlinewidth +0.000 0.000 0.000 edgecolor +newpath 166 185 moveto +157 180 lineto +161 190 lineto +closepath +fill +0.000 0.000 0.000 edgecolor +newpath 166 185 moveto +157 180 lineto +161 190 lineto +closepath +stroke +end grestore +% Collection(a:Type) +[ /Rect [ 266 72 386 108 ] + /Border [ 0 0 0 ] + /Action << /Subtype /URI /URI (books/bookvol10.pamphlet) >> + /Subtype /Link +/ANN pdfmark +gsave 10 dict begin +filled +0.537 0.247 0.902 nodecolor +0.537 0.247 0.902 nodecolor +newpath 386 108 moveto +266 108 lineto +266 72 lineto +386 72 lineto +closepath +fill +0.537 0.247 0.902 nodecolor +newpath 386 108 moveto +266 108 lineto +266 72 lineto +386 72 lineto +closepath +stroke +gsave 10 dict begin +0.000 0.000 0.000 nodecolor +273 85 moveto +(Collection\(a:Type\)) +[9.36 6.96 3.84 3.84 6.24 6.24 3.84 3.84 6.96 6.96 4.56 6.24 3.84 7.2 6.96 6.96 6.24 4.56] +xshow +end grestore +end grestore +% LinearAggregate(a:Type)->Collection(a:Type) +newpath 226 216 moveto +235 206 248 192 258 180 curveto +275 159 294 135 307 116 curveto +stroke +gsave 10 dict begin +solid +1 setlinewidth +0.000 0.000 0.000 edgecolor +newpath 310 118 moveto +313 108 lineto +304 114 lineto +closepath +fill +0.000 0.000 0.000 edgecolor +newpath 310 118 moveto +313 108 lineto +304 114 lineto +closepath +stroke +end grestore +% IndexedAggregate(a:SetCategory,b:Type) +[ /Rect [ 0 72 248 108 ] + /Border [ 0 0 0 ] + /Action << /Subtype /URI /URI (books/bookvol10.pamphlet) >> + /Subtype /Link +/ANN pdfmark +gsave 10 dict begin +filled +0.537 0.247 0.902 nodecolor +0.537 0.247 0.902 nodecolor +newpath 248 108 moveto +0 108 lineto +0 72 lineto +248 72 lineto +closepath +fill +0.537 0.247 0.902 nodecolor +newpath 248 108 moveto +0 108 lineto +0 72 lineto +248 72 lineto +closepath +stroke +gsave 10 dict begin +0.000 0.000 0.000 nodecolor +7 85 moveto +(IndexedAggregate\(a:SetCategory,b:Type\)) +[4.56 6.96 6.96 5.76 6.48 6.24 6.96 9.84 6.96 7.2 4.8 6.24 6.72 6.24 3.84 6.24 4.56 6.24 3.84 7.68 6 3.84 9.36 6.24 3.84 6.24 6.96 6.96 5.04 6 3.6 6.96 3.84 7.2 6.96 6.96 6.24 4.56] +xshow +end grestore +end grestore +% IndexedAggregate(b:Integer,a:Type)->IndexedAggregate(a:SetCategory,b:Type) +newpath 136 144 moveto +134 136 132 127 130 118 curveto +stroke +gsave 10 dict begin +solid +1 setlinewidth +0.000 0.000 0.000 edgecolor +newpath 133 117 moveto +128 108 lineto +127 118 lineto +closepath +fill +0.000 0.000 0.000 edgecolor +newpath 133 117 moveto +128 108 lineto +127 118 lineto +closepath +stroke +end grestore +% HOAGG... +[ /Rect [ 235 0 311 36 ] + /Border [ 0 0 0 ] + /Action << /Subtype /URI /URI (books/bookvol10.pamphlet) >> + /Subtype /Link +/ANN pdfmark +gsave 10 dict begin +filled +0.537 0.247 0.902 nodecolor +0.537 0.247 0.902 nodecolor +newpath 311 36 moveto +235 36 lineto +235 0 lineto +311 0 lineto +closepath +fill +0.537 0.247 0.902 nodecolor +newpath 311 36 moveto +235 36 lineto +235 0 lineto +311 0 lineto +closepath +stroke +gsave 10 dict begin +0.000 0.000 0.000 nodecolor +242 13 moveto +(HOAGG...) +[10.08 9.36 9.36 10.08 10.08 3.6 3.6 3.6] +xshow +end grestore +end grestore +% Collection(a:Type)->HOAGG... +newpath 313 72 moveto +307 64 299 53 292 44 curveto +stroke +gsave 10 dict begin +solid +1 setlinewidth +0.000 0.000 0.000 edgecolor +newpath 295 42 moveto +286 36 lineto +289 46 lineto +closepath +fill +0.000 0.000 0.000 edgecolor +newpath 295 42 moveto +286 36 lineto +289 46 lineto +closepath +stroke +end grestore +% IndexedAggregate(a:SetCategory,b:Type)->HOAGG... +newpath 162 72 moveto +182 62 206 51 227 40 curveto +stroke +gsave 10 dict begin +solid +1 setlinewidth +0.000 0.000 0.000 edgecolor +newpath 228 43 moveto +236 36 lineto +225 37 lineto +closepath +fill +0.000 0.000 0.000 edgecolor +newpath 228 43 moveto +236 36 lineto +225 37 lineto +closepath +stroke +end grestore +% ELTAGG... +[ /Rect [ 84 0 164 36 ] + /Border [ 0 0 0 ] + /Action << /Subtype /URI /URI (books/bookvol10.pamphlet) >> + /Subtype /Link +/ANN pdfmark +gsave 10 dict begin +filled +0.537 0.247 0.902 nodecolor +0.537 0.247 0.902 nodecolor +newpath 164 36 moveto +84 36 lineto +84 0 lineto +164 0 lineto +closepath +fill +0.537 0.247 0.902 nodecolor +newpath 164 36 moveto +84 36 lineto +84 0 lineto +164 0 lineto +closepath +stroke +gsave 10 dict begin +0.000 0.000 0.000 nodecolor +91 13 moveto +(ELTAGG...) +[8.64 7.68 7.92 9.36 10.08 10.08 3.6 3.6 3.6] +xshow +end grestore +end grestore +% IndexedAggregate(a:SetCategory,b:Type)->ELTAGG... +newpath 124 72 moveto +124 64 124 55 124 46 curveto +stroke +gsave 10 dict begin +solid +1 setlinewidth +0.000 0.000 0.000 edgecolor +newpath 128 46 moveto +124 36 lineto +121 46 lineto +closepath +fill +0.000 0.000 0.000 edgecolor +newpath 128 46 moveto +124 36 lineto +121 46 lineto +closepath +stroke +end grestore +endpage +showpage +grestore +%%PageTrailer +%%EndPage: 1 +%%Trailer +%%Pages: 1 +end +restore +%%EOF diff --git a/books/ps/v10multidictionary.ps b/books/ps/v10multidictionary.ps new file mode 100644 index 0000000..bba3e41 --- /dev/null +++ b/books/ps/v10multidictionary.ps @@ -0,0 +1,625 @@ +%!PS-Adobe-2.0 +%%Creator: dot version 2.8 (Thu Sep 14 20:34:11 UTC 2006) +%%For: (root) root +%%Title: pic +%%Pages: (atend) +%%BoundingBox: 36 36 410 440 +%%EndComments +save +%%BeginProlog +/DotDict 200 dict def +DotDict begin + +/setupLatin1 { +mark +/EncodingVector 256 array def + EncodingVector 0 + +ISOLatin1Encoding 0 255 getinterval putinterval +EncodingVector 45 /hyphen put + +% Set up ISO Latin 1 character encoding +/starnetISO { + dup dup findfont dup length dict begin + { 1 index /FID ne { def }{ pop pop } ifelse + } forall + /Encoding EncodingVector def + currentdict end definefont +} def +/Times-Roman starnetISO def +/Times-Italic starnetISO def +/Times-Bold starnetISO def +/Times-BoldItalic starnetISO def +/Helvetica starnetISO def +/Helvetica-Oblique starnetISO def +/Helvetica-Bold starnetISO def +/Helvetica-BoldOblique starnetISO def +/Courier starnetISO def +/Courier-Oblique starnetISO def +/Courier-Bold starnetISO def +/Courier-BoldOblique starnetISO def +cleartomark +} bind def + +%%BeginResource: procset graphviz 0 0 +/coord-font-family /Times-Roman def +/default-font-family /Times-Roman def +/coordfont coord-font-family findfont 8 scalefont def + +/InvScaleFactor 1.0 def +/set_scale { + dup 1 exch div /InvScaleFactor exch def + dup scale +} bind def + +% styles +/solid { [] 0 setdash } bind def +/dashed { [9 InvScaleFactor mul dup ] 0 setdash } bind def +/dotted { [1 InvScaleFactor mul 6 InvScaleFactor mul] 0 setdash } bind def +/invis {/fill {newpath} def /stroke {newpath} def /show {pop newpath} def} bind def +/bold { 2 setlinewidth } bind def +/filled { } bind def +/unfilled { } bind def +/rounded { } bind def +/diagonals { } bind def + +% hooks for setting color +/nodecolor { sethsbcolor } bind def +/edgecolor { sethsbcolor } bind def +/graphcolor { sethsbcolor } bind def +/nopcolor {pop pop pop} bind def + +/beginpage { % i j npages + /npages exch def + /j exch def + /i exch def + /str 10 string def + npages 1 gt { + gsave + coordfont setfont + 0 0 moveto + (\() show i str cvs show (,) show j str cvs show (\)) show + grestore + } if +} bind def + +/set_font { + findfont exch + scalefont setfont +} def + +% draw aligned label in bounding box aligned to current point +/alignedtext { % width adj text + /text exch def + /adj exch def + /width exch def + gsave + width 0 gt { + text stringwidth pop adj mul 0 rmoveto + } if + [] 0 setdash + text show + grestore +} def + +/boxprim { % xcorner ycorner xsize ysize + 4 2 roll + moveto + 2 copy + exch 0 rlineto + 0 exch rlineto + pop neg 0 rlineto + closepath +} bind def + +/ellipse_path { + /ry exch def + /rx exch def + /y exch def + /x exch def + matrix currentmatrix + newpath + x y translate + rx ry scale + 0 0 1 0 360 arc + setmatrix +} bind def + +/endpage { showpage } bind def +/showpage { } def + +/layercolorseq + [ % layer color sequence - darkest to lightest + [0 0 0] + [.2 .8 .8] + [.4 .8 .8] + [.6 .8 .8] + [.8 .8 .8] + ] +def + +/layerlen layercolorseq length def + +/setlayer {/maxlayer exch def /curlayer exch def + layercolorseq curlayer 1 sub layerlen mod get + aload pop sethsbcolor + /nodecolor {nopcolor} def + /edgecolor {nopcolor} def + /graphcolor {nopcolor} def +} bind def + +/onlayer { curlayer ne {invis} if } def + +/onlayers { + /myupper exch def + /mylower exch def + curlayer mylower lt + curlayer myupper gt + or + {invis} if +} def + +/curlayer 0 def + +%%EndResource +%%EndProlog +%%BeginSetup +14 default-font-family set_font +1 setmiterlimit +% /arrowlength 10 def +% /arrowwidth 5 def + +% make sure pdfmark is harmless for PS-interpreters other than Distiller +/pdfmark where {pop} {userdict /pdfmark /cleartomark load put} ifelse +% make '<<' and '>>' safe on PS Level 1 devices +/languagelevel where {pop languagelevel}{1} ifelse +2 lt { + userdict (<<) cvn ([) cvn load put + userdict (>>) cvn ([) cvn load put +} if + +%%EndSetup +%%Page: 1 1 +%%PageBoundingBox: 36 36 410 440 +%%PageOrientation: Portrait +gsave +36 36 374 404 boxprim clip newpath +36 36 translate +0 0 1 beginpage +1.0000 set_scale +4 4 translate 0 rotate +0.167 0.600 1.000 graphcolor +0.167 0.600 1.000 graphcolor +newpath -6 -6 moveto +-6 402 lineto +372 402 lineto +372 -6 lineto +closepath +fill +0.167 0.600 1.000 graphcolor +newpath -6 -6 moveto +-6 402 lineto +372 402 lineto +372 -6 lineto +closepath +stroke +0.000 0.000 0.000 graphcolor +14.00 /Times-Roman set_font +% MultiDictionary(a:SetCategory) +[ /Rect [ 91 360 287 396 ] + /Border [ 0 0 0 ] + /Action << /Subtype /URI /URI (books/bookvol10.pamphlet) >> + /Subtype /Link +/ANN pdfmark +gsave 10 dict begin +filled +0.537 0.247 0.902 nodecolor +0.537 0.247 0.902 nodecolor +newpath 287 396 moveto +91 396 lineto +91 360 lineto +287 360 lineto +closepath +fill +0.537 0.247 0.902 nodecolor +newpath 287 396 moveto +91 396 lineto +91 360 lineto +287 360 lineto +closepath +stroke +gsave 10 dict begin +0.000 0.000 0.000 nodecolor +98 373 moveto +(MultiDictionary\(a:SetCategory\)) +[12.48 6.96 3.84 3.84 3.84 10.08 3.84 6.24 3.84 3.84 6.96 6.96 6.24 5.04 6.96 4.56 6.24 3.84 7.68 6 3.84 9.36 6.24 3.84 6.24 6.96 6.96 5.04 6.96 4.56] +xshow +end grestore +end grestore +% DictionaryOperations(a:SetCategory) +[ /Rect [ 76 288 302 324 ] + /Border [ 0 0 0 ] + /Action << /Subtype /URI /URI (books/bookvol10.pamphlet) >> + /Subtype /Link +/ANN pdfmark +gsave 10 dict begin +filled +0.537 0.247 0.902 nodecolor +0.537 0.247 0.902 nodecolor +newpath 302 324 moveto +76 324 lineto +76 288 lineto +302 288 lineto +closepath +fill +0.537 0.247 0.902 nodecolor +newpath 302 324 moveto +76 324 lineto +76 288 lineto +302 288 lineto +closepath +stroke +gsave 10 dict begin +0.000 0.000 0.000 nodecolor +83 301 moveto +(DictionaryOperations\(a:SetCategory\)) +[10.08 3.84 6.24 3.84 3.84 6.96 6.96 6.24 5.04 6.96 10.08 6.96 6.24 4.8 6.24 3.84 3.84 6.96 6.96 5.52 4.56 6.24 3.84 7.68 6 3.84 9.36 6.24 3.84 6.24 6.96 6.96 5.04 6.96 4.56] +xshow +end grestore +end grestore +% MultiDictionary(a:SetCategory)->DictionaryOperations(a:SetCategory) +newpath 189 360 moveto +189 352 189 343 189 334 curveto +stroke +gsave 10 dict begin +solid +1 setlinewidth +0.000 0.000 0.000 edgecolor +newpath 193 334 moveto +189 324 lineto +186 334 lineto +closepath +fill +0.000 0.000 0.000 edgecolor +newpath 193 334 moveto +189 324 lineto +186 334 lineto +closepath +stroke +end grestore +% BagAggregate(a:SetCategory) +[ /Rect [ 0 216 186 252 ] + /Border [ 0 0 0 ] + /Action << /Subtype /URI /URI (books/bookvol10.pamphlet) >> + /Subtype /Link +/ANN pdfmark +gsave 10 dict begin +filled +0.404 0.667 0.545 nodecolor +0.404 0.667 0.545 nodecolor +newpath 186 252 moveto +0 252 lineto +0 216 lineto +186 216 lineto +closepath +fill +0.404 0.667 0.545 nodecolor +newpath 186 252 moveto +0 252 lineto +0 216 lineto +186 216 lineto +closepath +stroke +gsave 10 dict begin +0.000 0.000 0.000 nodecolor +7 229 moveto +(BagAggregate\(a:SetCategory\)) +[9.36 6.24 6.96 9.84 6.96 7.2 4.8 6.24 6.72 6.24 3.84 6.24 4.56 6.24 3.84 7.68 6 3.84 9.36 6.24 3.84 6.24 6.96 6.96 5.04 6.96 4.56] +xshow +end grestore +end grestore +% DictionaryOperations(a:SetCategory)->BagAggregate(a:SetCategory) +newpath 165 288 moveto +153 279 138 268 125 258 curveto +stroke +gsave 10 dict begin +solid +1 setlinewidth +0.000 0.000 0.000 edgecolor +newpath 127 255 moveto +117 252 lineto +123 261 lineto +closepath +fill +0.000 0.000 0.000 edgecolor +newpath 127 255 moveto +117 252 lineto +123 261 lineto +closepath +stroke +end grestore +% Collection(a:SetCategory) +[ /Rect [ 204 216 366 252 ] + /Border [ 0 0 0 ] + /Action << /Subtype /URI /URI (books/bookvol10.pamphlet) >> + /Subtype /Link +/ANN pdfmark +gsave 10 dict begin +filled +0.404 0.667 0.545 nodecolor +0.404 0.667 0.545 nodecolor +newpath 366 252 moveto +204 252 lineto +204 216 lineto +366 216 lineto +closepath +fill +0.404 0.667 0.545 nodecolor +newpath 366 252 moveto +204 252 lineto +204 216 lineto +366 216 lineto +closepath +stroke +gsave 10 dict begin +0.000 0.000 0.000 nodecolor +211 229 moveto +(Collection\(a:SetCategory\)) +[9.36 6.96 3.84 3.84 6.24 6.24 3.84 3.84 6.96 6.96 4.56 6.24 3.84 7.68 6 3.84 9.36 6.24 3.84 6.24 6.96 6.96 5.04 6.96 4.56] +xshow +end grestore +end grestore +% DictionaryOperations(a:SetCategory)->Collection(a:SetCategory) +newpath 213 288 moveto +225 279 240 268 253 258 curveto +stroke +gsave 10 dict begin +solid +1 setlinewidth +0.000 0.000 0.000 edgecolor +newpath 255 261 moveto +261 252 lineto +251 255 lineto +closepath +fill +0.000 0.000 0.000 edgecolor +newpath 255 261 moveto +261 252 lineto +251 255 lineto +closepath +stroke +end grestore +% BagAggregate(a:Type) +[ /Rect [ 31 144 175 180 ] + /Border [ 0 0 0 ] + /Action << /Subtype /URI /URI (books/bookvol10.pamphlet) >> + /Subtype /Link +/ANN pdfmark +gsave 10 dict begin +filled +0.537 0.247 0.902 nodecolor +0.537 0.247 0.902 nodecolor +newpath 175 180 moveto +31 180 lineto +31 144 lineto +175 144 lineto +closepath +fill +0.537 0.247 0.902 nodecolor +newpath 175 180 moveto +31 180 lineto +31 144 lineto +175 144 lineto +closepath +stroke +gsave 10 dict begin +0.000 0.000 0.000 nodecolor +38 157 moveto +(BagAggregate\(a:Type\)) +[9.36 6.24 6.96 9.84 6.96 7.2 4.8 6.24 6.72 6.24 3.84 6.24 4.56 6.24 3.84 7.2 6.96 6.96 6.24 4.56] +xshow +end grestore +end grestore +% BagAggregate(a:SetCategory)->BagAggregate(a:Type) +newpath 96 216 moveto +97 208 98 199 99 190 curveto +stroke +gsave 10 dict begin +solid +1 setlinewidth +0.000 0.000 0.000 edgecolor +newpath 102 190 moveto +100 180 lineto +96 190 lineto +closepath +fill +0.000 0.000 0.000 edgecolor +newpath 102 190 moveto +100 180 lineto +96 190 lineto +closepath +stroke +end grestore +% Collection(a:Type) +[ /Rect [ 214 144 334 180 ] + /Border [ 0 0 0 ] + /Action << /Subtype /URI /URI (books/bookvol10.pamphlet) >> + /Subtype /Link +/ANN pdfmark +gsave 10 dict begin +filled +0.537 0.247 0.902 nodecolor +0.537 0.247 0.902 nodecolor +newpath 334 180 moveto +214 180 lineto +214 144 lineto +334 144 lineto +closepath +fill +0.537 0.247 0.902 nodecolor +newpath 334 180 moveto +214 180 lineto +214 144 lineto +334 144 lineto +closepath +stroke +gsave 10 dict begin +0.000 0.000 0.000 nodecolor +221 157 moveto +(Collection\(a:Type\)) +[9.36 6.96 3.84 3.84 6.24 6.24 3.84 3.84 6.96 6.96 4.56 6.24 3.84 7.2 6.96 6.96 6.24 4.56] +xshow +end grestore +end grestore +% Collection(a:SetCategory)->Collection(a:Type) +newpath 282 216 moveto +281 208 279 199 278 190 curveto +stroke +gsave 10 dict begin +solid +1 setlinewidth +0.000 0.000 0.000 edgecolor +newpath 281 190 moveto +277 180 lineto +275 190 lineto +closepath +fill +0.000 0.000 0.000 edgecolor +newpath 281 190 moveto +277 180 lineto +275 190 lineto +closepath +stroke +end grestore +% HomogeneousAggregate(a:Type) +[ /Rect [ 87 72 289 108 ] + /Border [ 0 0 0 ] + /Action << /Subtype /URI /URI (books/bookvol10.pamphlet) >> + /Subtype /Link +/ANN pdfmark +gsave 10 dict begin +filled +0.537 0.247 0.902 nodecolor +0.537 0.247 0.902 nodecolor +newpath 289 108 moveto +87 108 lineto +87 72 lineto +289 72 lineto +closepath +fill +0.537 0.247 0.902 nodecolor +newpath 289 108 moveto +87 108 lineto +87 72 lineto +289 72 lineto +closepath +stroke +gsave 10 dict begin +0.000 0.000 0.000 nodecolor +94 85 moveto +(HomogeneousAggregate\(a:Type\)) +[10.08 6.96 10.8 6.96 6.72 6.24 6.96 6.24 6.96 6.96 5.52 9.84 6.96 7.2 4.8 6.24 6.72 6.24 3.84 6.24 4.56 6.24 3.84 7.2 6.96 6.96 6.24 4.56] +xshow +end grestore +end grestore +% BagAggregate(a:Type)->HomogeneousAggregate(a:Type) +newpath 124 144 moveto +135 135 148 124 159 114 curveto +stroke +gsave 10 dict begin +solid +1 setlinewidth +0.000 0.000 0.000 edgecolor +newpath 161 117 moveto +167 108 lineto +157 111 lineto +closepath +fill +0.000 0.000 0.000 edgecolor +newpath 161 117 moveto +167 108 lineto +157 111 lineto +closepath +stroke +end grestore +% ... +[ /Rect [ 161 0 215 36 ] + /Border [ 0 0 0 ] + /Action << /Subtype /URI /URI (books/bookvol10.pamphlet) >> + /Subtype /Link +/ANN pdfmark +gsave 10 dict begin +filled +0.537 0.247 0.902 nodecolor +0.537 0.247 0.902 nodecolor +newpath 215 36 moveto +161 36 lineto +161 0 lineto +215 0 lineto +closepath +fill +0.537 0.247 0.902 nodecolor +newpath 215 36 moveto +161 36 lineto +161 0 lineto +215 0 lineto +closepath +stroke +gsave 10 dict begin +0.000 0.000 0.000 nodecolor +182 13 moveto +(...) +[3.6 3.6 3.6] +xshow +end grestore +end grestore +% HomogeneousAggregate(a:Type)->... +newpath 188 72 moveto +188 64 188 55 188 46 curveto +stroke +gsave 10 dict begin +solid +1 setlinewidth +0.000 0.000 0.000 edgecolor +newpath 192 46 moveto +188 36 lineto +185 46 lineto +closepath +fill +0.000 0.000 0.000 edgecolor +newpath 192 46 moveto +188 36 lineto +185 46 lineto +closepath +stroke +end grestore +% Collection(a:Type)->HomogeneousAggregate(a:Type) +newpath 252 144 moveto +241 135 228 124 217 114 curveto +stroke +gsave 10 dict begin +solid +1 setlinewidth +0.000 0.000 0.000 edgecolor +newpath 219 111 moveto +209 108 lineto +215 117 lineto +closepath +fill +0.000 0.000 0.000 edgecolor +newpath 219 111 moveto +209 108 lineto +215 117 lineto +closepath +stroke +end grestore +endpage +showpage +grestore +%%PageTrailer +%%EndPage: 1 +%%Trailer +%%Pages: 1 +end +restore +%%EOF diff --git a/books/ps/v10onedimensionalarrayaggregate.ps b/books/ps/v10onedimensionalarrayaggregate.ps new file mode 100644 index 0000000..0bdc3d2 --- /dev/null +++ b/books/ps/v10onedimensionalarrayaggregate.ps @@ -0,0 +1,503 @@ +%!PS-Adobe-2.0 +%%Creator: dot version 2.8 (Thu Sep 14 20:34:11 UTC 2006) +%%For: (root) root +%%Title: pic +%%Pages: (atend) +%%BoundingBox: 36 36 359 368 +%%EndComments +save +%%BeginProlog +/DotDict 200 dict def +DotDict begin + +/setupLatin1 { +mark +/EncodingVector 256 array def + EncodingVector 0 + +ISOLatin1Encoding 0 255 getinterval putinterval +EncodingVector 45 /hyphen put + +% Set up ISO Latin 1 character encoding +/starnetISO { + dup dup findfont dup length dict begin + { 1 index /FID ne { def }{ pop pop } ifelse + } forall + /Encoding EncodingVector def + currentdict end definefont +} def +/Times-Roman starnetISO def +/Times-Italic starnetISO def +/Times-Bold starnetISO def +/Times-BoldItalic starnetISO def +/Helvetica starnetISO def +/Helvetica-Oblique starnetISO def +/Helvetica-Bold starnetISO def +/Helvetica-BoldOblique starnetISO def +/Courier starnetISO def +/Courier-Oblique starnetISO def +/Courier-Bold starnetISO def +/Courier-BoldOblique starnetISO def +cleartomark +} bind def + +%%BeginResource: procset graphviz 0 0 +/coord-font-family /Times-Roman def +/default-font-family /Times-Roman def +/coordfont coord-font-family findfont 8 scalefont def + +/InvScaleFactor 1.0 def +/set_scale { + dup 1 exch div /InvScaleFactor exch def + dup scale +} bind def + +% styles +/solid { [] 0 setdash } bind def +/dashed { [9 InvScaleFactor mul dup ] 0 setdash } bind def +/dotted { [1 InvScaleFactor mul 6 InvScaleFactor mul] 0 setdash } bind def +/invis {/fill {newpath} def /stroke {newpath} def /show {pop newpath} def} bind def +/bold { 2 setlinewidth } bind def +/filled { } bind def +/unfilled { } bind def +/rounded { } bind def +/diagonals { } bind def + +% hooks for setting color +/nodecolor { sethsbcolor } bind def +/edgecolor { sethsbcolor } bind def +/graphcolor { sethsbcolor } bind def +/nopcolor {pop pop pop} bind def + +/beginpage { % i j npages + /npages exch def + /j exch def + /i exch def + /str 10 string def + npages 1 gt { + gsave + coordfont setfont + 0 0 moveto + (\() show i str cvs show (,) show j str cvs show (\)) show + grestore + } if +} bind def + +/set_font { + findfont exch + scalefont setfont +} def + +% draw aligned label in bounding box aligned to current point +/alignedtext { % width adj text + /text exch def + /adj exch def + /width exch def + gsave + width 0 gt { + text stringwidth pop adj mul 0 rmoveto + } if + [] 0 setdash + text show + grestore +} def + +/boxprim { % xcorner ycorner xsize ysize + 4 2 roll + moveto + 2 copy + exch 0 rlineto + 0 exch rlineto + pop neg 0 rlineto + closepath +} bind def + +/ellipse_path { + /ry exch def + /rx exch def + /y exch def + /x exch def + matrix currentmatrix + newpath + x y translate + rx ry scale + 0 0 1 0 360 arc + setmatrix +} bind def + +/endpage { showpage } bind def +/showpage { } def + +/layercolorseq + [ % layer color sequence - darkest to lightest + [0 0 0] + [.2 .8 .8] + [.4 .8 .8] + [.6 .8 .8] + [.8 .8 .8] + ] +def + +/layerlen layercolorseq length def + +/setlayer {/maxlayer exch def /curlayer exch def + layercolorseq curlayer 1 sub layerlen mod get + aload pop sethsbcolor + /nodecolor {nopcolor} def + /edgecolor {nopcolor} def + /graphcolor {nopcolor} def +} bind def + +/onlayer { curlayer ne {invis} if } def + +/onlayers { + /myupper exch def + /mylower exch def + curlayer mylower lt + curlayer myupper gt + or + {invis} if +} def + +/curlayer 0 def + +%%EndResource +%%EndProlog +%%BeginSetup +14 default-font-family set_font +1 setmiterlimit +% /arrowlength 10 def +% /arrowwidth 5 def + +% make sure pdfmark is harmless for PS-interpreters other than Distiller +/pdfmark where {pop} {userdict /pdfmark /cleartomark load put} ifelse +% make '<<' and '>>' safe on PS Level 1 devices +/languagelevel where {pop languagelevel}{1} ifelse +2 lt { + userdict (<<) cvn ([) cvn load put + userdict (>>) cvn ([) cvn load put +} if + +%%EndSetup +%%Page: 1 1 +%%PageBoundingBox: 36 36 359 368 +%%PageOrientation: Portrait +gsave +36 36 323 332 boxprim clip newpath +36 36 translate +0 0 1 beginpage +1.0000 set_scale +4 4 translate 0 rotate +0.167 0.600 1.000 graphcolor +0.167 0.600 1.000 graphcolor +newpath -6 -6 moveto +-6 330 lineto +321 330 lineto +321 -6 lineto +closepath +fill +0.167 0.600 1.000 graphcolor +newpath -6 -6 moveto +-6 330 lineto +321 330 lineto +321 -6 lineto +closepath +stroke +0.000 0.000 0.000 graphcolor +14.00 /Times-Roman set_font +% OneDimensionalArrayAggregate(a:Type) +[ /Rect [ 67 288 315 324 ] + /Border [ 0 0 0 ] + /Action << /Subtype /URI /URI (books/bookvol10.pamphlet) >> + /Subtype /Link +/ANN pdfmark +gsave 10 dict begin +filled +0.537 0.247 0.902 nodecolor +0.537 0.247 0.902 nodecolor +newpath 315 324 moveto +67 324 lineto +67 288 lineto +315 288 lineto +closepath +fill +0.537 0.247 0.902 nodecolor +newpath 315 324 moveto +67 324 lineto +67 288 lineto +315 288 lineto +closepath +stroke +gsave 10 dict begin +0.000 0.000 0.000 nodecolor +74 301 moveto +(OneDimensionalArrayAggregate\(a:Type\)) +[10.08 6.96 6.24 10.08 3.84 10.8 6.24 6.96 5.52 3.84 6.96 6.96 6.24 3.84 10.08 5.28 4.8 5.76 6.96 9.84 6.96 7.2 4.8 6.24 6.72 6.24 3.84 6.24 4.56 6.24 3.84 7.2 6.96 6.96 6.24 4.56] +xshow +end grestore +end grestore +% FiniteLinearAggregate(a:Type) +[ /Rect [ 96 216 286 252 ] + /Border [ 0 0 0 ] + /Action << /Subtype /URI /URI (books/bookvol10.pamphlet) >> + /Subtype /Link +/ANN pdfmark +gsave 10 dict begin +filled +0.537 0.247 0.902 nodecolor +0.537 0.247 0.902 nodecolor +newpath 286 252 moveto +96 252 lineto +96 216 lineto +286 216 lineto +closepath +fill +0.537 0.247 0.902 nodecolor +newpath 286 252 moveto +96 252 lineto +96 216 lineto +286 216 lineto +closepath +stroke +gsave 10 dict begin +0.000 0.000 0.000 nodecolor +104 229 moveto +(FiniteLinearAggregate\(a:Type\)) +[7.44 3.84 6.96 3.84 3.84 6.24 8.64 3.84 6.96 6.24 6.24 4.8 9.84 6.96 7.2 4.8 6.24 6.72 6.24 3.84 6.24 4.56 6.24 3.84 7.2 6.96 6.96 6.24 4.56] +xshow +end grestore +end grestore +% OneDimensionalArrayAggregate(a:Type)->FiniteLinearAggregate(a:Type) +newpath 191 288 moveto +191 280 191 271 191 262 curveto +stroke +gsave 10 dict begin +solid +1 setlinewidth +0.000 0.000 0.000 edgecolor +newpath 195 262 moveto +191 252 lineto +188 262 lineto +closepath +fill +0.000 0.000 0.000 edgecolor +newpath 195 262 moveto +191 252 lineto +188 262 lineto +closepath +stroke +end grestore +% LinearAggregate(a:Type) +[ /Rect [ 112 144 270 180 ] + /Border [ 0 0 0 ] + /Action << /Subtype /URI /URI (books/bookvol10.pamphlet) >> + /Subtype /Link +/ANN pdfmark +gsave 10 dict begin +filled +0.537 0.247 0.902 nodecolor +0.537 0.247 0.902 nodecolor +newpath 270 180 moveto +112 180 lineto +112 144 lineto +270 144 lineto +closepath +fill +0.537 0.247 0.902 nodecolor +newpath 270 180 moveto +112 180 lineto +112 144 lineto +270 144 lineto +closepath +stroke +gsave 10 dict begin +0.000 0.000 0.000 nodecolor +120 157 moveto +(LinearAggregate\(a:Type\)) +[8.64 3.84 6.96 6.24 6.24 4.8 9.84 6.96 7.2 4.8 6.24 6.72 6.24 3.84 6.24 4.56 6.24 3.84 7.2 6.96 6.96 6.24 4.56] +xshow +end grestore +end grestore +% FiniteLinearAggregate(a:Type)->LinearAggregate(a:Type) +newpath 191 216 moveto +191 208 191 199 191 190 curveto +stroke +gsave 10 dict begin +solid +1 setlinewidth +0.000 0.000 0.000 edgecolor +newpath 195 190 moveto +191 180 lineto +188 190 lineto +closepath +fill +0.000 0.000 0.000 edgecolor +newpath 195 190 moveto +191 180 lineto +188 190 lineto +closepath +stroke +end grestore +% IndexedAggregate(b:Integer,a:Type) +[ /Rect [ 0 72 218 108 ] + /Border [ 0 0 0 ] + /Action << /Subtype /URI /URI (books/bookvol10.pamphlet) >> + /Subtype /Link +/ANN pdfmark +gsave 10 dict begin +filled +0.404 0.667 0.545 nodecolor +0.404 0.667 0.545 nodecolor +newpath 218 108 moveto +0 108 lineto +0 72 lineto +218 72 lineto +closepath +fill +0.404 0.667 0.545 nodecolor +newpath 218 108 moveto +0 108 lineto +0 72 lineto +218 72 lineto +closepath +stroke +gsave 10 dict begin +0.000 0.000 0.000 nodecolor +7 85 moveto +(IndexedAggregate\(b:Integer,a:Type\)) +[4.56 6.96 6.96 5.76 6.48 6.24 6.96 9.84 6.96 7.2 4.8 6.24 6.72 6.24 3.84 6.24 4.56 6.96 3.84 4.56 6.96 3.84 6.24 6.72 6.24 4.32 3.6 6.24 3.84 7.2 6.96 6.96 6.24 4.56] +xshow +end grestore +end grestore +% LinearAggregate(a:Type)->IndexedAggregate(b:Integer,a:Type) +newpath 170 144 moveto +160 135 148 124 137 115 curveto +stroke +gsave 10 dict begin +solid +1 setlinewidth +0.000 0.000 0.000 edgecolor +newpath 139 112 moveto +129 108 lineto +134 117 lineto +closepath +fill +0.000 0.000 0.000 edgecolor +newpath 139 112 moveto +129 108 lineto +134 117 lineto +closepath +stroke +end grestore +% CLAGG... +[ /Rect [ 236 72 310 108 ] + /Border [ 0 0 0 ] + /Action << /Subtype /URI /URI (books/bookvol10.pamphlet) >> + /Subtype /Link +/ANN pdfmark +gsave 10 dict begin +filled +0.537 0.247 0.902 nodecolor +0.537 0.247 0.902 nodecolor +newpath 310 108 moveto +236 108 lineto +236 72 lineto +310 72 lineto +closepath +fill +0.537 0.247 0.902 nodecolor +newpath 310 108 moveto +236 108 lineto +236 72 lineto +310 72 lineto +closepath +stroke +gsave 10 dict begin +0.000 0.000 0.000 nodecolor +243 85 moveto +(CLAGG...) +[9.36 8.64 9.36 10.08 10.08 3.6 3.6 3.6] +xshow +end grestore +end grestore +% LinearAggregate(a:Type)->CLAGG... +newpath 212 144 moveto +222 135 234 124 245 115 curveto +stroke +gsave 10 dict begin +solid +1 setlinewidth +0.000 0.000 0.000 edgecolor +newpath 248 117 moveto +253 108 lineto +243 112 lineto +closepath +fill +0.000 0.000 0.000 edgecolor +newpath 248 117 moveto +253 108 lineto +243 112 lineto +closepath +stroke +end grestore +% IXAGG... +[ /Rect [ 73 0 145 36 ] + /Border [ 0 0 0 ] + /Action << /Subtype /URI /URI (books/bookvol10.pamphlet) >> + /Subtype /Link +/ANN pdfmark +gsave 10 dict begin +filled +0.537 0.247 0.902 nodecolor +0.537 0.247 0.902 nodecolor +newpath 145 36 moveto +73 36 lineto +73 0 lineto +145 0 lineto +closepath +fill +0.537 0.247 0.902 nodecolor +newpath 145 36 moveto +73 36 lineto +73 0 lineto +145 0 lineto +closepath +stroke +gsave 10 dict begin +0.000 0.000 0.000 nodecolor +80 13 moveto +(IXAGG...) +[4.56 10.08 9.36 10.08 10.08 3.6 3.6 3.6] +xshow +end grestore +end grestore +% IndexedAggregate(b:Integer,a:Type)->IXAGG... +newpath 109 72 moveto +109 64 109 55 109 46 curveto +stroke +gsave 10 dict begin +solid +1 setlinewidth +0.000 0.000 0.000 edgecolor +newpath 113 46 moveto +109 36 lineto +106 46 lineto +closepath +fill +0.000 0.000 0.000 edgecolor +newpath 113 46 moveto +109 36 lineto +106 46 lineto +closepath +stroke +end grestore +endpage +showpage +grestore +%%PageTrailer +%%EndPage: 1 +%%Trailer +%%Pages: 1 +end +restore +%%EOF diff --git a/books/ps/v10priorityqueueaggregate.ps b/books/ps/v10priorityqueueaggregate.ps new file mode 100644 index 0000000..8f048a4 --- /dev/null +++ b/books/ps/v10priorityqueueaggregate.ps @@ -0,0 +1,503 @@ +%!PS-Adobe-2.0 +%%Creator: dot version 2.8 (Thu Sep 14 20:34:11 UTC 2006) +%%For: (root) root +%%Title: pic +%%Pages: (atend) +%%BoundingBox: 36 36 246 440 +%%EndComments +save +%%BeginProlog +/DotDict 200 dict def +DotDict begin + +/setupLatin1 { +mark +/EncodingVector 256 array def + EncodingVector 0 + +ISOLatin1Encoding 0 255 getinterval putinterval +EncodingVector 45 /hyphen put + +% Set up ISO Latin 1 character encoding +/starnetISO { + dup dup findfont dup length dict begin + { 1 index /FID ne { def }{ pop pop } ifelse + } forall + /Encoding EncodingVector def + currentdict end definefont +} def +/Times-Roman starnetISO def +/Times-Italic starnetISO def +/Times-Bold starnetISO def +/Times-BoldItalic starnetISO def +/Helvetica starnetISO def +/Helvetica-Oblique starnetISO def +/Helvetica-Bold starnetISO def +/Helvetica-BoldOblique starnetISO def +/Courier starnetISO def +/Courier-Oblique starnetISO def +/Courier-Bold starnetISO def +/Courier-BoldOblique starnetISO def +cleartomark +} bind def + +%%BeginResource: procset graphviz 0 0 +/coord-font-family /Times-Roman def +/default-font-family /Times-Roman def +/coordfont coord-font-family findfont 8 scalefont def + +/InvScaleFactor 1.0 def +/set_scale { + dup 1 exch div /InvScaleFactor exch def + dup scale +} bind def + +% styles +/solid { [] 0 setdash } bind def +/dashed { [9 InvScaleFactor mul dup ] 0 setdash } bind def +/dotted { [1 InvScaleFactor mul 6 InvScaleFactor mul] 0 setdash } bind def +/invis {/fill {newpath} def /stroke {newpath} def /show {pop newpath} def} bind def +/bold { 2 setlinewidth } bind def +/filled { } bind def +/unfilled { } bind def +/rounded { } bind def +/diagonals { } bind def + +% hooks for setting color +/nodecolor { sethsbcolor } bind def +/edgecolor { sethsbcolor } bind def +/graphcolor { sethsbcolor } bind def +/nopcolor {pop pop pop} bind def + +/beginpage { % i j npages + /npages exch def + /j exch def + /i exch def + /str 10 string def + npages 1 gt { + gsave + coordfont setfont + 0 0 moveto + (\() show i str cvs show (,) show j str cvs show (\)) show + grestore + } if +} bind def + +/set_font { + findfont exch + scalefont setfont +} def + +% draw aligned label in bounding box aligned to current point +/alignedtext { % width adj text + /text exch def + /adj exch def + /width exch def + gsave + width 0 gt { + text stringwidth pop adj mul 0 rmoveto + } if + [] 0 setdash + text show + grestore +} def + +/boxprim { % xcorner ycorner xsize ysize + 4 2 roll + moveto + 2 copy + exch 0 rlineto + 0 exch rlineto + pop neg 0 rlineto + closepath +} bind def + +/ellipse_path { + /ry exch def + /rx exch def + /y exch def + /x exch def + matrix currentmatrix + newpath + x y translate + rx ry scale + 0 0 1 0 360 arc + setmatrix +} bind def + +/endpage { showpage } bind def +/showpage { } def + +/layercolorseq + [ % layer color sequence - darkest to lightest + [0 0 0] + [.2 .8 .8] + [.4 .8 .8] + [.6 .8 .8] + [.8 .8 .8] + ] +def + +/layerlen layercolorseq length def + +/setlayer {/maxlayer exch def /curlayer exch def + layercolorseq curlayer 1 sub layerlen mod get + aload pop sethsbcolor + /nodecolor {nopcolor} def + /edgecolor {nopcolor} def + /graphcolor {nopcolor} def +} bind def + +/onlayer { curlayer ne {invis} if } def + +/onlayers { + /myupper exch def + /mylower exch def + curlayer mylower lt + curlayer myupper gt + or + {invis} if +} def + +/curlayer 0 def + +%%EndResource +%%EndProlog +%%BeginSetup +14 default-font-family set_font +1 setmiterlimit +% /arrowlength 10 def +% /arrowwidth 5 def + +% make sure pdfmark is harmless for PS-interpreters other than Distiller +/pdfmark where {pop} {userdict /pdfmark /cleartomark load put} ifelse +% make '<<' and '>>' safe on PS Level 1 devices +/languagelevel where {pop languagelevel}{1} ifelse +2 lt { + userdict (<<) cvn ([) cvn load put + userdict (>>) cvn ([) cvn load put +} if + +%%EndSetup +%%Page: 1 1 +%%PageBoundingBox: 36 36 246 440 +%%PageOrientation: Portrait +gsave +36 36 210 404 boxprim clip newpath +36 36 translate +0 0 1 beginpage +1.0000 set_scale +4 4 translate 0 rotate +0.167 0.600 1.000 graphcolor +0.167 0.600 1.000 graphcolor +newpath -6 -6 moveto +-6 402 lineto +208 402 lineto +208 -6 lineto +closepath +fill +0.167 0.600 1.000 graphcolor +newpath -6 -6 moveto +-6 402 lineto +208 402 lineto +208 -6 lineto +closepath +stroke +0.000 0.000 0.000 graphcolor +14.00 /Times-Roman set_font +% PriorityQueueAggregate(a:Type) +[ /Rect [ 0 360 202 396 ] + /Border [ 0 0 0 ] + /Action << /Subtype /URI /URI (books/bookvol10.pamphlet) >> + /Subtype /Link +/ANN pdfmark +gsave 10 dict begin +filled +0.537 0.247 0.902 nodecolor +0.537 0.247 0.902 nodecolor +newpath 202 396 moveto +0 396 lineto +0 360 lineto +202 360 lineto +closepath +fill +0.537 0.247 0.902 nodecolor +newpath 202 396 moveto +0 396 lineto +0 360 lineto +202 360 lineto +closepath +stroke +gsave 10 dict begin +0.000 0.000 0.000 nodecolor +8 373 moveto +(PriorityQueueAggregate\(a:Type\)) +[7.68 5.04 3.84 6.96 5.04 3.84 3.84 6.96 10.08 6.96 6.24 6.96 6.24 9.84 6.96 7.2 4.8 6.24 6.72 6.24 3.84 6.24 4.56 6.24 3.84 7.2 6.96 6.96 6.24 4.56] +xshow +end grestore +end grestore +% BagAggregate(a:Type) +[ /Rect [ 29 288 173 324 ] + /Border [ 0 0 0 ] + /Action << /Subtype /URI /URI (books/bookvol10.pamphlet) >> + /Subtype /Link +/ANN pdfmark +gsave 10 dict begin +filled +0.537 0.247 0.902 nodecolor +0.537 0.247 0.902 nodecolor +newpath 173 324 moveto +29 324 lineto +29 288 lineto +173 288 lineto +closepath +fill +0.537 0.247 0.902 nodecolor +newpath 173 324 moveto +29 324 lineto +29 288 lineto +173 288 lineto +closepath +stroke +gsave 10 dict begin +0.000 0.000 0.000 nodecolor +36 301 moveto +(BagAggregate\(a:Type\)) +[9.36 6.24 6.96 9.84 6.96 7.2 4.8 6.24 6.72 6.24 3.84 6.24 4.56 6.24 3.84 7.2 6.96 6.96 6.24 4.56] +xshow +end grestore +end grestore +% PriorityQueueAggregate(a:Type)->BagAggregate(a:Type) +newpath 101 360 moveto +101 352 101 343 101 334 curveto +stroke +gsave 10 dict begin +solid +1 setlinewidth +0.000 0.000 0.000 edgecolor +newpath 105 334 moveto +101 324 lineto +98 334 lineto +closepath +fill +0.000 0.000 0.000 edgecolor +newpath 105 334 moveto +101 324 lineto +98 334 lineto +closepath +stroke +end grestore +% HomogeneousAggregate(a:Type) +[ /Rect [ 0 216 202 252 ] + /Border [ 0 0 0 ] + /Action << /Subtype /URI /URI (books/bookvol10.pamphlet) >> + /Subtype /Link +/ANN pdfmark +gsave 10 dict begin +filled +0.537 0.247 0.902 nodecolor +0.537 0.247 0.902 nodecolor +newpath 202 252 moveto +0 252 lineto +0 216 lineto +202 216 lineto +closepath +fill +0.537 0.247 0.902 nodecolor +newpath 202 252 moveto +0 252 lineto +0 216 lineto +202 216 lineto +closepath +stroke +gsave 10 dict begin +0.000 0.000 0.000 nodecolor +7 229 moveto +(HomogeneousAggregate\(a:Type\)) +[10.08 6.96 10.8 6.96 6.72 6.24 6.96 6.24 6.96 6.96 5.52 9.84 6.96 7.2 4.8 6.24 6.72 6.24 3.84 6.24 4.56 6.24 3.84 7.2 6.96 6.96 6.24 4.56] +xshow +end grestore +end grestore +% BagAggregate(a:Type)->HomogeneousAggregate(a:Type) +newpath 101 288 moveto +101 280 101 271 101 262 curveto +stroke +gsave 10 dict begin +solid +1 setlinewidth +0.000 0.000 0.000 edgecolor +newpath 105 262 moveto +101 252 lineto +98 262 lineto +closepath +fill +0.000 0.000 0.000 edgecolor +newpath 105 262 moveto +101 252 lineto +98 262 lineto +closepath +stroke +end grestore +% Aggregate() +[ /Rect [ 59 144 143 180 ] + /Border [ 0 0 0 ] + /Action << /Subtype /URI /URI (books/bookvol10.pamphlet) >> + /Subtype /Link +/ANN pdfmark +gsave 10 dict begin +filled +0.537 0.247 0.902 nodecolor +0.537 0.247 0.902 nodecolor +newpath 143 180 moveto +59 180 lineto +59 144 lineto +143 144 lineto +closepath +fill +0.537 0.247 0.902 nodecolor +newpath 143 180 moveto +59 180 lineto +59 144 lineto +143 144 lineto +closepath +stroke +gsave 10 dict begin +0.000 0.000 0.000 nodecolor +66 157 moveto +(Aggregate\(\)) +[9.84 6.96 7.2 4.8 6.24 6.72 6.24 3.84 6.24 4.56 4.56] +xshow +end grestore +end grestore +% HomogeneousAggregate(a:Type)->Aggregate() +newpath 101 216 moveto +101 208 101 199 101 190 curveto +stroke +gsave 10 dict begin +solid +1 setlinewidth +0.000 0.000 0.000 edgecolor +newpath 105 190 moveto +101 180 lineto +98 190 lineto +closepath +fill +0.000 0.000 0.000 edgecolor +newpath 105 190 moveto +101 180 lineto +98 190 lineto +closepath +stroke +end grestore +% Type() +[ /Rect [ 74 72 128 108 ] + /Border [ 0 0 0 ] + /Action << /Subtype /URI /URI (books/bookvol10.pamphlet) >> + /Subtype /Link +/ANN pdfmark +gsave 10 dict begin +filled +0.537 0.247 0.902 nodecolor +0.537 0.247 0.902 nodecolor +newpath 128 108 moveto +74 108 lineto +74 72 lineto +128 72 lineto +closepath +fill +0.537 0.247 0.902 nodecolor +newpath 128 108 moveto +74 108 lineto +74 72 lineto +128 72 lineto +closepath +stroke +gsave 10 dict begin +0.000 0.000 0.000 nodecolor +82 85 moveto +(Type\(\)) +[7.2 6.96 6.96 6.24 4.56 4.56] +xshow +end grestore +end grestore +% Aggregate()->Type() +newpath 101 144 moveto +101 136 101 127 101 118 curveto +stroke +gsave 10 dict begin +solid +1 setlinewidth +0.000 0.000 0.000 edgecolor +newpath 105 118 moveto +101 108 lineto +98 118 lineto +closepath +fill +0.000 0.000 0.000 edgecolor +newpath 105 118 moveto +101 108 lineto +98 118 lineto +closepath +stroke +end grestore +% Category +[ /Rect [ 67 0 135 36 ] + /Border [ 0 0 0 ] + /Action << /Subtype /URI /URI (books/bookvol10.pamphlet) >> + /Subtype /Link +/ANN pdfmark +gsave 10 dict begin +filled +0.537 0.247 0.902 nodecolor +0.537 0.247 0.902 nodecolor +newpath 135 36 moveto +67 36 lineto +67 0 lineto +135 0 lineto +closepath +fill +0.537 0.247 0.902 nodecolor +newpath 135 36 moveto +67 36 lineto +67 0 lineto +135 0 lineto +closepath +stroke +gsave 10 dict begin +0.000 0.000 0.000 nodecolor +75 13 moveto +(Category) +[9.36 6.24 3.84 6.24 6.96 6.96 5.04 6.96] +xshow +end grestore +end grestore +% Type()->Category +newpath 101 72 moveto +101 64 101 55 101 46 curveto +stroke +gsave 10 dict begin +solid +1 setlinewidth +0.000 0.000 0.000 edgecolor +newpath 105 46 moveto +101 36 lineto +98 46 lineto +closepath +fill +0.000 0.000 0.000 edgecolor +newpath 105 46 moveto +101 36 lineto +98 46 lineto +closepath +stroke +end grestore +endpage +showpage +grestore +%%PageTrailer +%%EndPage: 1 +%%Trailer +%%Pages: 1 +end +restore +%%EOF diff --git a/books/ps/v10queueaggregate.ps b/books/ps/v10queueaggregate.ps new file mode 100644 index 0000000..8983ad4 --- /dev/null +++ b/books/ps/v10queueaggregate.ps @@ -0,0 +1,503 @@ +%!PS-Adobe-2.0 +%%Creator: dot version 2.8 (Thu Sep 14 20:34:11 UTC 2006) +%%For: (root) root +%%Title: pic +%%Pages: (atend) +%%BoundingBox: 36 36 246 440 +%%EndComments +save +%%BeginProlog +/DotDict 200 dict def +DotDict begin + +/setupLatin1 { +mark +/EncodingVector 256 array def + EncodingVector 0 + +ISOLatin1Encoding 0 255 getinterval putinterval +EncodingVector 45 /hyphen put + +% Set up ISO Latin 1 character encoding +/starnetISO { + dup dup findfont dup length dict begin + { 1 index /FID ne { def }{ pop pop } ifelse + } forall + /Encoding EncodingVector def + currentdict end definefont +} def +/Times-Roman starnetISO def +/Times-Italic starnetISO def +/Times-Bold starnetISO def +/Times-BoldItalic starnetISO def +/Helvetica starnetISO def +/Helvetica-Oblique starnetISO def +/Helvetica-Bold starnetISO def +/Helvetica-BoldOblique starnetISO def +/Courier starnetISO def +/Courier-Oblique starnetISO def +/Courier-Bold starnetISO def +/Courier-BoldOblique starnetISO def +cleartomark +} bind def + +%%BeginResource: procset graphviz 0 0 +/coord-font-family /Times-Roman def +/default-font-family /Times-Roman def +/coordfont coord-font-family findfont 8 scalefont def + +/InvScaleFactor 1.0 def +/set_scale { + dup 1 exch div /InvScaleFactor exch def + dup scale +} bind def + +% styles +/solid { [] 0 setdash } bind def +/dashed { [9 InvScaleFactor mul dup ] 0 setdash } bind def +/dotted { [1 InvScaleFactor mul 6 InvScaleFactor mul] 0 setdash } bind def +/invis {/fill {newpath} def /stroke {newpath} def /show {pop newpath} def} bind def +/bold { 2 setlinewidth } bind def +/filled { } bind def +/unfilled { } bind def +/rounded { } bind def +/diagonals { } bind def + +% hooks for setting color +/nodecolor { sethsbcolor } bind def +/edgecolor { sethsbcolor } bind def +/graphcolor { sethsbcolor } bind def +/nopcolor {pop pop pop} bind def + +/beginpage { % i j npages + /npages exch def + /j exch def + /i exch def + /str 10 string def + npages 1 gt { + gsave + coordfont setfont + 0 0 moveto + (\() show i str cvs show (,) show j str cvs show (\)) show + grestore + } if +} bind def + +/set_font { + findfont exch + scalefont setfont +} def + +% draw aligned label in bounding box aligned to current point +/alignedtext { % width adj text + /text exch def + /adj exch def + /width exch def + gsave + width 0 gt { + text stringwidth pop adj mul 0 rmoveto + } if + [] 0 setdash + text show + grestore +} def + +/boxprim { % xcorner ycorner xsize ysize + 4 2 roll + moveto + 2 copy + exch 0 rlineto + 0 exch rlineto + pop neg 0 rlineto + closepath +} bind def + +/ellipse_path { + /ry exch def + /rx exch def + /y exch def + /x exch def + matrix currentmatrix + newpath + x y translate + rx ry scale + 0 0 1 0 360 arc + setmatrix +} bind def + +/endpage { showpage } bind def +/showpage { } def + +/layercolorseq + [ % layer color sequence - darkest to lightest + [0 0 0] + [.2 .8 .8] + [.4 .8 .8] + [.6 .8 .8] + [.8 .8 .8] + ] +def + +/layerlen layercolorseq length def + +/setlayer {/maxlayer exch def /curlayer exch def + layercolorseq curlayer 1 sub layerlen mod get + aload pop sethsbcolor + /nodecolor {nopcolor} def + /edgecolor {nopcolor} def + /graphcolor {nopcolor} def +} bind def + +/onlayer { curlayer ne {invis} if } def + +/onlayers { + /myupper exch def + /mylower exch def + curlayer mylower lt + curlayer myupper gt + or + {invis} if +} def + +/curlayer 0 def + +%%EndResource +%%EndProlog +%%BeginSetup +14 default-font-family set_font +1 setmiterlimit +% /arrowlength 10 def +% /arrowwidth 5 def + +% make sure pdfmark is harmless for PS-interpreters other than Distiller +/pdfmark where {pop} {userdict /pdfmark /cleartomark load put} ifelse +% make '<<' and '>>' safe on PS Level 1 devices +/languagelevel where {pop languagelevel}{1} ifelse +2 lt { + userdict (<<) cvn ([) cvn load put + userdict (>>) cvn ([) cvn load put +} if + +%%EndSetup +%%Page: 1 1 +%%PageBoundingBox: 36 36 246 440 +%%PageOrientation: Portrait +gsave +36 36 210 404 boxprim clip newpath +36 36 translate +0 0 1 beginpage +1.0000 set_scale +4 4 translate 0 rotate +0.167 0.600 1.000 graphcolor +0.167 0.600 1.000 graphcolor +newpath -6 -6 moveto +-6 402 lineto +208 402 lineto +208 -6 lineto +closepath +fill +0.167 0.600 1.000 graphcolor +newpath -6 -6 moveto +-6 402 lineto +208 402 lineto +208 -6 lineto +closepath +stroke +0.000 0.000 0.000 graphcolor +14.00 /Times-Roman set_font +% QueueAggregate(a:Type) +[ /Rect [ 22 360 180 396 ] + /Border [ 0 0 0 ] + /Action << /Subtype /URI /URI (books/bookvol10.pamphlet) >> + /Subtype /Link +/ANN pdfmark +gsave 10 dict begin +filled +0.537 0.247 0.902 nodecolor +0.537 0.247 0.902 nodecolor +newpath 180 396 moveto +22 396 lineto +22 360 lineto +180 360 lineto +closepath +fill +0.537 0.247 0.902 nodecolor +newpath 180 396 moveto +22 396 lineto +22 360 lineto +180 360 lineto +closepath +stroke +gsave 10 dict begin +0.000 0.000 0.000 nodecolor +30 373 moveto +(QueueAggregate\(a:Type\)) +[10.08 6.96 6.24 6.96 6.24 9.84 6.96 7.2 4.8 6.24 6.72 6.24 3.84 6.24 4.56 6.24 3.84 7.2 6.96 6.96 6.24 4.56] +xshow +end grestore +end grestore +% BagAggregate(a:Type) +[ /Rect [ 29 288 173 324 ] + /Border [ 0 0 0 ] + /Action << /Subtype /URI /URI (books/bookvol10.pamphlet) >> + /Subtype /Link +/ANN pdfmark +gsave 10 dict begin +filled +0.537 0.247 0.902 nodecolor +0.537 0.247 0.902 nodecolor +newpath 173 324 moveto +29 324 lineto +29 288 lineto +173 288 lineto +closepath +fill +0.537 0.247 0.902 nodecolor +newpath 173 324 moveto +29 324 lineto +29 288 lineto +173 288 lineto +closepath +stroke +gsave 10 dict begin +0.000 0.000 0.000 nodecolor +36 301 moveto +(BagAggregate\(a:Type\)) +[9.36 6.24 6.96 9.84 6.96 7.2 4.8 6.24 6.72 6.24 3.84 6.24 4.56 6.24 3.84 7.2 6.96 6.96 6.24 4.56] +xshow +end grestore +end grestore +% QueueAggregate(a:Type)->BagAggregate(a:Type) +newpath 101 360 moveto +101 352 101 343 101 334 curveto +stroke +gsave 10 dict begin +solid +1 setlinewidth +0.000 0.000 0.000 edgecolor +newpath 105 334 moveto +101 324 lineto +98 334 lineto +closepath +fill +0.000 0.000 0.000 edgecolor +newpath 105 334 moveto +101 324 lineto +98 334 lineto +closepath +stroke +end grestore +% HomogeneousAggregate(a:Type) +[ /Rect [ 0 216 202 252 ] + /Border [ 0 0 0 ] + /Action << /Subtype /URI /URI (books/bookvol10.pamphlet) >> + /Subtype /Link +/ANN pdfmark +gsave 10 dict begin +filled +0.537 0.247 0.902 nodecolor +0.537 0.247 0.902 nodecolor +newpath 202 252 moveto +0 252 lineto +0 216 lineto +202 216 lineto +closepath +fill +0.537 0.247 0.902 nodecolor +newpath 202 252 moveto +0 252 lineto +0 216 lineto +202 216 lineto +closepath +stroke +gsave 10 dict begin +0.000 0.000 0.000 nodecolor +7 229 moveto +(HomogeneousAggregate\(a:Type\)) +[10.08 6.96 10.8 6.96 6.72 6.24 6.96 6.24 6.96 6.96 5.52 9.84 6.96 7.2 4.8 6.24 6.72 6.24 3.84 6.24 4.56 6.24 3.84 7.2 6.96 6.96 6.24 4.56] +xshow +end grestore +end grestore +% BagAggregate(a:Type)->HomogeneousAggregate(a:Type) +newpath 101 288 moveto +101 280 101 271 101 262 curveto +stroke +gsave 10 dict begin +solid +1 setlinewidth +0.000 0.000 0.000 edgecolor +newpath 105 262 moveto +101 252 lineto +98 262 lineto +closepath +fill +0.000 0.000 0.000 edgecolor +newpath 105 262 moveto +101 252 lineto +98 262 lineto +closepath +stroke +end grestore +% Aggregate() +[ /Rect [ 59 144 143 180 ] + /Border [ 0 0 0 ] + /Action << /Subtype /URI /URI (books/bookvol10.pamphlet) >> + /Subtype /Link +/ANN pdfmark +gsave 10 dict begin +filled +0.537 0.247 0.902 nodecolor +0.537 0.247 0.902 nodecolor +newpath 143 180 moveto +59 180 lineto +59 144 lineto +143 144 lineto +closepath +fill +0.537 0.247 0.902 nodecolor +newpath 143 180 moveto +59 180 lineto +59 144 lineto +143 144 lineto +closepath +stroke +gsave 10 dict begin +0.000 0.000 0.000 nodecolor +66 157 moveto +(Aggregate\(\)) +[9.84 6.96 7.2 4.8 6.24 6.72 6.24 3.84 6.24 4.56 4.56] +xshow +end grestore +end grestore +% HomogeneousAggregate(a:Type)->Aggregate() +newpath 101 216 moveto +101 208 101 199 101 190 curveto +stroke +gsave 10 dict begin +solid +1 setlinewidth +0.000 0.000 0.000 edgecolor +newpath 105 190 moveto +101 180 lineto +98 190 lineto +closepath +fill +0.000 0.000 0.000 edgecolor +newpath 105 190 moveto +101 180 lineto +98 190 lineto +closepath +stroke +end grestore +% Type() +[ /Rect [ 74 72 128 108 ] + /Border [ 0 0 0 ] + /Action << /Subtype /URI /URI (books/bookvol10.pamphlet) >> + /Subtype /Link +/ANN pdfmark +gsave 10 dict begin +filled +0.537 0.247 0.902 nodecolor +0.537 0.247 0.902 nodecolor +newpath 128 108 moveto +74 108 lineto +74 72 lineto +128 72 lineto +closepath +fill +0.537 0.247 0.902 nodecolor +newpath 128 108 moveto +74 108 lineto +74 72 lineto +128 72 lineto +closepath +stroke +gsave 10 dict begin +0.000 0.000 0.000 nodecolor +82 85 moveto +(Type\(\)) +[7.2 6.96 6.96 6.24 4.56 4.56] +xshow +end grestore +end grestore +% Aggregate()->Type() +newpath 101 144 moveto +101 136 101 127 101 118 curveto +stroke +gsave 10 dict begin +solid +1 setlinewidth +0.000 0.000 0.000 edgecolor +newpath 105 118 moveto +101 108 lineto +98 118 lineto +closepath +fill +0.000 0.000 0.000 edgecolor +newpath 105 118 moveto +101 108 lineto +98 118 lineto +closepath +stroke +end grestore +% Category +[ /Rect [ 67 0 135 36 ] + /Border [ 0 0 0 ] + /Action << /Subtype /URI /URI (books/bookvol10.pamphlet) >> + /Subtype /Link +/ANN pdfmark +gsave 10 dict begin +filled +0.537 0.247 0.902 nodecolor +0.537 0.247 0.902 nodecolor +newpath 135 36 moveto +67 36 lineto +67 0 lineto +135 0 lineto +closepath +fill +0.537 0.247 0.902 nodecolor +newpath 135 36 moveto +67 36 lineto +67 0 lineto +135 0 lineto +closepath +stroke +gsave 10 dict begin +0.000 0.000 0.000 nodecolor +75 13 moveto +(Category) +[9.36 6.24 3.84 6.24 6.96 6.96 5.04 6.96] +xshow +end grestore +end grestore +% Type()->Category +newpath 101 72 moveto +101 64 101 55 101 46 curveto +stroke +gsave 10 dict begin +solid +1 setlinewidth +0.000 0.000 0.000 edgecolor +newpath 105 46 moveto +101 36 lineto +98 46 lineto +closepath +fill +0.000 0.000 0.000 edgecolor +newpath 105 46 moveto +101 36 lineto +98 46 lineto +closepath +stroke +end grestore +endpage +showpage +grestore +%%PageTrailer +%%EndPage: 1 +%%Trailer +%%Pages: 1 +end +restore +%%EOF diff --git a/books/ps/v10recursiveaggregate.ps b/books/ps/v10recursiveaggregate.ps new file mode 100644 index 0000000..444ef05 --- /dev/null +++ b/books/ps/v10recursiveaggregate.ps @@ -0,0 +1,452 @@ +%!PS-Adobe-2.0 +%%Creator: dot version 2.8 (Thu Sep 14 20:34:11 UTC 2006) +%%For: (root) root +%%Title: pic +%%Pages: (atend) +%%BoundingBox: 36 36 246 368 +%%EndComments +save +%%BeginProlog +/DotDict 200 dict def +DotDict begin + +/setupLatin1 { +mark +/EncodingVector 256 array def + EncodingVector 0 + +ISOLatin1Encoding 0 255 getinterval putinterval +EncodingVector 45 /hyphen put + +% Set up ISO Latin 1 character encoding +/starnetISO { + dup dup findfont dup length dict begin + { 1 index /FID ne { def }{ pop pop } ifelse + } forall + /Encoding EncodingVector def + currentdict end definefont +} def +/Times-Roman starnetISO def +/Times-Italic starnetISO def +/Times-Bold starnetISO def +/Times-BoldItalic starnetISO def +/Helvetica starnetISO def +/Helvetica-Oblique starnetISO def +/Helvetica-Bold starnetISO def +/Helvetica-BoldOblique starnetISO def +/Courier starnetISO def +/Courier-Oblique starnetISO def +/Courier-Bold starnetISO def +/Courier-BoldOblique starnetISO def +cleartomark +} bind def + +%%BeginResource: procset graphviz 0 0 +/coord-font-family /Times-Roman def +/default-font-family /Times-Roman def +/coordfont coord-font-family findfont 8 scalefont def + +/InvScaleFactor 1.0 def +/set_scale { + dup 1 exch div /InvScaleFactor exch def + dup scale +} bind def + +% styles +/solid { [] 0 setdash } bind def +/dashed { [9 InvScaleFactor mul dup ] 0 setdash } bind def +/dotted { [1 InvScaleFactor mul 6 InvScaleFactor mul] 0 setdash } bind def +/invis {/fill {newpath} def /stroke {newpath} def /show {pop newpath} def} bind def +/bold { 2 setlinewidth } bind def +/filled { } bind def +/unfilled { } bind def +/rounded { } bind def +/diagonals { } bind def + +% hooks for setting color +/nodecolor { sethsbcolor } bind def +/edgecolor { sethsbcolor } bind def +/graphcolor { sethsbcolor } bind def +/nopcolor {pop pop pop} bind def + +/beginpage { % i j npages + /npages exch def + /j exch def + /i exch def + /str 10 string def + npages 1 gt { + gsave + coordfont setfont + 0 0 moveto + (\() show i str cvs show (,) show j str cvs show (\)) show + grestore + } if +} bind def + +/set_font { + findfont exch + scalefont setfont +} def + +% draw aligned label in bounding box aligned to current point +/alignedtext { % width adj text + /text exch def + /adj exch def + /width exch def + gsave + width 0 gt { + text stringwidth pop adj mul 0 rmoveto + } if + [] 0 setdash + text show + grestore +} def + +/boxprim { % xcorner ycorner xsize ysize + 4 2 roll + moveto + 2 copy + exch 0 rlineto + 0 exch rlineto + pop neg 0 rlineto + closepath +} bind def + +/ellipse_path { + /ry exch def + /rx exch def + /y exch def + /x exch def + matrix currentmatrix + newpath + x y translate + rx ry scale + 0 0 1 0 360 arc + setmatrix +} bind def + +/endpage { showpage } bind def +/showpage { } def + +/layercolorseq + [ % layer color sequence - darkest to lightest + [0 0 0] + [.2 .8 .8] + [.4 .8 .8] + [.6 .8 .8] + [.8 .8 .8] + ] +def + +/layerlen layercolorseq length def + +/setlayer {/maxlayer exch def /curlayer exch def + layercolorseq curlayer 1 sub layerlen mod get + aload pop sethsbcolor + /nodecolor {nopcolor} def + /edgecolor {nopcolor} def + /graphcolor {nopcolor} def +} bind def + +/onlayer { curlayer ne {invis} if } def + +/onlayers { + /myupper exch def + /mylower exch def + curlayer mylower lt + curlayer myupper gt + or + {invis} if +} def + +/curlayer 0 def + +%%EndResource +%%EndProlog +%%BeginSetup +14 default-font-family set_font +1 setmiterlimit +% /arrowlength 10 def +% /arrowwidth 5 def + +% make sure pdfmark is harmless for PS-interpreters other than Distiller +/pdfmark where {pop} {userdict /pdfmark /cleartomark load put} ifelse +% make '<<' and '>>' safe on PS Level 1 devices +/languagelevel where {pop languagelevel}{1} ifelse +2 lt { + userdict (<<) cvn ([) cvn load put + userdict (>>) cvn ([) cvn load put +} if + +%%EndSetup +%%Page: 1 1 +%%PageBoundingBox: 36 36 246 368 +%%PageOrientation: Portrait +gsave +36 36 210 332 boxprim clip newpath +36 36 translate +0 0 1 beginpage +1.0000 set_scale +4 4 translate 0 rotate +0.167 0.600 1.000 graphcolor +0.167 0.600 1.000 graphcolor +newpath -6 -6 moveto +-6 330 lineto +208 330 lineto +208 -6 lineto +closepath +fill +0.167 0.600 1.000 graphcolor +newpath -6 -6 moveto +-6 330 lineto +208 330 lineto +208 -6 lineto +closepath +stroke +0.000 0.000 0.000 graphcolor +14.00 /Times-Roman set_font +% RecursiveAggregate(a:Type) +[ /Rect [ 13 288 189 324 ] + /Border [ 0 0 0 ] + /Action << /Subtype /URI /URI (books/bookvol10.pamphlet) >> + /Subtype /Link +/ANN pdfmark +gsave 10 dict begin +filled +0.537 0.247 0.902 nodecolor +0.537 0.247 0.902 nodecolor +newpath 189 324 moveto +13 324 lineto +13 288 lineto +189 288 lineto +closepath +fill +0.537 0.247 0.902 nodecolor +newpath 189 324 moveto +13 324 lineto +13 288 lineto +189 288 lineto +closepath +stroke +gsave 10 dict begin +0.000 0.000 0.000 nodecolor +20 301 moveto +(RecursiveAggregate\(a:Type\)) +[9.12 6.24 6.24 6.96 4.8 5.52 3.84 6.48 6.24 9.84 6.96 7.2 4.8 6.24 6.72 6.24 3.84 6.24 4.56 6.24 3.84 7.2 6.96 6.96 6.24 4.56] +xshow +end grestore +end grestore +% HomogeneousAggregate(a:Type) +[ /Rect [ 0 216 202 252 ] + /Border [ 0 0 0 ] + /Action << /Subtype /URI /URI (books/bookvol10.pamphlet) >> + /Subtype /Link +/ANN pdfmark +gsave 10 dict begin +filled +0.537 0.247 0.902 nodecolor +0.537 0.247 0.902 nodecolor +newpath 202 252 moveto +0 252 lineto +0 216 lineto +202 216 lineto +closepath +fill +0.537 0.247 0.902 nodecolor +newpath 202 252 moveto +0 252 lineto +0 216 lineto +202 216 lineto +closepath +stroke +gsave 10 dict begin +0.000 0.000 0.000 nodecolor +7 229 moveto +(HomogeneousAggregate\(a:Type\)) +[10.08 6.96 10.8 6.96 6.72 6.24 6.96 6.24 6.96 6.96 5.52 9.84 6.96 7.2 4.8 6.24 6.72 6.24 3.84 6.24 4.56 6.24 3.84 7.2 6.96 6.96 6.24 4.56] +xshow +end grestore +end grestore +% RecursiveAggregate(a:Type)->HomogeneousAggregate(a:Type) +newpath 101 288 moveto +101 280 101 271 101 262 curveto +stroke +gsave 10 dict begin +solid +1 setlinewidth +0.000 0.000 0.000 edgecolor +newpath 105 262 moveto +101 252 lineto +98 262 lineto +closepath +fill +0.000 0.000 0.000 edgecolor +newpath 105 262 moveto +101 252 lineto +98 262 lineto +closepath +stroke +end grestore +% Aggregate() +[ /Rect [ 59 144 143 180 ] + /Border [ 0 0 0 ] + /Action << /Subtype /URI /URI (books/bookvol10.pamphlet) >> + /Subtype /Link +/ANN pdfmark +gsave 10 dict begin +filled +0.537 0.247 0.902 nodecolor +0.537 0.247 0.902 nodecolor +newpath 143 180 moveto +59 180 lineto +59 144 lineto +143 144 lineto +closepath +fill +0.537 0.247 0.902 nodecolor +newpath 143 180 moveto +59 180 lineto +59 144 lineto +143 144 lineto +closepath +stroke +gsave 10 dict begin +0.000 0.000 0.000 nodecolor +66 157 moveto +(Aggregate\(\)) +[9.84 6.96 7.2 4.8 6.24 6.72 6.24 3.84 6.24 4.56 4.56] +xshow +end grestore +end grestore +% HomogeneousAggregate(a:Type)->Aggregate() +newpath 101 216 moveto +101 208 101 199 101 190 curveto +stroke +gsave 10 dict begin +solid +1 setlinewidth +0.000 0.000 0.000 edgecolor +newpath 105 190 moveto +101 180 lineto +98 190 lineto +closepath +fill +0.000 0.000 0.000 edgecolor +newpath 105 190 moveto +101 180 lineto +98 190 lineto +closepath +stroke +end grestore +% Type() +[ /Rect [ 74 72 128 108 ] + /Border [ 0 0 0 ] + /Action << /Subtype /URI /URI (books/bookvol10.pamphlet) >> + /Subtype /Link +/ANN pdfmark +gsave 10 dict begin +filled +0.537 0.247 0.902 nodecolor +0.537 0.247 0.902 nodecolor +newpath 128 108 moveto +74 108 lineto +74 72 lineto +128 72 lineto +closepath +fill +0.537 0.247 0.902 nodecolor +newpath 128 108 moveto +74 108 lineto +74 72 lineto +128 72 lineto +closepath +stroke +gsave 10 dict begin +0.000 0.000 0.000 nodecolor +82 85 moveto +(Type\(\)) +[7.2 6.96 6.96 6.24 4.56 4.56] +xshow +end grestore +end grestore +% Aggregate()->Type() +newpath 101 144 moveto +101 136 101 127 101 118 curveto +stroke +gsave 10 dict begin +solid +1 setlinewidth +0.000 0.000 0.000 edgecolor +newpath 105 118 moveto +101 108 lineto +98 118 lineto +closepath +fill +0.000 0.000 0.000 edgecolor +newpath 105 118 moveto +101 108 lineto +98 118 lineto +closepath +stroke +end grestore +% Category +[ /Rect [ 67 0 135 36 ] + /Border [ 0 0 0 ] + /Action << /Subtype /URI /URI (books/bookvol10.pamphlet) >> + /Subtype /Link +/ANN pdfmark +gsave 10 dict begin +filled +0.537 0.247 0.902 nodecolor +0.537 0.247 0.902 nodecolor +newpath 135 36 moveto +67 36 lineto +67 0 lineto +135 0 lineto +closepath +fill +0.537 0.247 0.902 nodecolor +newpath 135 36 moveto +67 36 lineto +67 0 lineto +135 0 lineto +closepath +stroke +gsave 10 dict begin +0.000 0.000 0.000 nodecolor +75 13 moveto +(Category) +[9.36 6.24 3.84 6.24 6.96 6.96 5.04 6.96] +xshow +end grestore +end grestore +% Type()->Category +newpath 101 72 moveto +101 64 101 55 101 46 curveto +stroke +gsave 10 dict begin +solid +1 setlinewidth +0.000 0.000 0.000 edgecolor +newpath 105 46 moveto +101 36 lineto +98 46 lineto +closepath +fill +0.000 0.000 0.000 edgecolor +newpath 105 46 moveto +101 36 lineto +98 46 lineto +closepath +stroke +end grestore +endpage +showpage +grestore +%%PageTrailer +%%EndPage: 1 +%%Trailer +%%Pages: 1 +end +restore +%%EOF diff --git a/books/ps/v10retractableto.ps b/books/ps/v10retractableto.ps new file mode 100644 index 0000000..dd4dde1 --- /dev/null +++ b/books/ps/v10retractableto.ps @@ -0,0 +1,299 @@ +%!PS-Adobe-2.0 +%%Creator: dot version 2.8 (Thu Sep 14 20:34:11 UTC 2006) +%%For: (root) root +%%Title: pic +%%Pages: (atend) +%%BoundingBox: 36 36 184 152 +%%EndComments +save +%%BeginProlog +/DotDict 200 dict def +DotDict begin + +/setupLatin1 { +mark +/EncodingVector 256 array def + EncodingVector 0 + +ISOLatin1Encoding 0 255 getinterval putinterval +EncodingVector 45 /hyphen put + +% Set up ISO Latin 1 character encoding +/starnetISO { + dup dup findfont dup length dict begin + { 1 index /FID ne { def }{ pop pop } ifelse + } forall + /Encoding EncodingVector def + currentdict end definefont +} def +/Times-Roman starnetISO def +/Times-Italic starnetISO def +/Times-Bold starnetISO def +/Times-BoldItalic starnetISO def +/Helvetica starnetISO def +/Helvetica-Oblique starnetISO def +/Helvetica-Bold starnetISO def +/Helvetica-BoldOblique starnetISO def +/Courier starnetISO def +/Courier-Oblique starnetISO def +/Courier-Bold starnetISO def +/Courier-BoldOblique starnetISO def +cleartomark +} bind def + +%%BeginResource: procset graphviz 0 0 +/coord-font-family /Times-Roman def +/default-font-family /Times-Roman def +/coordfont coord-font-family findfont 8 scalefont def + +/InvScaleFactor 1.0 def +/set_scale { + dup 1 exch div /InvScaleFactor exch def + dup scale +} bind def + +% styles +/solid { [] 0 setdash } bind def +/dashed { [9 InvScaleFactor mul dup ] 0 setdash } bind def +/dotted { [1 InvScaleFactor mul 6 InvScaleFactor mul] 0 setdash } bind def +/invis {/fill {newpath} def /stroke {newpath} def /show {pop newpath} def} bind def +/bold { 2 setlinewidth } bind def +/filled { } bind def +/unfilled { } bind def +/rounded { } bind def +/diagonals { } bind def + +% hooks for setting color +/nodecolor { sethsbcolor } bind def +/edgecolor { sethsbcolor } bind def +/graphcolor { sethsbcolor } bind def +/nopcolor {pop pop pop} bind def + +/beginpage { % i j npages + /npages exch def + /j exch def + /i exch def + /str 10 string def + npages 1 gt { + gsave + coordfont setfont + 0 0 moveto + (\() show i str cvs show (,) show j str cvs show (\)) show + grestore + } if +} bind def + +/set_font { + findfont exch + scalefont setfont +} def + +% draw aligned label in bounding box aligned to current point +/alignedtext { % width adj text + /text exch def + /adj exch def + /width exch def + gsave + width 0 gt { + text stringwidth pop adj mul 0 rmoveto + } if + [] 0 setdash + text show + grestore +} def + +/boxprim { % xcorner ycorner xsize ysize + 4 2 roll + moveto + 2 copy + exch 0 rlineto + 0 exch rlineto + pop neg 0 rlineto + closepath +} bind def + +/ellipse_path { + /ry exch def + /rx exch def + /y exch def + /x exch def + matrix currentmatrix + newpath + x y translate + rx ry scale + 0 0 1 0 360 arc + setmatrix +} bind def + +/endpage { showpage } bind def +/showpage { } def + +/layercolorseq + [ % layer color sequence - darkest to lightest + [0 0 0] + [.2 .8 .8] + [.4 .8 .8] + [.6 .8 .8] + [.8 .8 .8] + ] +def + +/layerlen layercolorseq length def + +/setlayer {/maxlayer exch def /curlayer exch def + layercolorseq curlayer 1 sub layerlen mod get + aload pop sethsbcolor + /nodecolor {nopcolor} def + /edgecolor {nopcolor} def + /graphcolor {nopcolor} def +} bind def + +/onlayer { curlayer ne {invis} if } def + +/onlayers { + /myupper exch def + /mylower exch def + curlayer mylower lt + curlayer myupper gt + or + {invis} if +} def + +/curlayer 0 def + +%%EndResource +%%EndProlog +%%BeginSetup +14 default-font-family set_font +1 setmiterlimit +% /arrowlength 10 def +% /arrowwidth 5 def + +% make sure pdfmark is harmless for PS-interpreters other than Distiller +/pdfmark where {pop} {userdict /pdfmark /cleartomark load put} ifelse +% make '<<' and '>>' safe on PS Level 1 devices +/languagelevel where {pop languagelevel}{1} ifelse +2 lt { + userdict (<<) cvn ([) cvn load put + userdict (>>) cvn ([) cvn load put +} if + +%%EndSetup +%%Page: 1 1 +%%PageBoundingBox: 36 36 184 152 +%%PageOrientation: Portrait +gsave +36 36 148 116 boxprim clip newpath +36 36 translate +0 0 1 beginpage +1.0000 set_scale +4 4 translate 0 rotate +0.167 0.600 1.000 graphcolor +0.167 0.600 1.000 graphcolor +newpath -6 -6 moveto +-6 114 lineto +146 114 lineto +146 -6 lineto +closepath +fill +0.167 0.600 1.000 graphcolor +newpath -6 -6 moveto +-6 114 lineto +146 114 lineto +146 -6 lineto +closepath +stroke +0.000 0.000 0.000 graphcolor +14.00 /Times-Roman set_font +% RetractableTo(a:Type) +[ /Rect [ 0 72 140 108 ] + /Border [ 0 0 0 ] + /Action << /Subtype /URI /URI (books/bookvol10.pamphlet) >> + /Subtype /Link +/ANN pdfmark +gsave 10 dict begin +filled +0.537 0.247 0.902 nodecolor +0.537 0.247 0.902 nodecolor +newpath 140 108 moveto +0 108 lineto +0 72 lineto +140 72 lineto +closepath +fill +0.537 0.247 0.902 nodecolor +newpath 140 108 moveto +0 108 lineto +0 72 lineto +140 72 lineto +closepath +stroke +gsave 10 dict begin +0.000 0.000 0.000 nodecolor +7 85 moveto +(RetractableTo\(a:Type\)) +[9.12 6 3.84 4.8 6.24 6.24 4.08 6.24 6.96 3.84 6.24 7.44 6.96 4.56 6.24 3.84 7.2 6.96 6.96 6.24 4.56] +xshow +end grestore +end grestore +% Category +[ /Rect [ 36 0 104 36 ] + /Border [ 0 0 0 ] + /Action << /Subtype /URI /URI (books/bookvol10.pamphlet) >> + /Subtype /Link +/ANN pdfmark +gsave 10 dict begin +filled +0.537 0.247 0.902 nodecolor +0.537 0.247 0.902 nodecolor +newpath 104 36 moveto +36 36 lineto +36 0 lineto +104 0 lineto +closepath +fill +0.537 0.247 0.902 nodecolor +newpath 104 36 moveto +36 36 lineto +36 0 lineto +104 0 lineto +closepath +stroke +gsave 10 dict begin +0.000 0.000 0.000 nodecolor +44 13 moveto +(Category) +[9.36 6.24 3.84 6.24 6.96 6.96 5.04 6.96] +xshow +end grestore +end grestore +% RetractableTo(a:Type)->Category +newpath 70 72 moveto +70 64 70 55 70 46 curveto +stroke +gsave 10 dict begin +solid +1 setlinewidth +0.000 0.000 0.000 edgecolor +newpath 74 46 moveto +70 36 lineto +67 46 lineto +closepath +fill +0.000 0.000 0.000 edgecolor +newpath 74 46 moveto +70 36 lineto +67 46 lineto +closepath +stroke +end grestore +endpage +showpage +grestore +%%PageTrailer +%%EndPage: 1 +%%Trailer +%%Pages: 1 +end +restore +%%EOF diff --git a/books/ps/v10stackaggregate.ps b/books/ps/v10stackaggregate.ps new file mode 100644 index 0000000..bd14037 --- /dev/null +++ b/books/ps/v10stackaggregate.ps @@ -0,0 +1,503 @@ +%!PS-Adobe-2.0 +%%Creator: dot version 2.8 (Thu Sep 14 20:34:11 UTC 2006) +%%For: (root) root +%%Title: pic +%%Pages: (atend) +%%BoundingBox: 36 36 246 440 +%%EndComments +save +%%BeginProlog +/DotDict 200 dict def +DotDict begin + +/setupLatin1 { +mark +/EncodingVector 256 array def + EncodingVector 0 + +ISOLatin1Encoding 0 255 getinterval putinterval +EncodingVector 45 /hyphen put + +% Set up ISO Latin 1 character encoding +/starnetISO { + dup dup findfont dup length dict begin + { 1 index /FID ne { def }{ pop pop } ifelse + } forall + /Encoding EncodingVector def + currentdict end definefont +} def +/Times-Roman starnetISO def +/Times-Italic starnetISO def +/Times-Bold starnetISO def +/Times-BoldItalic starnetISO def +/Helvetica starnetISO def +/Helvetica-Oblique starnetISO def +/Helvetica-Bold starnetISO def +/Helvetica-BoldOblique starnetISO def +/Courier starnetISO def +/Courier-Oblique starnetISO def +/Courier-Bold starnetISO def +/Courier-BoldOblique starnetISO def +cleartomark +} bind def + +%%BeginResource: procset graphviz 0 0 +/coord-font-family /Times-Roman def +/default-font-family /Times-Roman def +/coordfont coord-font-family findfont 8 scalefont def + +/InvScaleFactor 1.0 def +/set_scale { + dup 1 exch div /InvScaleFactor exch def + dup scale +} bind def + +% styles +/solid { [] 0 setdash } bind def +/dashed { [9 InvScaleFactor mul dup ] 0 setdash } bind def +/dotted { [1 InvScaleFactor mul 6 InvScaleFactor mul] 0 setdash } bind def +/invis {/fill {newpath} def /stroke {newpath} def /show {pop newpath} def} bind def +/bold { 2 setlinewidth } bind def +/filled { } bind def +/unfilled { } bind def +/rounded { } bind def +/diagonals { } bind def + +% hooks for setting color +/nodecolor { sethsbcolor } bind def +/edgecolor { sethsbcolor } bind def +/graphcolor { sethsbcolor } bind def +/nopcolor {pop pop pop} bind def + +/beginpage { % i j npages + /npages exch def + /j exch def + /i exch def + /str 10 string def + npages 1 gt { + gsave + coordfont setfont + 0 0 moveto + (\() show i str cvs show (,) show j str cvs show (\)) show + grestore + } if +} bind def + +/set_font { + findfont exch + scalefont setfont +} def + +% draw aligned label in bounding box aligned to current point +/alignedtext { % width adj text + /text exch def + /adj exch def + /width exch def + gsave + width 0 gt { + text stringwidth pop adj mul 0 rmoveto + } if + [] 0 setdash + text show + grestore +} def + +/boxprim { % xcorner ycorner xsize ysize + 4 2 roll + moveto + 2 copy + exch 0 rlineto + 0 exch rlineto + pop neg 0 rlineto + closepath +} bind def + +/ellipse_path { + /ry exch def + /rx exch def + /y exch def + /x exch def + matrix currentmatrix + newpath + x y translate + rx ry scale + 0 0 1 0 360 arc + setmatrix +} bind def + +/endpage { showpage } bind def +/showpage { } def + +/layercolorseq + [ % layer color sequence - darkest to lightest + [0 0 0] + [.2 .8 .8] + [.4 .8 .8] + [.6 .8 .8] + [.8 .8 .8] + ] +def + +/layerlen layercolorseq length def + +/setlayer {/maxlayer exch def /curlayer exch def + layercolorseq curlayer 1 sub layerlen mod get + aload pop sethsbcolor + /nodecolor {nopcolor} def + /edgecolor {nopcolor} def + /graphcolor {nopcolor} def +} bind def + +/onlayer { curlayer ne {invis} if } def + +/onlayers { + /myupper exch def + /mylower exch def + curlayer mylower lt + curlayer myupper gt + or + {invis} if +} def + +/curlayer 0 def + +%%EndResource +%%EndProlog +%%BeginSetup +14 default-font-family set_font +1 setmiterlimit +% /arrowlength 10 def +% /arrowwidth 5 def + +% make sure pdfmark is harmless for PS-interpreters other than Distiller +/pdfmark where {pop} {userdict /pdfmark /cleartomark load put} ifelse +% make '<<' and '>>' safe on PS Level 1 devices +/languagelevel where {pop languagelevel}{1} ifelse +2 lt { + userdict (<<) cvn ([) cvn load put + userdict (>>) cvn ([) cvn load put +} if + +%%EndSetup +%%Page: 1 1 +%%PageBoundingBox: 36 36 246 440 +%%PageOrientation: Portrait +gsave +36 36 210 404 boxprim clip newpath +36 36 translate +0 0 1 beginpage +1.0000 set_scale +4 4 translate 0 rotate +0.167 0.600 1.000 graphcolor +0.167 0.600 1.000 graphcolor +newpath -6 -6 moveto +-6 402 lineto +208 402 lineto +208 -6 lineto +closepath +fill +0.167 0.600 1.000 graphcolor +newpath -6 -6 moveto +-6 402 lineto +208 402 lineto +208 -6 lineto +closepath +stroke +0.000 0.000 0.000 graphcolor +14.00 /Times-Roman set_font +% StackAggregate(a:Type) +[ /Rect [ 25 360 177 396 ] + /Border [ 0 0 0 ] + /Action << /Subtype /URI /URI (books/bookvol10.pamphlet) >> + /Subtype /Link +/ANN pdfmark +gsave 10 dict begin +filled +0.537 0.247 0.902 nodecolor +0.537 0.247 0.902 nodecolor +newpath 177 396 moveto +25 396 lineto +25 360 lineto +177 360 lineto +closepath +fill +0.537 0.247 0.902 nodecolor +newpath 177 396 moveto +25 396 lineto +25 360 lineto +177 360 lineto +closepath +stroke +gsave 10 dict begin +0.000 0.000 0.000 nodecolor +33 373 moveto +(StackAggregate\(a:Type\)) +[7.44 4.08 6.24 6 6.96 9.84 6.96 7.2 4.8 6.24 6.72 6.24 3.84 6.24 4.56 6.24 3.84 7.2 6.96 6.96 6.24 4.56] +xshow +end grestore +end grestore +% BagAggregate(a:Type) +[ /Rect [ 29 288 173 324 ] + /Border [ 0 0 0 ] + /Action << /Subtype /URI /URI (books/bookvol10.pamphlet) >> + /Subtype /Link +/ANN pdfmark +gsave 10 dict begin +filled +0.537 0.247 0.902 nodecolor +0.537 0.247 0.902 nodecolor +newpath 173 324 moveto +29 324 lineto +29 288 lineto +173 288 lineto +closepath +fill +0.537 0.247 0.902 nodecolor +newpath 173 324 moveto +29 324 lineto +29 288 lineto +173 288 lineto +closepath +stroke +gsave 10 dict begin +0.000 0.000 0.000 nodecolor +36 301 moveto +(BagAggregate\(a:Type\)) +[9.36 6.24 6.96 9.84 6.96 7.2 4.8 6.24 6.72 6.24 3.84 6.24 4.56 6.24 3.84 7.2 6.96 6.96 6.24 4.56] +xshow +end grestore +end grestore +% StackAggregate(a:Type)->BagAggregate(a:Type) +newpath 101 360 moveto +101 352 101 343 101 334 curveto +stroke +gsave 10 dict begin +solid +1 setlinewidth +0.000 0.000 0.000 edgecolor +newpath 105 334 moveto +101 324 lineto +98 334 lineto +closepath +fill +0.000 0.000 0.000 edgecolor +newpath 105 334 moveto +101 324 lineto +98 334 lineto +closepath +stroke +end grestore +% HomogeneousAggregate(a:Type) +[ /Rect [ 0 216 202 252 ] + /Border [ 0 0 0 ] + /Action << /Subtype /URI /URI (books/bookvol10.pamphlet) >> + /Subtype /Link +/ANN pdfmark +gsave 10 dict begin +filled +0.537 0.247 0.902 nodecolor +0.537 0.247 0.902 nodecolor +newpath 202 252 moveto +0 252 lineto +0 216 lineto +202 216 lineto +closepath +fill +0.537 0.247 0.902 nodecolor +newpath 202 252 moveto +0 252 lineto +0 216 lineto +202 216 lineto +closepath +stroke +gsave 10 dict begin +0.000 0.000 0.000 nodecolor +7 229 moveto +(HomogeneousAggregate\(a:Type\)) +[10.08 6.96 10.8 6.96 6.72 6.24 6.96 6.24 6.96 6.96 5.52 9.84 6.96 7.2 4.8 6.24 6.72 6.24 3.84 6.24 4.56 6.24 3.84 7.2 6.96 6.96 6.24 4.56] +xshow +end grestore +end grestore +% BagAggregate(a:Type)->HomogeneousAggregate(a:Type) +newpath 101 288 moveto +101 280 101 271 101 262 curveto +stroke +gsave 10 dict begin +solid +1 setlinewidth +0.000 0.000 0.000 edgecolor +newpath 105 262 moveto +101 252 lineto +98 262 lineto +closepath +fill +0.000 0.000 0.000 edgecolor +newpath 105 262 moveto +101 252 lineto +98 262 lineto +closepath +stroke +end grestore +% Aggregate() +[ /Rect [ 59 144 143 180 ] + /Border [ 0 0 0 ] + /Action << /Subtype /URI /URI (books/bookvol10.pamphlet) >> + /Subtype /Link +/ANN pdfmark +gsave 10 dict begin +filled +0.537 0.247 0.902 nodecolor +0.537 0.247 0.902 nodecolor +newpath 143 180 moveto +59 180 lineto +59 144 lineto +143 144 lineto +closepath +fill +0.537 0.247 0.902 nodecolor +newpath 143 180 moveto +59 180 lineto +59 144 lineto +143 144 lineto +closepath +stroke +gsave 10 dict begin +0.000 0.000 0.000 nodecolor +66 157 moveto +(Aggregate\(\)) +[9.84 6.96 7.2 4.8 6.24 6.72 6.24 3.84 6.24 4.56 4.56] +xshow +end grestore +end grestore +% HomogeneousAggregate(a:Type)->Aggregate() +newpath 101 216 moveto +101 208 101 199 101 190 curveto +stroke +gsave 10 dict begin +solid +1 setlinewidth +0.000 0.000 0.000 edgecolor +newpath 105 190 moveto +101 180 lineto +98 190 lineto +closepath +fill +0.000 0.000 0.000 edgecolor +newpath 105 190 moveto +101 180 lineto +98 190 lineto +closepath +stroke +end grestore +% Type() +[ /Rect [ 74 72 128 108 ] + /Border [ 0 0 0 ] + /Action << /Subtype /URI /URI (books/bookvol10.pamphlet) >> + /Subtype /Link +/ANN pdfmark +gsave 10 dict begin +filled +0.537 0.247 0.902 nodecolor +0.537 0.247 0.902 nodecolor +newpath 128 108 moveto +74 108 lineto +74 72 lineto +128 72 lineto +closepath +fill +0.537 0.247 0.902 nodecolor +newpath 128 108 moveto +74 108 lineto +74 72 lineto +128 72 lineto +closepath +stroke +gsave 10 dict begin +0.000 0.000 0.000 nodecolor +82 85 moveto +(Type\(\)) +[7.2 6.96 6.96 6.24 4.56 4.56] +xshow +end grestore +end grestore +% Aggregate()->Type() +newpath 101 144 moveto +101 136 101 127 101 118 curveto +stroke +gsave 10 dict begin +solid +1 setlinewidth +0.000 0.000 0.000 edgecolor +newpath 105 118 moveto +101 108 lineto +98 118 lineto +closepath +fill +0.000 0.000 0.000 edgecolor +newpath 105 118 moveto +101 108 lineto +98 118 lineto +closepath +stroke +end grestore +% Category +[ /Rect [ 67 0 135 36 ] + /Border [ 0 0 0 ] + /Action << /Subtype /URI /URI (books/bookvol10.pamphlet) >> + /Subtype /Link +/ANN pdfmark +gsave 10 dict begin +filled +0.537 0.247 0.902 nodecolor +0.537 0.247 0.902 nodecolor +newpath 135 36 moveto +67 36 lineto +67 0 lineto +135 0 lineto +closepath +fill +0.537 0.247 0.902 nodecolor +newpath 135 36 moveto +67 36 lineto +67 0 lineto +135 0 lineto +closepath +stroke +gsave 10 dict begin +0.000 0.000 0.000 nodecolor +75 13 moveto +(Category) +[9.36 6.24 3.84 6.24 6.96 6.96 5.04 6.96] +xshow +end grestore +end grestore +% Type()->Category +newpath 101 72 moveto +101 64 101 55 101 46 curveto +stroke +gsave 10 dict begin +solid +1 setlinewidth +0.000 0.000 0.000 edgecolor +newpath 105 46 moveto +101 36 lineto +98 46 lineto +closepath +fill +0.000 0.000 0.000 edgecolor +newpath 105 46 moveto +101 36 lineto +98 46 lineto +closepath +stroke +end grestore +endpage +showpage +grestore +%%PageTrailer +%%EndPage: 1 +%%Trailer +%%Pages: 1 +end +restore +%%EOF diff --git a/books/ps/v10streamaggregate.ps b/books/ps/v10streamaggregate.ps new file mode 100644 index 0000000..a8979e9 --- /dev/null +++ b/books/ps/v10streamaggregate.ps @@ -0,0 +1,646 @@ +%!PS-Adobe-2.0 +%%Creator: dot version 2.8 (Thu Sep 14 20:34:11 UTC 2006) +%%For: (root) root +%%Title: pic +%%Pages: (atend) +%%BoundingBox: 36 36 574 440 +%%EndComments +save +%%BeginProlog +/DotDict 200 dict def +DotDict begin + +/setupLatin1 { +mark +/EncodingVector 256 array def + EncodingVector 0 + +ISOLatin1Encoding 0 255 getinterval putinterval +EncodingVector 45 /hyphen put + +% Set up ISO Latin 1 character encoding +/starnetISO { + dup dup findfont dup length dict begin + { 1 index /FID ne { def }{ pop pop } ifelse + } forall + /Encoding EncodingVector def + currentdict end definefont +} def +/Times-Roman starnetISO def +/Times-Italic starnetISO def +/Times-Bold starnetISO def +/Times-BoldItalic starnetISO def +/Helvetica starnetISO def +/Helvetica-Oblique starnetISO def +/Helvetica-Bold starnetISO def +/Helvetica-BoldOblique starnetISO def +/Courier starnetISO def +/Courier-Oblique starnetISO def +/Courier-Bold starnetISO def +/Courier-BoldOblique starnetISO def +cleartomark +} bind def + +%%BeginResource: procset graphviz 0 0 +/coord-font-family /Times-Roman def +/default-font-family /Times-Roman def +/coordfont coord-font-family findfont 8 scalefont def + +/InvScaleFactor 1.0 def +/set_scale { + dup 1 exch div /InvScaleFactor exch def + dup scale +} bind def + +% styles +/solid { [] 0 setdash } bind def +/dashed { [9 InvScaleFactor mul dup ] 0 setdash } bind def +/dotted { [1 InvScaleFactor mul 6 InvScaleFactor mul] 0 setdash } bind def +/invis {/fill {newpath} def /stroke {newpath} def /show {pop newpath} def} bind def +/bold { 2 setlinewidth } bind def +/filled { } bind def +/unfilled { } bind def +/rounded { } bind def +/diagonals { } bind def + +% hooks for setting color +/nodecolor { sethsbcolor } bind def +/edgecolor { sethsbcolor } bind def +/graphcolor { sethsbcolor } bind def +/nopcolor {pop pop pop} bind def + +/beginpage { % i j npages + /npages exch def + /j exch def + /i exch def + /str 10 string def + npages 1 gt { + gsave + coordfont setfont + 0 0 moveto + (\() show i str cvs show (,) show j str cvs show (\)) show + grestore + } if +} bind def + +/set_font { + findfont exch + scalefont setfont +} def + +% draw aligned label in bounding box aligned to current point +/alignedtext { % width adj text + /text exch def + /adj exch def + /width exch def + gsave + width 0 gt { + text stringwidth pop adj mul 0 rmoveto + } if + [] 0 setdash + text show + grestore +} def + +/boxprim { % xcorner ycorner xsize ysize + 4 2 roll + moveto + 2 copy + exch 0 rlineto + 0 exch rlineto + pop neg 0 rlineto + closepath +} bind def + +/ellipse_path { + /ry exch def + /rx exch def + /y exch def + /x exch def + matrix currentmatrix + newpath + x y translate + rx ry scale + 0 0 1 0 360 arc + setmatrix +} bind def + +/endpage { showpage } bind def +/showpage { } def + +/layercolorseq + [ % layer color sequence - darkest to lightest + [0 0 0] + [.2 .8 .8] + [.4 .8 .8] + [.6 .8 .8] + [.8 .8 .8] + ] +def + +/layerlen layercolorseq length def + +/setlayer {/maxlayer exch def /curlayer exch def + layercolorseq curlayer 1 sub layerlen mod get + aload pop sethsbcolor + /nodecolor {nopcolor} def + /edgecolor {nopcolor} def + /graphcolor {nopcolor} def +} bind def + +/onlayer { curlayer ne {invis} if } def + +/onlayers { + /myupper exch def + /mylower exch def + curlayer mylower lt + curlayer myupper gt + or + {invis} if +} def + +/curlayer 0 def + +%%EndResource +%%EndProlog +%%BeginSetup +14 default-font-family set_font +1 setmiterlimit +% /arrowlength 10 def +% /arrowwidth 5 def + +% make sure pdfmark is harmless for PS-interpreters other than Distiller +/pdfmark where {pop} {userdict /pdfmark /cleartomark load put} ifelse +% make '<<' and '>>' safe on PS Level 1 devices +/languagelevel where {pop languagelevel}{1} ifelse +2 lt { + userdict (<<) cvn ([) cvn load put + userdict (>>) cvn ([) cvn load put +} if + +%%EndSetup +%%Page: 1 1 +%%PageBoundingBox: 36 36 574 440 +%%PageOrientation: Portrait +gsave +36 36 538 404 boxprim clip newpath +36 36 translate +0 0 1 beginpage +1.0000 set_scale +4 4 translate 0 rotate +0.167 0.600 1.000 graphcolor +0.167 0.600 1.000 graphcolor +newpath -6 -6 moveto +-6 402 lineto +536 402 lineto +536 -6 lineto +closepath +fill +0.167 0.600 1.000 graphcolor +newpath -6 -6 moveto +-6 402 lineto +536 402 lineto +536 -6 lineto +closepath +stroke +0.000 0.000 0.000 graphcolor +14.00 /Times-Roman set_font +% StreamAggregate(a:Type) +[ /Rect [ 120 360 280 396 ] + /Border [ 0 0 0 ] + /Action << /Subtype /URI /URI (books/bookvol10.pamphlet) >> + /Subtype /Link +/ANN pdfmark +gsave 10 dict begin +filled +0.537 0.247 0.902 nodecolor +0.537 0.247 0.902 nodecolor +newpath 280 396 moveto +120 396 lineto +120 360 lineto +280 360 lineto +closepath +fill +0.537 0.247 0.902 nodecolor +newpath 280 396 moveto +120 396 lineto +120 360 lineto +280 360 lineto +closepath +stroke +gsave 10 dict begin +0.000 0.000 0.000 nodecolor +127 373 moveto +(StreamAggregate\(a:Type\)) +[7.44 3.84 4.8 6.24 6.24 10.8 9.84 6.96 7.2 4.8 6.24 6.72 6.24 3.84 6.24 4.56 6.24 3.84 7.2 6.96 6.96 6.24 4.56] +xshow +end grestore +end grestore +% RecursiveAggregate(a:Type) +[ /Rect [ 0 144 176 180 ] + /Border [ 0 0 0 ] + /Action << /Subtype /URI /URI (books/bookvol10.pamphlet) >> + /Subtype /Link +/ANN pdfmark +gsave 10 dict begin +filled +0.537 0.247 0.902 nodecolor +0.537 0.247 0.902 nodecolor +newpath 176 180 moveto +0 180 lineto +0 144 lineto +176 144 lineto +closepath +fill +0.537 0.247 0.902 nodecolor +newpath 176 180 moveto +0 180 lineto +0 144 lineto +176 144 lineto +closepath +stroke +gsave 10 dict begin +0.000 0.000 0.000 nodecolor +7 157 moveto +(RecursiveAggregate\(a:Type\)) +[9.12 6.24 6.24 6.96 4.8 5.52 3.84 6.48 6.24 9.84 6.96 7.2 4.8 6.24 6.72 6.24 3.84 6.24 4.56 6.24 3.84 7.2 6.96 6.96 6.24 4.56] +xshow +end grestore +end grestore +% StreamAggregate(a:Type)->RecursiveAggregate(a:Type) +newpath 191 360 moveto +171 322 126 234 102 189 curveto +stroke +gsave 10 dict begin +solid +1 setlinewidth +0.000 0.000 0.000 edgecolor +newpath 105 187 moveto +97 180 lineto +99 190 lineto +closepath +fill +0.000 0.000 0.000 edgecolor +newpath 105 187 moveto +97 180 lineto +99 190 lineto +closepath +stroke +end grestore +% LinearAggregate(a:Type) +[ /Rect [ 204 288 362 324 ] + /Border [ 0 0 0 ] + /Action << /Subtype /URI /URI (books/bookvol10.pamphlet) >> + /Subtype /Link +/ANN pdfmark +gsave 10 dict begin +filled +0.537 0.247 0.902 nodecolor +0.537 0.247 0.902 nodecolor +newpath 362 324 moveto +204 324 lineto +204 288 lineto +362 288 lineto +closepath +fill +0.537 0.247 0.902 nodecolor +newpath 362 324 moveto +204 324 lineto +204 288 lineto +362 288 lineto +closepath +stroke +gsave 10 dict begin +0.000 0.000 0.000 nodecolor +212 301 moveto +(LinearAggregate\(a:Type\)) +[8.64 3.84 6.96 6.24 6.24 4.8 9.84 6.96 7.2 4.8 6.24 6.72 6.24 3.84 6.24 4.56 6.24 3.84 7.2 6.96 6.96 6.24 4.56] +xshow +end grestore +end grestore +% StreamAggregate(a:Type)->LinearAggregate(a:Type) +newpath 221 360 moveto +231 351 244 340 255 331 curveto +stroke +gsave 10 dict begin +solid +1 setlinewidth +0.000 0.000 0.000 edgecolor +newpath 258 333 moveto +263 324 lineto +253 328 lineto +closepath +fill +0.000 0.000 0.000 edgecolor +newpath 258 333 moveto +263 324 lineto +253 328 lineto +closepath +stroke +end grestore +% HomogeneousAggregate(a:Type) +[ /Rect [ 217 72 419 108 ] + /Border [ 0 0 0 ] + /Action << /Subtype /URI /URI (books/bookvol10.pamphlet) >> + /Subtype /Link +/ANN pdfmark +gsave 10 dict begin +filled +0.537 0.247 0.902 nodecolor +0.537 0.247 0.902 nodecolor +newpath 419 108 moveto +217 108 lineto +217 72 lineto +419 72 lineto +closepath +fill +0.537 0.247 0.902 nodecolor +newpath 419 108 moveto +217 108 lineto +217 72 lineto +419 72 lineto +closepath +stroke +gsave 10 dict begin +0.000 0.000 0.000 nodecolor +224 85 moveto +(HomogeneousAggregate\(a:Type\)) +[10.08 6.96 10.8 6.96 6.72 6.24 6.96 6.24 6.96 6.96 5.52 9.84 6.96 7.2 4.8 6.24 6.72 6.24 3.84 6.24 4.56 6.24 3.84 7.2 6.96 6.96 6.24 4.56] +xshow +end grestore +end grestore +% RecursiveAggregate(a:Type)->HomogeneousAggregate(a:Type) +newpath 146 144 moveto +178 134 218 121 251 111 curveto +stroke +gsave 10 dict begin +solid +1 setlinewidth +0.000 0.000 0.000 edgecolor +newpath 252 114 moveto +261 108 lineto +250 108 lineto +closepath +fill +0.000 0.000 0.000 edgecolor +newpath 252 114 moveto +261 108 lineto +250 108 lineto +closepath +stroke +end grestore +% IndexedAggregate(b:Integer,a:Type) +[ /Rect [ 174 216 392 252 ] + /Border [ 0 0 0 ] + /Action << /Subtype /URI /URI (books/bookvol10.pamphlet) >> + /Subtype /Link +/ANN pdfmark +gsave 10 dict begin +filled +0.404 0.667 0.545 nodecolor +0.404 0.667 0.545 nodecolor +newpath 392 252 moveto +174 252 lineto +174 216 lineto +392 216 lineto +closepath +fill +0.404 0.667 0.545 nodecolor +newpath 392 252 moveto +174 252 lineto +174 216 lineto +392 216 lineto +closepath +stroke +gsave 10 dict begin +0.000 0.000 0.000 nodecolor +181 229 moveto +(IndexedAggregate\(b:Integer,a:Type\)) +[4.56 6.96 6.96 5.76 6.48 6.24 6.96 9.84 6.96 7.2 4.8 6.24 6.72 6.24 3.84 6.24 4.56 6.96 3.84 4.56 6.96 3.84 6.24 6.72 6.24 4.32 3.6 6.24 3.84 7.2 6.96 6.96 6.24 4.56] +xshow +end grestore +end grestore +% LinearAggregate(a:Type)->IndexedAggregate(b:Integer,a:Type) +newpath 283 288 moveto +283 280 283 271 283 262 curveto +stroke +gsave 10 dict begin +solid +1 setlinewidth +0.000 0.000 0.000 edgecolor +newpath 287 262 moveto +283 252 lineto +280 262 lineto +closepath +fill +0.000 0.000 0.000 edgecolor +newpath 287 262 moveto +283 252 lineto +280 262 lineto +closepath +stroke +end grestore +% Collection(a:Type) +[ /Rect [ 410 216 530 252 ] + /Border [ 0 0 0 ] + /Action << /Subtype /URI /URI (books/bookvol10.pamphlet) >> + /Subtype /Link +/ANN pdfmark +gsave 10 dict begin +filled +0.537 0.247 0.902 nodecolor +0.537 0.247 0.902 nodecolor +newpath 530 252 moveto +410 252 lineto +410 216 lineto +530 216 lineto +closepath +fill +0.537 0.247 0.902 nodecolor +newpath 530 252 moveto +410 252 lineto +410 216 lineto +530 216 lineto +closepath +stroke +gsave 10 dict begin +0.000 0.000 0.000 nodecolor +417 229 moveto +(Collection\(a:Type\)) +[9.36 6.96 3.84 3.84 6.24 6.24 3.84 3.84 6.96 6.96 4.56 6.24 3.84 7.2 6.96 6.96 6.24 4.56] +xshow +end grestore +end grestore +% LinearAggregate(a:Type)->Collection(a:Type) +newpath 330 288 moveto +356 278 387 266 415 256 curveto +stroke +gsave 10 dict begin +solid +1 setlinewidth +0.000 0.000 0.000 edgecolor +newpath 416 259 moveto +424 252 lineto +413 253 lineto +closepath +fill +0.000 0.000 0.000 edgecolor +newpath 416 259 moveto +424 252 lineto +413 253 lineto +closepath +stroke +end grestore +% ... +[ /Rect [ 291 0 345 36 ] + /Border [ 0 0 0 ] + /Action << /Subtype /URI /URI (books/bookvol10.pamphlet) >> + /Subtype /Link +/ANN pdfmark +gsave 10 dict begin +filled +0.537 0.247 0.902 nodecolor +0.537 0.247 0.902 nodecolor +newpath 345 36 moveto +291 36 lineto +291 0 lineto +345 0 lineto +closepath +fill +0.537 0.247 0.902 nodecolor +newpath 345 36 moveto +291 36 lineto +291 0 lineto +345 0 lineto +closepath +stroke +gsave 10 dict begin +0.000 0.000 0.000 nodecolor +312 13 moveto +(...) +[3.6 3.6 3.6] +xshow +end grestore +end grestore +% HomogeneousAggregate(a:Type)->... +newpath 318 72 moveto +318 64 318 55 318 46 curveto +stroke +gsave 10 dict begin +solid +1 setlinewidth +0.000 0.000 0.000 edgecolor +newpath 322 46 moveto +318 36 lineto +315 46 lineto +closepath +fill +0.000 0.000 0.000 edgecolor +newpath 322 46 moveto +318 36 lineto +315 46 lineto +closepath +stroke +end grestore +% IndexedAggregate(a:SetCategory,b:Type) +[ /Rect [ 194 144 442 180 ] + /Border [ 0 0 0 ] + /Action << /Subtype /URI /URI (books/bookvol10.pamphlet) >> + /Subtype /Link +/ANN pdfmark +gsave 10 dict begin +filled +0.537 0.247 0.902 nodecolor +0.537 0.247 0.902 nodecolor +newpath 442 180 moveto +194 180 lineto +194 144 lineto +442 144 lineto +closepath +fill +0.537 0.247 0.902 nodecolor +newpath 442 180 moveto +194 180 lineto +194 144 lineto +442 144 lineto +closepath +stroke +gsave 10 dict begin +0.000 0.000 0.000 nodecolor +201 157 moveto +(IndexedAggregate\(a:SetCategory,b:Type\)) +[4.56 6.96 6.96 5.76 6.48 6.24 6.96 9.84 6.96 7.2 4.8 6.24 6.72 6.24 3.84 6.24 4.56 6.24 3.84 7.68 6 3.84 9.36 6.24 3.84 6.24 6.96 6.96 5.04 6 3.6 6.96 3.84 7.2 6.96 6.96 6.24 4.56] +xshow +end grestore +end grestore +% IndexedAggregate(b:Integer,a:Type)->IndexedAggregate(a:SetCategory,b:Type) +newpath 292 216 moveto +296 208 300 198 305 189 curveto +stroke +gsave 10 dict begin +solid +1 setlinewidth +0.000 0.000 0.000 edgecolor +newpath 308 191 moveto +309 180 lineto +302 188 lineto +closepath +fill +0.000 0.000 0.000 edgecolor +newpath 308 191 moveto +309 180 lineto +302 188 lineto +closepath +stroke +end grestore +% Collection(a:Type)->HomogeneousAggregate(a:Type) +newpath 471 216 moveto +471 196 468 164 451 144 curveto +439 131 424 120 407 112 curveto +stroke +gsave 10 dict begin +solid +1 setlinewidth +0.000 0.000 0.000 edgecolor +newpath 409 109 moveto +398 108 lineto +406 115 lineto +closepath +fill +0.000 0.000 0.000 edgecolor +newpath 409 109 moveto +398 108 lineto +406 115 lineto +closepath +stroke +end grestore +% IndexedAggregate(a:SetCategory,b:Type)->HomogeneousAggregate(a:Type) +newpath 318 144 moveto +318 136 318 127 318 118 curveto +stroke +gsave 10 dict begin +solid +1 setlinewidth +0.000 0.000 0.000 edgecolor +newpath 322 118 moveto +318 108 lineto +315 118 lineto +closepath +fill +0.000 0.000 0.000 edgecolor +newpath 322 118 moveto +318 108 lineto +315 118 lineto +closepath +stroke +end grestore +endpage +showpage +grestore +%%PageTrailer +%%EndPage: 1 +%%Trailer +%%Pages: 1 +end +restore +%%EOF diff --git a/books/ps/v10stringaggregate.ps b/books/ps/v10stringaggregate.ps new file mode 100644 index 0000000..245702f --- /dev/null +++ b/books/ps/v10stringaggregate.ps @@ -0,0 +1,605 @@ +%!PS-Adobe-2.0 +%%Creator: dot version 2.8 (Thu Sep 14 20:34:11 UTC 2006) +%%For: (root) root +%%Title: pic +%%Pages: (atend) +%%BoundingBox: 36 36 368 512 +%%EndComments +save +%%BeginProlog +/DotDict 200 dict def +DotDict begin + +/setupLatin1 { +mark +/EncodingVector 256 array def + EncodingVector 0 + +ISOLatin1Encoding 0 255 getinterval putinterval +EncodingVector 45 /hyphen put + +% Set up ISO Latin 1 character encoding +/starnetISO { + dup dup findfont dup length dict begin + { 1 index /FID ne { def }{ pop pop } ifelse + } forall + /Encoding EncodingVector def + currentdict end definefont +} def +/Times-Roman starnetISO def +/Times-Italic starnetISO def +/Times-Bold starnetISO def +/Times-BoldItalic starnetISO def +/Helvetica starnetISO def +/Helvetica-Oblique starnetISO def +/Helvetica-Bold starnetISO def +/Helvetica-BoldOblique starnetISO def +/Courier starnetISO def +/Courier-Oblique starnetISO def +/Courier-Bold starnetISO def +/Courier-BoldOblique starnetISO def +cleartomark +} bind def + +%%BeginResource: procset graphviz 0 0 +/coord-font-family /Times-Roman def +/default-font-family /Times-Roman def +/coordfont coord-font-family findfont 8 scalefont def + +/InvScaleFactor 1.0 def +/set_scale { + dup 1 exch div /InvScaleFactor exch def + dup scale +} bind def + +% styles +/solid { [] 0 setdash } bind def +/dashed { [9 InvScaleFactor mul dup ] 0 setdash } bind def +/dotted { [1 InvScaleFactor mul 6 InvScaleFactor mul] 0 setdash } bind def +/invis {/fill {newpath} def /stroke {newpath} def /show {pop newpath} def} bind def +/bold { 2 setlinewidth } bind def +/filled { } bind def +/unfilled { } bind def +/rounded { } bind def +/diagonals { } bind def + +% hooks for setting color +/nodecolor { sethsbcolor } bind def +/edgecolor { sethsbcolor } bind def +/graphcolor { sethsbcolor } bind def +/nopcolor {pop pop pop} bind def + +/beginpage { % i j npages + /npages exch def + /j exch def + /i exch def + /str 10 string def + npages 1 gt { + gsave + coordfont setfont + 0 0 moveto + (\() show i str cvs show (,) show j str cvs show (\)) show + grestore + } if +} bind def + +/set_font { + findfont exch + scalefont setfont +} def + +% draw aligned label in bounding box aligned to current point +/alignedtext { % width adj text + /text exch def + /adj exch def + /width exch def + gsave + width 0 gt { + text stringwidth pop adj mul 0 rmoveto + } if + [] 0 setdash + text show + grestore +} def + +/boxprim { % xcorner ycorner xsize ysize + 4 2 roll + moveto + 2 copy + exch 0 rlineto + 0 exch rlineto + pop neg 0 rlineto + closepath +} bind def + +/ellipse_path { + /ry exch def + /rx exch def + /y exch def + /x exch def + matrix currentmatrix + newpath + x y translate + rx ry scale + 0 0 1 0 360 arc + setmatrix +} bind def + +/endpage { showpage } bind def +/showpage { } def + +/layercolorseq + [ % layer color sequence - darkest to lightest + [0 0 0] + [.2 .8 .8] + [.4 .8 .8] + [.6 .8 .8] + [.8 .8 .8] + ] +def + +/layerlen layercolorseq length def + +/setlayer {/maxlayer exch def /curlayer exch def + layercolorseq curlayer 1 sub layerlen mod get + aload pop sethsbcolor + /nodecolor {nopcolor} def + /edgecolor {nopcolor} def + /graphcolor {nopcolor} def +} bind def + +/onlayer { curlayer ne {invis} if } def + +/onlayers { + /myupper exch def + /mylower exch def + curlayer mylower lt + curlayer myupper gt + or + {invis} if +} def + +/curlayer 0 def + +%%EndResource +%%EndProlog +%%BeginSetup +14 default-font-family set_font +1 setmiterlimit +% /arrowlength 10 def +% /arrowwidth 5 def + +% make sure pdfmark is harmless for PS-interpreters other than Distiller +/pdfmark where {pop} {userdict /pdfmark /cleartomark load put} ifelse +% make '<<' and '>>' safe on PS Level 1 devices +/languagelevel where {pop languagelevel}{1} ifelse +2 lt { + userdict (<<) cvn ([) cvn load put + userdict (>>) cvn ([) cvn load put +} if + +%%EndSetup +%%Page: 1 1 +%%PageBoundingBox: 36 36 368 512 +%%PageOrientation: Portrait +gsave +36 36 332 476 boxprim clip newpath +36 36 translate +0 0 1 beginpage +1.0000 set_scale +4 4 translate 0 rotate +0.167 0.600 1.000 graphcolor +0.167 0.600 1.000 graphcolor +newpath -6 -6 moveto +-6 474 lineto +330 474 lineto +330 -6 lineto +closepath +fill +0.167 0.600 1.000 graphcolor +newpath -6 -6 moveto +-6 474 lineto +330 474 lineto +330 -6 lineto +closepath +stroke +0.000 0.000 0.000 graphcolor +14.00 /Times-Roman set_font +% StringAggregate() +[ /Rect [ 132 432 250 468 ] + /Border [ 0 0 0 ] + /Action << /Subtype /URI /URI (books/bookvol10.pamphlet) >> + /Subtype /Link +/ANN pdfmark +gsave 10 dict begin +filled +0.537 0.247 0.902 nodecolor +0.537 0.247 0.902 nodecolor +newpath 250 468 moveto +132 468 lineto +132 432 lineto +250 432 lineto +closepath +fill +0.537 0.247 0.902 nodecolor +newpath 250 468 moveto +132 468 lineto +132 432 lineto +250 432 lineto +closepath +stroke +gsave 10 dict begin +0.000 0.000 0.000 nodecolor +140 445 moveto +(StringAggregate\(\)) +[7.44 3.84 5.04 3.84 6.96 6.96 9.84 6.96 7.2 4.8 6.24 6.72 6.24 3.84 6.24 4.56 4.56] +xshow +end grestore +end grestore +% OneDimensionalArrayAggregate(Character) +[ /Rect [ 58 360 324 396 ] + /Border [ 0 0 0 ] + /Action << /Subtype /URI /URI (books/bookvol10.pamphlet) >> + /Subtype /Link +/ANN pdfmark +gsave 10 dict begin +filled +0.404 0.667 0.545 nodecolor +0.404 0.667 0.545 nodecolor +newpath 324 396 moveto +58 396 lineto +58 360 lineto +324 360 lineto +closepath +fill +0.404 0.667 0.545 nodecolor +newpath 324 396 moveto +58 396 lineto +58 360 lineto +324 360 lineto +closepath +stroke +gsave 10 dict begin +0.000 0.000 0.000 nodecolor +66 373 moveto +(OneDimensionalArrayAggregate\(Character\)) +[10.08 6.96 6.24 10.08 3.84 10.8 6.24 6.96 5.52 3.84 6.96 6.96 6.24 3.84 10.08 5.28 4.8 5.76 6.96 9.84 6.96 7.2 4.8 6.24 6.72 6.24 3.84 6.24 4.56 9.36 6.96 6.24 4.8 6.24 6.24 3.84 6.24 4.8 4.56] +xshow +end grestore +end grestore +% StringAggregate()->OneDimensionalArrayAggregate(Character) +newpath 191 432 moveto +191 424 191 415 191 406 curveto +stroke +gsave 10 dict begin +solid +1 setlinewidth +0.000 0.000 0.000 edgecolor +newpath 195 406 moveto +191 396 lineto +188 406 lineto +closepath +fill +0.000 0.000 0.000 edgecolor +newpath 195 406 moveto +191 396 lineto +188 406 lineto +closepath +stroke +end grestore +% OneDimensionalArrayAggregate(a:Type) +[ /Rect [ 67 288 315 324 ] + /Border [ 0 0 0 ] + /Action << /Subtype /URI /URI (books/bookvol10.pamphlet) >> + /Subtype /Link +/ANN pdfmark +gsave 10 dict begin +filled +0.537 0.247 0.902 nodecolor +0.537 0.247 0.902 nodecolor +newpath 315 324 moveto +67 324 lineto +67 288 lineto +315 288 lineto +closepath +fill +0.537 0.247 0.902 nodecolor +newpath 315 324 moveto +67 324 lineto +67 288 lineto +315 288 lineto +closepath +stroke +gsave 10 dict begin +0.000 0.000 0.000 nodecolor +74 301 moveto +(OneDimensionalArrayAggregate\(a:Type\)) +[10.08 6.96 6.24 10.08 3.84 10.8 6.24 6.96 5.52 3.84 6.96 6.96 6.24 3.84 10.08 5.28 4.8 5.76 6.96 9.84 6.96 7.2 4.8 6.24 6.72 6.24 3.84 6.24 4.56 6.24 3.84 7.2 6.96 6.96 6.24 4.56] +xshow +end grestore +end grestore +% OneDimensionalArrayAggregate(Character)->OneDimensionalArrayAggregate(a:Type) +newpath 191 360 moveto +191 352 191 343 191 334 curveto +stroke +gsave 10 dict begin +solid +1 setlinewidth +0.000 0.000 0.000 edgecolor +newpath 195 334 moveto +191 324 lineto +188 334 lineto +closepath +fill +0.000 0.000 0.000 edgecolor +newpath 195 334 moveto +191 324 lineto +188 334 lineto +closepath +stroke +end grestore +% FiniteLinearAggregate(a:Type) +[ /Rect [ 96 216 286 252 ] + /Border [ 0 0 0 ] + /Action << /Subtype /URI /URI (books/bookvol10.pamphlet) >> + /Subtype /Link +/ANN pdfmark +gsave 10 dict begin +filled +0.537 0.247 0.902 nodecolor +0.537 0.247 0.902 nodecolor +newpath 286 252 moveto +96 252 lineto +96 216 lineto +286 216 lineto +closepath +fill +0.537 0.247 0.902 nodecolor +newpath 286 252 moveto +96 252 lineto +96 216 lineto +286 216 lineto +closepath +stroke +gsave 10 dict begin +0.000 0.000 0.000 nodecolor +104 229 moveto +(FiniteLinearAggregate\(a:Type\)) +[7.44 3.84 6.96 3.84 3.84 6.24 8.64 3.84 6.96 6.24 6.24 4.8 9.84 6.96 7.2 4.8 6.24 6.72 6.24 3.84 6.24 4.56 6.24 3.84 7.2 6.96 6.96 6.24 4.56] +xshow +end grestore +end grestore +% OneDimensionalArrayAggregate(a:Type)->FiniteLinearAggregate(a:Type) +newpath 191 288 moveto +191 280 191 271 191 262 curveto +stroke +gsave 10 dict begin +solid +1 setlinewidth +0.000 0.000 0.000 edgecolor +newpath 195 262 moveto +191 252 lineto +188 262 lineto +closepath +fill +0.000 0.000 0.000 edgecolor +newpath 195 262 moveto +191 252 lineto +188 262 lineto +closepath +stroke +end grestore +% LinearAggregate(a:Type) +[ /Rect [ 112 144 270 180 ] + /Border [ 0 0 0 ] + /Action << /Subtype /URI /URI (books/bookvol10.pamphlet) >> + /Subtype /Link +/ANN pdfmark +gsave 10 dict begin +filled +0.537 0.247 0.902 nodecolor +0.537 0.247 0.902 nodecolor +newpath 270 180 moveto +112 180 lineto +112 144 lineto +270 144 lineto +closepath +fill +0.537 0.247 0.902 nodecolor +newpath 270 180 moveto +112 180 lineto +112 144 lineto +270 144 lineto +closepath +stroke +gsave 10 dict begin +0.000 0.000 0.000 nodecolor +120 157 moveto +(LinearAggregate\(a:Type\)) +[8.64 3.84 6.96 6.24 6.24 4.8 9.84 6.96 7.2 4.8 6.24 6.72 6.24 3.84 6.24 4.56 6.24 3.84 7.2 6.96 6.96 6.24 4.56] +xshow +end grestore +end grestore +% FiniteLinearAggregate(a:Type)->LinearAggregate(a:Type) +newpath 191 216 moveto +191 208 191 199 191 190 curveto +stroke +gsave 10 dict begin +solid +1 setlinewidth +0.000 0.000 0.000 edgecolor +newpath 195 190 moveto +191 180 lineto +188 190 lineto +closepath +fill +0.000 0.000 0.000 edgecolor +newpath 195 190 moveto +191 180 lineto +188 190 lineto +closepath +stroke +end grestore +% IndexedAggregate(b:Integer,a:Type) +[ /Rect [ 0 72 218 108 ] + /Border [ 0 0 0 ] + /Action << /Subtype /URI /URI (books/bookvol10.pamphlet) >> + /Subtype /Link +/ANN pdfmark +gsave 10 dict begin +filled +0.404 0.667 0.545 nodecolor +0.404 0.667 0.545 nodecolor +newpath 218 108 moveto +0 108 lineto +0 72 lineto +218 72 lineto +closepath +fill +0.404 0.667 0.545 nodecolor +newpath 218 108 moveto +0 108 lineto +0 72 lineto +218 72 lineto +closepath +stroke +gsave 10 dict begin +0.000 0.000 0.000 nodecolor +7 85 moveto +(IndexedAggregate\(b:Integer,a:Type\)) +[4.56 6.96 6.96 5.76 6.48 6.24 6.96 9.84 6.96 7.2 4.8 6.24 6.72 6.24 3.84 6.24 4.56 6.96 3.84 4.56 6.96 3.84 6.24 6.72 6.24 4.32 3.6 6.24 3.84 7.2 6.96 6.96 6.24 4.56] +xshow +end grestore +end grestore +% LinearAggregate(a:Type)->IndexedAggregate(b:Integer,a:Type) +newpath 170 144 moveto +160 135 148 124 137 115 curveto +stroke +gsave 10 dict begin +solid +1 setlinewidth +0.000 0.000 0.000 edgecolor +newpath 139 112 moveto +129 108 lineto +134 117 lineto +closepath +fill +0.000 0.000 0.000 edgecolor +newpath 139 112 moveto +129 108 lineto +134 117 lineto +closepath +stroke +end grestore +% CLAGG... +[ /Rect [ 236 72 310 108 ] + /Border [ 0 0 0 ] + /Action << /Subtype /URI /URI (books/bookvol10.pamphlet) >> + /Subtype /Link +/ANN pdfmark +gsave 10 dict begin +filled +0.537 0.247 0.902 nodecolor +0.537 0.247 0.902 nodecolor +newpath 310 108 moveto +236 108 lineto +236 72 lineto +310 72 lineto +closepath +fill +0.537 0.247 0.902 nodecolor +newpath 310 108 moveto +236 108 lineto +236 72 lineto +310 72 lineto +closepath +stroke +gsave 10 dict begin +0.000 0.000 0.000 nodecolor +243 85 moveto +(CLAGG...) +[9.36 8.64 9.36 10.08 10.08 3.6 3.6 3.6] +xshow +end grestore +end grestore +% LinearAggregate(a:Type)->CLAGG... +newpath 212 144 moveto +222 135 234 124 245 115 curveto +stroke +gsave 10 dict begin +solid +1 setlinewidth +0.000 0.000 0.000 edgecolor +newpath 248 117 moveto +253 108 lineto +243 112 lineto +closepath +fill +0.000 0.000 0.000 edgecolor +newpath 248 117 moveto +253 108 lineto +243 112 lineto +closepath +stroke +end grestore +% IXAGG... +[ /Rect [ 73 0 145 36 ] + /Border [ 0 0 0 ] + /Action << /Subtype /URI /URI (books/bookvol10.pamphlet) >> + /Subtype /Link +/ANN pdfmark +gsave 10 dict begin +filled +0.537 0.247 0.902 nodecolor +0.537 0.247 0.902 nodecolor +newpath 145 36 moveto +73 36 lineto +73 0 lineto +145 0 lineto +closepath +fill +0.537 0.247 0.902 nodecolor +newpath 145 36 moveto +73 36 lineto +73 0 lineto +145 0 lineto +closepath +stroke +gsave 10 dict begin +0.000 0.000 0.000 nodecolor +80 13 moveto +(IXAGG...) +[4.56 10.08 9.36 10.08 10.08 3.6 3.6 3.6] +xshow +end grestore +end grestore +% IndexedAggregate(b:Integer,a:Type)->IXAGG... +newpath 109 72 moveto +109 64 109 55 109 46 curveto +stroke +gsave 10 dict begin +solid +1 setlinewidth +0.000 0.000 0.000 edgecolor +newpath 113 46 moveto +109 36 lineto +106 46 lineto +closepath +fill +0.000 0.000 0.000 edgecolor +newpath 113 46 moveto +109 36 lineto +106 46 lineto +closepath +stroke +end grestore +endpage +showpage +grestore +%%PageTrailer +%%EndPage: 1 +%%Trailer +%%Pages: 1 +end +restore +%%EOF diff --git a/books/ps/v10tableaggregate.ps b/books/ps/v10tableaggregate.ps new file mode 100644 index 0000000..f9d4be9 --- /dev/null +++ b/books/ps/v10tableaggregate.ps @@ -0,0 +1,903 @@ +%!PS-Adobe-2.0 +%%Creator: dot version 2.8 (Thu Sep 14 20:34:11 UTC 2006) +%%For: (root) root +%%Title: pic +%%Pages: (atend) +%%BoundingBox: 36 36 643 584 +%%EndComments +save +%%BeginProlog +/DotDict 200 dict def +DotDict begin + +/setupLatin1 { +mark +/EncodingVector 256 array def + EncodingVector 0 + +ISOLatin1Encoding 0 255 getinterval putinterval +EncodingVector 45 /hyphen put + +% Set up ISO Latin 1 character encoding +/starnetISO { + dup dup findfont dup length dict begin + { 1 index /FID ne { def }{ pop pop } ifelse + } forall + /Encoding EncodingVector def + currentdict end definefont +} def +/Times-Roman starnetISO def +/Times-Italic starnetISO def +/Times-Bold starnetISO def +/Times-BoldItalic starnetISO def +/Helvetica starnetISO def +/Helvetica-Oblique starnetISO def +/Helvetica-Bold starnetISO def +/Helvetica-BoldOblique starnetISO def +/Courier starnetISO def +/Courier-Oblique starnetISO def +/Courier-Bold starnetISO def +/Courier-BoldOblique starnetISO def +cleartomark +} bind def + +%%BeginResource: procset graphviz 0 0 +/coord-font-family /Times-Roman def +/default-font-family /Times-Roman def +/coordfont coord-font-family findfont 8 scalefont def + +/InvScaleFactor 1.0 def +/set_scale { + dup 1 exch div /InvScaleFactor exch def + dup scale +} bind def + +% styles +/solid { [] 0 setdash } bind def +/dashed { [9 InvScaleFactor mul dup ] 0 setdash } bind def +/dotted { [1 InvScaleFactor mul 6 InvScaleFactor mul] 0 setdash } bind def +/invis {/fill {newpath} def /stroke {newpath} def /show {pop newpath} def} bind def +/bold { 2 setlinewidth } bind def +/filled { } bind def +/unfilled { } bind def +/rounded { } bind def +/diagonals { } bind def + +% hooks for setting color +/nodecolor { sethsbcolor } bind def +/edgecolor { sethsbcolor } bind def +/graphcolor { sethsbcolor } bind def +/nopcolor {pop pop pop} bind def + +/beginpage { % i j npages + /npages exch def + /j exch def + /i exch def + /str 10 string def + npages 1 gt { + gsave + coordfont setfont + 0 0 moveto + (\() show i str cvs show (,) show j str cvs show (\)) show + grestore + } if +} bind def + +/set_font { + findfont exch + scalefont setfont +} def + +% draw aligned label in bounding box aligned to current point +/alignedtext { % width adj text + /text exch def + /adj exch def + /width exch def + gsave + width 0 gt { + text stringwidth pop adj mul 0 rmoveto + } if + [] 0 setdash + text show + grestore +} def + +/boxprim { % xcorner ycorner xsize ysize + 4 2 roll + moveto + 2 copy + exch 0 rlineto + 0 exch rlineto + pop neg 0 rlineto + closepath +} bind def + +/ellipse_path { + /ry exch def + /rx exch def + /y exch def + /x exch def + matrix currentmatrix + newpath + x y translate + rx ry scale + 0 0 1 0 360 arc + setmatrix +} bind def + +/endpage { showpage } bind def +/showpage { } def + +/layercolorseq + [ % layer color sequence - darkest to lightest + [0 0 0] + [.2 .8 .8] + [.4 .8 .8] + [.6 .8 .8] + [.8 .8 .8] + ] +def + +/layerlen layercolorseq length def + +/setlayer {/maxlayer exch def /curlayer exch def + layercolorseq curlayer 1 sub layerlen mod get + aload pop sethsbcolor + /nodecolor {nopcolor} def + /edgecolor {nopcolor} def + /graphcolor {nopcolor} def +} bind def + +/onlayer { curlayer ne {invis} if } def + +/onlayers { + /myupper exch def + /mylower exch def + curlayer mylower lt + curlayer myupper gt + or + {invis} if +} def + +/curlayer 0 def + +%%EndResource +%%EndProlog +%%BeginSetup +14 default-font-family set_font +1 setmiterlimit +% /arrowlength 10 def +% /arrowwidth 5 def + +% make sure pdfmark is harmless for PS-interpreters other than Distiller +/pdfmark where {pop} {userdict /pdfmark /cleartomark load put} ifelse +% make '<<' and '>>' safe on PS Level 1 devices +/languagelevel where {pop languagelevel}{1} ifelse +2 lt { + userdict (<<) cvn ([) cvn load put + userdict (>>) cvn ([) cvn load put +} if + +%%EndSetup +%%Page: 1 1 +%%PageBoundingBox: 36 36 643 584 +%%PageOrientation: Portrait +gsave +36 36 607 548 boxprim clip newpath +36 36 translate +0 0 1 beginpage +1.0000 set_scale +4 4 translate 0 rotate +0.167 0.600 1.000 graphcolor +0.167 0.600 1.000 graphcolor +newpath -6 -6 moveto +-6 546 lineto +605 546 lineto +605 -6 lineto +closepath +fill +0.167 0.600 1.000 graphcolor +newpath -6 -6 moveto +-6 546 lineto +605 546 lineto +605 -6 lineto +closepath +stroke +0.000 0.000 0.000 graphcolor +14.00 /Times-Roman set_font +% TableAggregate(a:SetCategory,b:SetCategory) +[ /Rect [ 163 504 439 540 ] + /Border [ 0 0 0 ] + /Action << /Subtype /URI /URI (books/bookvol10.pamphlet) >> + /Subtype /Link +/ANN pdfmark +gsave 10 dict begin +filled +0.537 0.247 0.902 nodecolor +0.537 0.247 0.902 nodecolor +newpath 439 540 moveto +163 540 lineto +163 504 lineto +439 504 lineto +closepath +fill +0.537 0.247 0.902 nodecolor +newpath 439 540 moveto +163 540 lineto +163 504 lineto +439 504 lineto +closepath +stroke +gsave 10 dict begin +0.000 0.000 0.000 nodecolor +170 517 moveto +(TableAggregate\(a:SetCategory,b:SetCategory\)) +[7.68 6.24 6.96 3.84 6.24 9.84 6.96 7.2 4.8 6.24 6.72 6.24 3.84 6.24 4.56 6.24 3.84 7.68 6 3.84 9.36 6.24 3.84 6.24 6.96 6.96 5.04 6 3.6 6.96 3.84 7.68 6 3.84 9.36 6.24 3.84 6.24 6.96 6.96 5.04 6.96 4.56] +xshow +end grestore +end grestore +% KeyedDictionary(a:SetCategory,b:SetCategory) +[ /Rect [ 7 432 291 468 ] + /Border [ 0 0 0 ] + /Action << /Subtype /URI /URI (books/bookvol10.pamphlet) >> + /Subtype /Link +/ANN pdfmark +gsave 10 dict begin +filled +0.537 0.247 0.902 nodecolor +0.537 0.247 0.902 nodecolor +newpath 291 468 moveto +7 468 lineto +7 432 lineto +291 432 lineto +closepath +fill +0.537 0.247 0.902 nodecolor +newpath 291 468 moveto +7 468 lineto +7 432 lineto +291 432 lineto +closepath +stroke +gsave 10 dict begin +0.000 0.000 0.000 nodecolor +15 445 moveto +(KeyedDictionary\(a:SetCategory,b:SetCategory\)) +[9.6 5.76 6.48 6.24 6.96 10.08 3.84 6.24 3.84 3.84 6.96 6.96 6.24 5.04 6.96 4.56 6.24 3.84 7.68 6 3.84 9.36 6.24 3.84 6.24 6.96 6.96 5.04 6 3.6 6.96 3.84 7.68 6 3.84 9.36 6.24 3.84 6.24 6.96 6.96 5.04 6.96 4.56] +xshow +end grestore +end grestore +% TableAggregate(a:SetCategory,b:SetCategory)->KeyedDictionary(a:SetCategory,b:SetCategory) +newpath 263 504 moveto +243 494 218 483 196 472 curveto +stroke +gsave 10 dict begin +solid +1 setlinewidth +0.000 0.000 0.000 edgecolor +newpath 198 469 moveto +187 468 lineto +195 475 lineto +closepath +fill +0.000 0.000 0.000 edgecolor +newpath 198 469 moveto +187 468 lineto +195 475 lineto +closepath +stroke +end grestore +% IndexedAggregate(a:SetCategory,b:SetCategory) +[ /Rect [ 309 432 599 468 ] + /Border [ 0 0 0 ] + /Action << /Subtype /URI /URI (books/bookvol10.pamphlet) >> + /Subtype /Link +/ANN pdfmark +gsave 10 dict begin +filled +0.404 0.667 0.545 nodecolor +0.404 0.667 0.545 nodecolor +newpath 599 468 moveto +309 468 lineto +309 432 lineto +599 432 lineto +closepath +fill +0.404 0.667 0.545 nodecolor +newpath 599 468 moveto +309 468 lineto +309 432 lineto +599 432 lineto +closepath +stroke +gsave 10 dict begin +0.000 0.000 0.000 nodecolor +316 445 moveto +(IndexedAggregate\(a:SetCategory,b:SetCategory\)) +[4.56 6.96 6.96 5.76 6.48 6.24 6.96 9.84 6.96 7.2 4.8 6.24 6.72 6.24 3.84 6.24 4.56 6.24 3.84 7.68 6 3.84 9.36 6.24 3.84 6.24 6.96 6.96 5.04 6 3.6 6.96 3.84 7.68 6 3.84 9.36 6.24 3.84 6.24 6.96 6.96 5.04 6.96 4.56] +xshow +end grestore +end grestore +% TableAggregate(a:SetCategory,b:SetCategory)->IndexedAggregate(a:SetCategory,b:SetCategory) +newpath 340 504 moveto +360 494 385 483 407 472 curveto +stroke +gsave 10 dict begin +solid +1 setlinewidth +0.000 0.000 0.000 edgecolor +newpath 408 475 moveto +416 468 lineto +405 469 lineto +closepath +fill +0.000 0.000 0.000 edgecolor +newpath 408 475 moveto +416 468 lineto +405 469 lineto +closepath +stroke +end grestore +% Dictionary(Record(a:SetCategory,b:SetCategory)) +[ /Rect [ 0 360 298 396 ] + /Border [ 0 0 0 ] + /Action << /Subtype /URI /URI (books/bookvol10.pamphlet) >> + /Subtype /Link +/ANN pdfmark +gsave 10 dict begin +filled +0.404 0.667 0.545 nodecolor +0.404 0.667 0.545 nodecolor +newpath 298 396 moveto +0 396 lineto +0 360 lineto +298 360 lineto +closepath +fill +0.404 0.667 0.545 nodecolor +newpath 298 396 moveto +0 396 lineto +0 360 lineto +298 360 lineto +closepath +stroke +gsave 10 dict begin +0.000 0.000 0.000 nodecolor +8 373 moveto +(Dictionary\(Record\(a:SetCategory,b:SetCategory\)\)) +[10.08 3.84 6.24 3.84 3.84 6.96 6.96 6.24 5.04 6.96 4.56 9.12 6.24 6.24 6.96 4.56 6.96 4.56 6.24 3.84 7.68 6 3.84 9.36 6.24 3.84 6.24 6.96 6.96 5.04 6 3.6 6.96 3.84 7.68 6 3.84 9.36 6.24 3.84 6.24 6.96 6.96 5.04 6.96 4.56 4.56] +xshow +end grestore +end grestore +% KeyedDictionary(a:SetCategory,b:SetCategory)->Dictionary(Record(a:SetCategory,b:SetCategory)) +newpath 149 432 moveto +149 424 149 415 149 406 curveto +stroke +gsave 10 dict begin +solid +1 setlinewidth +0.000 0.000 0.000 edgecolor +newpath 153 406 moveto +149 396 lineto +146 406 lineto +closepath +fill +0.000 0.000 0.000 edgecolor +newpath 153 406 moveto +149 396 lineto +146 406 lineto +closepath +stroke +end grestore +% IndexedAggregate(a:SetCategory,b:Type) +[ /Rect [ 330 360 578 396 ] + /Border [ 0 0 0 ] + /Action << /Subtype /URI /URI (books/bookvol10.pamphlet) >> + /Subtype /Link +/ANN pdfmark +gsave 10 dict begin +filled +0.537 0.247 0.902 nodecolor +0.537 0.247 0.902 nodecolor +newpath 578 396 moveto +330 396 lineto +330 360 lineto +578 360 lineto +closepath +fill +0.537 0.247 0.902 nodecolor +newpath 578 396 moveto +330 396 lineto +330 360 lineto +578 360 lineto +closepath +stroke +gsave 10 dict begin +0.000 0.000 0.000 nodecolor +337 373 moveto +(IndexedAggregate\(a:SetCategory,b:Type\)) +[4.56 6.96 6.96 5.76 6.48 6.24 6.96 9.84 6.96 7.2 4.8 6.24 6.72 6.24 3.84 6.24 4.56 6.24 3.84 7.68 6 3.84 9.36 6.24 3.84 6.24 6.96 6.96 5.04 6 3.6 6.96 3.84 7.2 6.96 6.96 6.24 4.56] +xshow +end grestore +end grestore +% IndexedAggregate(a:SetCategory,b:SetCategory)->IndexedAggregate(a:SetCategory,b:Type) +newpath 454 432 moveto +454 424 454 415 454 406 curveto +stroke +gsave 10 dict begin +solid +1 setlinewidth +0.000 0.000 0.000 edgecolor +newpath 458 406 moveto +454 396 lineto +451 406 lineto +closepath +fill +0.000 0.000 0.000 edgecolor +newpath 458 406 moveto +454 396 lineto +451 406 lineto +closepath +stroke +end grestore +% HOAGG... +[ /Rect [ 271 0 347 36 ] + /Border [ 0 0 0 ] + /Action << /Subtype /URI /URI (books/bookvol10.pamphlet) >> + /Subtype /Link +/ANN pdfmark +gsave 10 dict begin +filled +0.537 0.247 0.902 nodecolor +0.537 0.247 0.902 nodecolor +newpath 347 36 moveto +271 36 lineto +271 0 lineto +347 0 lineto +closepath +fill +0.537 0.247 0.902 nodecolor +newpath 347 36 moveto +271 36 lineto +271 0 lineto +347 0 lineto +closepath +stroke +gsave 10 dict begin +0.000 0.000 0.000 nodecolor +278 13 moveto +(HOAGG...) +[10.08 9.36 9.36 10.08 10.08 3.6 3.6 3.6] +xshow +end grestore +end grestore +% IndexedAggregate(a:SetCategory,b:Type)->HOAGG... +newpath 447 360 moveto +436 333 418 280 418 234 curveto +418 234 418 234 418 162 curveto +418 118 404 106 378 72 curveto +369 61 358 51 347 42 curveto +stroke +gsave 10 dict begin +solid +1 setlinewidth +0.000 0.000 0.000 edgecolor +newpath 349 39 moveto +339 36 lineto +345 45 lineto +closepath +fill +0.000 0.000 0.000 edgecolor +newpath 349 39 moveto +339 36 lineto +345 45 lineto +closepath +stroke +end grestore +% ELTAGG... +[ /Rect [ 446 288 526 324 ] + /Border [ 0 0 0 ] + /Action << /Subtype /URI /URI (books/bookvol10.pamphlet) >> + /Subtype /Link +/ANN pdfmark +gsave 10 dict begin +filled +0.537 0.247 0.902 nodecolor +0.537 0.247 0.902 nodecolor +newpath 526 324 moveto +446 324 lineto +446 288 lineto +526 288 lineto +closepath +fill +0.537 0.247 0.902 nodecolor +newpath 526 324 moveto +446 324 lineto +446 288 lineto +526 288 lineto +closepath +stroke +gsave 10 dict begin +0.000 0.000 0.000 nodecolor +453 301 moveto +(ELTAGG...) +[8.64 7.68 7.92 9.36 10.08 10.08 3.6 3.6 3.6] +xshow +end grestore +end grestore +% IndexedAggregate(a:SetCategory,b:Type)->ELTAGG... +newpath 462 360 moveto +466 352 470 342 474 333 curveto +stroke +gsave 10 dict begin +solid +1 setlinewidth +0.000 0.000 0.000 edgecolor +newpath 477 335 moveto +478 324 lineto +471 332 lineto +closepath +fill +0.000 0.000 0.000 edgecolor +newpath 477 335 moveto +478 324 lineto +471 332 lineto +closepath +stroke +end grestore +% Dictionary(a:SetCategory) +[ /Rect [ 66 288 232 324 ] + /Border [ 0 0 0 ] + /Action << /Subtype /URI /URI (books/bookvol10.pamphlet) >> + /Subtype /Link +/ANN pdfmark +gsave 10 dict begin +filled +0.537 0.247 0.902 nodecolor +0.537 0.247 0.902 nodecolor +newpath 232 324 moveto +66 324 lineto +66 288 lineto +232 288 lineto +closepath +fill +0.537 0.247 0.902 nodecolor +newpath 232 324 moveto +66 324 lineto +66 288 lineto +232 288 lineto +closepath +stroke +gsave 10 dict begin +0.000 0.000 0.000 nodecolor +74 301 moveto +(Dictionary\(a:SetCategory\)) +[10.08 3.84 6.24 3.84 3.84 6.96 6.96 6.24 5.04 6.96 4.56 6.24 3.84 7.68 6 3.84 9.36 6.24 3.84 6.24 6.96 6.96 5.04 6.96 4.56] +xshow +end grestore +end grestore +% Dictionary(Record(a:SetCategory,b:SetCategory))->Dictionary(a:SetCategory) +newpath 149 360 moveto +149 352 149 343 149 334 curveto +stroke +gsave 10 dict begin +solid +1 setlinewidth +0.000 0.000 0.000 edgecolor +newpath 153 334 moveto +149 324 lineto +146 334 lineto +closepath +fill +0.000 0.000 0.000 edgecolor +newpath 153 334 moveto +149 324 lineto +146 334 lineto +closepath +stroke +end grestore +% DictionaryOperations(a:SetCategory) +[ /Rect [ 36 216 262 252 ] + /Border [ 0 0 0 ] + /Action << /Subtype /URI /URI (books/bookvol10.pamphlet) >> + /Subtype /Link +/ANN pdfmark +gsave 10 dict begin +filled +0.537 0.247 0.902 nodecolor +0.537 0.247 0.902 nodecolor +newpath 262 252 moveto +36 252 lineto +36 216 lineto +262 216 lineto +closepath +fill +0.537 0.247 0.902 nodecolor +newpath 262 252 moveto +36 252 lineto +36 216 lineto +262 216 lineto +closepath +stroke +gsave 10 dict begin +0.000 0.000 0.000 nodecolor +43 229 moveto +(DictionaryOperations\(a:SetCategory\)) +[10.08 3.84 6.24 3.84 3.84 6.96 6.96 6.24 5.04 6.96 10.08 6.96 6.24 4.8 6.24 3.84 3.84 6.96 6.96 5.52 4.56 6.24 3.84 7.68 6 3.84 9.36 6.24 3.84 6.24 6.96 6.96 5.04 6.96 4.56] +xshow +end grestore +end grestore +% Dictionary(a:SetCategory)->DictionaryOperations(a:SetCategory) +newpath 149 288 moveto +149 280 149 271 149 262 curveto +stroke +gsave 10 dict begin +solid +1 setlinewidth +0.000 0.000 0.000 edgecolor +newpath 153 262 moveto +149 252 lineto +146 262 lineto +closepath +fill +0.000 0.000 0.000 edgecolor +newpath 153 262 moveto +149 252 lineto +146 262 lineto +closepath +stroke +end grestore +% BagAggregate(a:SetCategory) +[ /Rect [ 24 144 210 180 ] + /Border [ 0 0 0 ] + /Action << /Subtype /URI /URI (books/bookvol10.pamphlet) >> + /Subtype /Link +/ANN pdfmark +gsave 10 dict begin +filled +0.404 0.667 0.545 nodecolor +0.404 0.667 0.545 nodecolor +newpath 210 180 moveto +24 180 lineto +24 144 lineto +210 144 lineto +closepath +fill +0.404 0.667 0.545 nodecolor +newpath 210 180 moveto +24 180 lineto +24 144 lineto +210 144 lineto +closepath +stroke +gsave 10 dict begin +0.000 0.000 0.000 nodecolor +31 157 moveto +(BagAggregate\(a:SetCategory\)) +[9.36 6.24 6.96 9.84 6.96 7.2 4.8 6.24 6.72 6.24 3.84 6.24 4.56 6.24 3.84 7.68 6 3.84 9.36 6.24 3.84 6.24 6.96 6.96 5.04 6.96 4.56] +xshow +end grestore +end grestore +% DictionaryOperations(a:SetCategory)->BagAggregate(a:SetCategory) +newpath 141 216 moveto +137 208 133 198 129 189 curveto +stroke +gsave 10 dict begin +solid +1 setlinewidth +0.000 0.000 0.000 edgecolor +newpath 132 188 moveto +125 180 lineto +126 191 lineto +closepath +fill +0.000 0.000 0.000 edgecolor +newpath 132 188 moveto +125 180 lineto +126 191 lineto +closepath +stroke +end grestore +% Collection(a:SetCategory) +[ /Rect [ 228 144 390 180 ] + /Border [ 0 0 0 ] + /Action << /Subtype /URI /URI (books/bookvol10.pamphlet) >> + /Subtype /Link +/ANN pdfmark +gsave 10 dict begin +filled +0.404 0.667 0.545 nodecolor +0.404 0.667 0.545 nodecolor +newpath 390 180 moveto +228 180 lineto +228 144 lineto +390 144 lineto +closepath +fill +0.404 0.667 0.545 nodecolor +newpath 390 180 moveto +228 180 lineto +228 144 lineto +390 144 lineto +closepath +stroke +gsave 10 dict begin +0.000 0.000 0.000 nodecolor +235 157 moveto +(Collection\(a:SetCategory\)) +[9.36 6.96 3.84 3.84 6.24 6.24 3.84 3.84 6.96 6.96 4.56 6.24 3.84 7.68 6 3.84 9.36 6.24 3.84 6.24 6.96 6.96 5.04 6.96 4.56] +xshow +end grestore +end grestore +% DictionaryOperations(a:SetCategory)->Collection(a:SetCategory) +newpath 189 216 moveto +211 206 237 194 260 184 curveto +stroke +gsave 10 dict begin +solid +1 setlinewidth +0.000 0.000 0.000 edgecolor +newpath 261 187 moveto +269 180 lineto +258 181 lineto +closepath +fill +0.000 0.000 0.000 edgecolor +newpath 261 187 moveto +269 180 lineto +258 181 lineto +closepath +stroke +end grestore +% BagAggregate(a:Type) +[ /Rect [ 66 72 210 108 ] + /Border [ 0 0 0 ] + /Action << /Subtype /URI /URI (books/bookvol10.pamphlet) >> + /Subtype /Link +/ANN pdfmark +gsave 10 dict begin +filled +0.537 0.247 0.902 nodecolor +0.537 0.247 0.902 nodecolor +newpath 210 108 moveto +66 108 lineto +66 72 lineto +210 72 lineto +closepath +fill +0.537 0.247 0.902 nodecolor +newpath 210 108 moveto +66 108 lineto +66 72 lineto +210 72 lineto +closepath +stroke +gsave 10 dict begin +0.000 0.000 0.000 nodecolor +73 85 moveto +(BagAggregate\(a:Type\)) +[9.36 6.24 6.96 9.84 6.96 7.2 4.8 6.24 6.72 6.24 3.84 6.24 4.56 6.24 3.84 7.2 6.96 6.96 6.24 4.56] +xshow +end grestore +end grestore +% BagAggregate(a:SetCategory)->BagAggregate(a:Type) +newpath 122 144 moveto +125 136 128 127 130 118 curveto +stroke +gsave 10 dict begin +solid +1 setlinewidth +0.000 0.000 0.000 edgecolor +newpath 133 119 moveto +133 108 lineto +127 117 lineto +closepath +fill +0.000 0.000 0.000 edgecolor +newpath 133 119 moveto +133 108 lineto +127 117 lineto +closepath +stroke +end grestore +% Collection(a:Type) +[ /Rect [ 249 72 369 108 ] + /Border [ 0 0 0 ] + /Action << /Subtype /URI /URI (books/bookvol10.pamphlet) >> + /Subtype /Link +/ANN pdfmark +gsave 10 dict begin +filled +0.537 0.247 0.902 nodecolor +0.537 0.247 0.902 nodecolor +newpath 369 108 moveto +249 108 lineto +249 72 lineto +369 72 lineto +closepath +fill +0.537 0.247 0.902 nodecolor +newpath 369 108 moveto +249 108 lineto +249 72 lineto +369 72 lineto +closepath +stroke +gsave 10 dict begin +0.000 0.000 0.000 nodecolor +256 85 moveto +(Collection\(a:Type\)) +[9.36 6.96 3.84 3.84 6.24 6.24 3.84 3.84 6.96 6.96 4.56 6.24 3.84 7.2 6.96 6.96 6.24 4.56] +xshow +end grestore +end grestore +% Collection(a:SetCategory)->Collection(a:Type) +newpath 309 144 moveto +309 136 309 127 309 118 curveto +stroke +gsave 10 dict begin +solid +1 setlinewidth +0.000 0.000 0.000 edgecolor +newpath 313 118 moveto +309 108 lineto +306 118 lineto +closepath +fill +0.000 0.000 0.000 edgecolor +newpath 313 118 moveto +309 108 lineto +306 118 lineto +closepath +stroke +end grestore +% Collection(a:Type)->HOAGG... +newpath 309 72 moveto +309 64 309 55 309 46 curveto +stroke +gsave 10 dict begin +solid +1 setlinewidth +0.000 0.000 0.000 edgecolor +newpath 313 46 moveto +309 36 lineto +306 46 lineto +closepath +fill +0.000 0.000 0.000 edgecolor +newpath 313 46 moveto +309 36 lineto +306 46 lineto +closepath +stroke +end grestore +% BagAggregate(a:Type)->HOAGG... +newpath 181 72 moveto +206 62 236 49 262 38 curveto +stroke +gsave 10 dict begin +solid +1 setlinewidth +0.000 0.000 0.000 edgecolor +newpath 263 41 moveto +271 34 lineto +260 35 lineto +closepath +fill +0.000 0.000 0.000 edgecolor +newpath 263 41 moveto +271 34 lineto +260 35 lineto +closepath +stroke +end grestore +endpage +showpage +grestore +%%PageTrailer +%%EndPage: 1 +%%Trailer +%%Pages: 1 +end +restore +%%EOF diff --git a/books/ps/v10type.ps b/books/ps/v10type.ps new file mode 100644 index 0000000..dc94925 --- /dev/null +++ b/books/ps/v10type.ps @@ -0,0 +1,299 @@ +%!PS-Adobe-2.0 +%%Creator: dot version 2.8 (Thu Sep 14 20:34:11 UTC 2006) +%%For: (root) root +%%Title: pic +%%Pages: (atend) +%%BoundingBox: 36 36 112 152 +%%EndComments +save +%%BeginProlog +/DotDict 200 dict def +DotDict begin + +/setupLatin1 { +mark +/EncodingVector 256 array def + EncodingVector 0 + +ISOLatin1Encoding 0 255 getinterval putinterval +EncodingVector 45 /hyphen put + +% Set up ISO Latin 1 character encoding +/starnetISO { + dup dup findfont dup length dict begin + { 1 index /FID ne { def }{ pop pop } ifelse + } forall + /Encoding EncodingVector def + currentdict end definefont +} def +/Times-Roman starnetISO def +/Times-Italic starnetISO def +/Times-Bold starnetISO def +/Times-BoldItalic starnetISO def +/Helvetica starnetISO def +/Helvetica-Oblique starnetISO def +/Helvetica-Bold starnetISO def +/Helvetica-BoldOblique starnetISO def +/Courier starnetISO def +/Courier-Oblique starnetISO def +/Courier-Bold starnetISO def +/Courier-BoldOblique starnetISO def +cleartomark +} bind def + +%%BeginResource: procset graphviz 0 0 +/coord-font-family /Times-Roman def +/default-font-family /Times-Roman def +/coordfont coord-font-family findfont 8 scalefont def + +/InvScaleFactor 1.0 def +/set_scale { + dup 1 exch div /InvScaleFactor exch def + dup scale +} bind def + +% styles +/solid { [] 0 setdash } bind def +/dashed { [9 InvScaleFactor mul dup ] 0 setdash } bind def +/dotted { [1 InvScaleFactor mul 6 InvScaleFactor mul] 0 setdash } bind def +/invis {/fill {newpath} def /stroke {newpath} def /show {pop newpath} def} bind def +/bold { 2 setlinewidth } bind def +/filled { } bind def +/unfilled { } bind def +/rounded { } bind def +/diagonals { } bind def + +% hooks for setting color +/nodecolor { sethsbcolor } bind def +/edgecolor { sethsbcolor } bind def +/graphcolor { sethsbcolor } bind def +/nopcolor {pop pop pop} bind def + +/beginpage { % i j npages + /npages exch def + /j exch def + /i exch def + /str 10 string def + npages 1 gt { + gsave + coordfont setfont + 0 0 moveto + (\() show i str cvs show (,) show j str cvs show (\)) show + grestore + } if +} bind def + +/set_font { + findfont exch + scalefont setfont +} def + +% draw aligned label in bounding box aligned to current point +/alignedtext { % width adj text + /text exch def + /adj exch def + /width exch def + gsave + width 0 gt { + text stringwidth pop adj mul 0 rmoveto + } if + [] 0 setdash + text show + grestore +} def + +/boxprim { % xcorner ycorner xsize ysize + 4 2 roll + moveto + 2 copy + exch 0 rlineto + 0 exch rlineto + pop neg 0 rlineto + closepath +} bind def + +/ellipse_path { + /ry exch def + /rx exch def + /y exch def + /x exch def + matrix currentmatrix + newpath + x y translate + rx ry scale + 0 0 1 0 360 arc + setmatrix +} bind def + +/endpage { showpage } bind def +/showpage { } def + +/layercolorseq + [ % layer color sequence - darkest to lightest + [0 0 0] + [.2 .8 .8] + [.4 .8 .8] + [.6 .8 .8] + [.8 .8 .8] + ] +def + +/layerlen layercolorseq length def + +/setlayer {/maxlayer exch def /curlayer exch def + layercolorseq curlayer 1 sub layerlen mod get + aload pop sethsbcolor + /nodecolor {nopcolor} def + /edgecolor {nopcolor} def + /graphcolor {nopcolor} def +} bind def + +/onlayer { curlayer ne {invis} if } def + +/onlayers { + /myupper exch def + /mylower exch def + curlayer mylower lt + curlayer myupper gt + or + {invis} if +} def + +/curlayer 0 def + +%%EndResource +%%EndProlog +%%BeginSetup +14 default-font-family set_font +1 setmiterlimit +% /arrowlength 10 def +% /arrowwidth 5 def + +% make sure pdfmark is harmless for PS-interpreters other than Distiller +/pdfmark where {pop} {userdict /pdfmark /cleartomark load put} ifelse +% make '<<' and '>>' safe on PS Level 1 devices +/languagelevel where {pop languagelevel}{1} ifelse +2 lt { + userdict (<<) cvn ([) cvn load put + userdict (>>) cvn ([) cvn load put +} if + +%%EndSetup +%%Page: 1 1 +%%PageBoundingBox: 36 36 112 152 +%%PageOrientation: Portrait +gsave +36 36 76 116 boxprim clip newpath +36 36 translate +0 0 1 beginpage +1.0000 set_scale +4 4 translate 0 rotate +0.167 0.600 1.000 graphcolor +0.167 0.600 1.000 graphcolor +newpath -6 -6 moveto +-6 114 lineto +74 114 lineto +74 -6 lineto +closepath +fill +0.167 0.600 1.000 graphcolor +newpath -6 -6 moveto +-6 114 lineto +74 114 lineto +74 -6 lineto +closepath +stroke +0.000 0.000 0.000 graphcolor +14.00 /Times-Roman set_font +% Type() +[ /Rect [ 7 72 61 108 ] + /Border [ 0 0 0 ] + /Action << /Subtype /URI /URI (books/bookvol10.pamphlet) >> + /Subtype /Link +/ANN pdfmark +gsave 10 dict begin +filled +0.537 0.247 0.902 nodecolor +0.537 0.247 0.902 nodecolor +newpath 61 108 moveto +7 108 lineto +7 72 lineto +61 72 lineto +closepath +fill +0.537 0.247 0.902 nodecolor +newpath 61 108 moveto +7 108 lineto +7 72 lineto +61 72 lineto +closepath +stroke +gsave 10 dict begin +0.000 0.000 0.000 nodecolor +15 85 moveto +(Type\(\)) +[7.2 6.96 6.96 6.24 4.56 4.56] +xshow +end grestore +end grestore +% Category +[ /Rect [ 0 0 68 36 ] + /Border [ 0 0 0 ] + /Action << /Subtype /URI /URI (books/bookvol10.pamphlet) >> + /Subtype /Link +/ANN pdfmark +gsave 10 dict begin +filled +0.537 0.247 0.902 nodecolor +0.537 0.247 0.902 nodecolor +newpath 68 36 moveto +0 36 lineto +0 0 lineto +68 0 lineto +closepath +fill +0.537 0.247 0.902 nodecolor +newpath 68 36 moveto +0 36 lineto +0 0 lineto +68 0 lineto +closepath +stroke +gsave 10 dict begin +0.000 0.000 0.000 nodecolor +8 13 moveto +(Category) +[9.36 6.24 3.84 6.24 6.96 6.96 5.04 6.96] +xshow +end grestore +end grestore +% Type()->Category +newpath 34 72 moveto +34 64 34 55 34 46 curveto +stroke +gsave 10 dict begin +solid +1 setlinewidth +0.000 0.000 0.000 edgecolor +newpath 38 46 moveto +34 36 lineto +31 46 lineto +closepath +fill +0.000 0.000 0.000 edgecolor +newpath 38 46 moveto +34 36 lineto +31 46 lineto +closepath +stroke +end grestore +endpage +showpage +grestore +%%PageTrailer +%%EndPage: 1 +%%Trailer +%%Pages: 1 +end +restore +%%EOF diff --git a/books/ps/v10unaryrecursiveaggregate.ps b/books/ps/v10unaryrecursiveaggregate.ps new file mode 100644 index 0000000..af2b2d4 --- /dev/null +++ b/books/ps/v10unaryrecursiveaggregate.ps @@ -0,0 +1,503 @@ +%!PS-Adobe-2.0 +%%Creator: dot version 2.8 (Thu Sep 14 20:34:11 UTC 2006) +%%For: (root) root +%%Title: pic +%%Pages: (atend) +%%BoundingBox: 36 36 256 440 +%%EndComments +save +%%BeginProlog +/DotDict 200 dict def +DotDict begin + +/setupLatin1 { +mark +/EncodingVector 256 array def + EncodingVector 0 + +ISOLatin1Encoding 0 255 getinterval putinterval +EncodingVector 45 /hyphen put + +% Set up ISO Latin 1 character encoding +/starnetISO { + dup dup findfont dup length dict begin + { 1 index /FID ne { def }{ pop pop } ifelse + } forall + /Encoding EncodingVector def + currentdict end definefont +} def +/Times-Roman starnetISO def +/Times-Italic starnetISO def +/Times-Bold starnetISO def +/Times-BoldItalic starnetISO def +/Helvetica starnetISO def +/Helvetica-Oblique starnetISO def +/Helvetica-Bold starnetISO def +/Helvetica-BoldOblique starnetISO def +/Courier starnetISO def +/Courier-Oblique starnetISO def +/Courier-Bold starnetISO def +/Courier-BoldOblique starnetISO def +cleartomark +} bind def + +%%BeginResource: procset graphviz 0 0 +/coord-font-family /Times-Roman def +/default-font-family /Times-Roman def +/coordfont coord-font-family findfont 8 scalefont def + +/InvScaleFactor 1.0 def +/set_scale { + dup 1 exch div /InvScaleFactor exch def + dup scale +} bind def + +% styles +/solid { [] 0 setdash } bind def +/dashed { [9 InvScaleFactor mul dup ] 0 setdash } bind def +/dotted { [1 InvScaleFactor mul 6 InvScaleFactor mul] 0 setdash } bind def +/invis {/fill {newpath} def /stroke {newpath} def /show {pop newpath} def} bind def +/bold { 2 setlinewidth } bind def +/filled { } bind def +/unfilled { } bind def +/rounded { } bind def +/diagonals { } bind def + +% hooks for setting color +/nodecolor { sethsbcolor } bind def +/edgecolor { sethsbcolor } bind def +/graphcolor { sethsbcolor } bind def +/nopcolor {pop pop pop} bind def + +/beginpage { % i j npages + /npages exch def + /j exch def + /i exch def + /str 10 string def + npages 1 gt { + gsave + coordfont setfont + 0 0 moveto + (\() show i str cvs show (,) show j str cvs show (\)) show + grestore + } if +} bind def + +/set_font { + findfont exch + scalefont setfont +} def + +% draw aligned label in bounding box aligned to current point +/alignedtext { % width adj text + /text exch def + /adj exch def + /width exch def + gsave + width 0 gt { + text stringwidth pop adj mul 0 rmoveto + } if + [] 0 setdash + text show + grestore +} def + +/boxprim { % xcorner ycorner xsize ysize + 4 2 roll + moveto + 2 copy + exch 0 rlineto + 0 exch rlineto + pop neg 0 rlineto + closepath +} bind def + +/ellipse_path { + /ry exch def + /rx exch def + /y exch def + /x exch def + matrix currentmatrix + newpath + x y translate + rx ry scale + 0 0 1 0 360 arc + setmatrix +} bind def + +/endpage { showpage } bind def +/showpage { } def + +/layercolorseq + [ % layer color sequence - darkest to lightest + [0 0 0] + [.2 .8 .8] + [.4 .8 .8] + [.6 .8 .8] + [.8 .8 .8] + ] +def + +/layerlen layercolorseq length def + +/setlayer {/maxlayer exch def /curlayer exch def + layercolorseq curlayer 1 sub layerlen mod get + aload pop sethsbcolor + /nodecolor {nopcolor} def + /edgecolor {nopcolor} def + /graphcolor {nopcolor} def +} bind def + +/onlayer { curlayer ne {invis} if } def + +/onlayers { + /myupper exch def + /mylower exch def + curlayer mylower lt + curlayer myupper gt + or + {invis} if +} def + +/curlayer 0 def + +%%EndResource +%%EndProlog +%%BeginSetup +14 default-font-family set_font +1 setmiterlimit +% /arrowlength 10 def +% /arrowwidth 5 def + +% make sure pdfmark is harmless for PS-interpreters other than Distiller +/pdfmark where {pop} {userdict /pdfmark /cleartomark load put} ifelse +% make '<<' and '>>' safe on PS Level 1 devices +/languagelevel where {pop languagelevel}{1} ifelse +2 lt { + userdict (<<) cvn ([) cvn load put + userdict (>>) cvn ([) cvn load put +} if + +%%EndSetup +%%Page: 1 1 +%%PageBoundingBox: 36 36 256 440 +%%PageOrientation: Portrait +gsave +36 36 220 404 boxprim clip newpath +36 36 translate +0 0 1 beginpage +1.0000 set_scale +4 4 translate 0 rotate +0.167 0.600 1.000 graphcolor +0.167 0.600 1.000 graphcolor +newpath -6 -6 moveto +-6 402 lineto +218 402 lineto +218 -6 lineto +closepath +fill +0.167 0.600 1.000 graphcolor +newpath -6 -6 moveto +-6 402 lineto +218 402 lineto +218 -6 lineto +closepath +stroke +0.000 0.000 0.000 graphcolor +14.00 /Times-Roman set_font +% UnaryRecursiveAggregate(a:Type) +[ /Rect [ 0 360 212 396 ] + /Border [ 0 0 0 ] + /Action << /Subtype /URI /URI (books/bookvol10.pamphlet) >> + /Subtype /Link +/ANN pdfmark +gsave 10 dict begin +filled +0.537 0.247 0.902 nodecolor +0.537 0.247 0.902 nodecolor +newpath 212 396 moveto +0 396 lineto +0 360 lineto +212 360 lineto +closepath +fill +0.537 0.247 0.902 nodecolor +newpath 212 396 moveto +0 396 lineto +0 360 lineto +212 360 lineto +closepath +stroke +gsave 10 dict begin +0.000 0.000 0.000 nodecolor +7 373 moveto +(UnaryRecursiveAggregate\(a:Type\)) +[9.6 6.96 6.24 5.04 6.96 9.12 6.24 6.24 6.96 4.8 5.52 3.84 6.48 6.24 9.84 6.96 7.2 4.8 6.24 6.72 6.24 3.84 6.24 4.56 6.24 3.84 7.2 6.96 6.96 6.24 4.56] +xshow +end grestore +end grestore +% RecursiveAggregate(a:Type) +[ /Rect [ 18 288 194 324 ] + /Border [ 0 0 0 ] + /Action << /Subtype /URI /URI (books/bookvol10.pamphlet) >> + /Subtype /Link +/ANN pdfmark +gsave 10 dict begin +filled +0.537 0.247 0.902 nodecolor +0.537 0.247 0.902 nodecolor +newpath 194 324 moveto +18 324 lineto +18 288 lineto +194 288 lineto +closepath +fill +0.537 0.247 0.902 nodecolor +newpath 194 324 moveto +18 324 lineto +18 288 lineto +194 288 lineto +closepath +stroke +gsave 10 dict begin +0.000 0.000 0.000 nodecolor +25 301 moveto +(RecursiveAggregate\(a:Type\)) +[9.12 6.24 6.24 6.96 4.8 5.52 3.84 6.48 6.24 9.84 6.96 7.2 4.8 6.24 6.72 6.24 3.84 6.24 4.56 6.24 3.84 7.2 6.96 6.96 6.24 4.56] +xshow +end grestore +end grestore +% UnaryRecursiveAggregate(a:Type)->RecursiveAggregate(a:Type) +newpath 106 360 moveto +106 352 106 343 106 334 curveto +stroke +gsave 10 dict begin +solid +1 setlinewidth +0.000 0.000 0.000 edgecolor +newpath 110 334 moveto +106 324 lineto +103 334 lineto +closepath +fill +0.000 0.000 0.000 edgecolor +newpath 110 334 moveto +106 324 lineto +103 334 lineto +closepath +stroke +end grestore +% HomogeneousAggregate(a:Type) +[ /Rect [ 5 216 207 252 ] + /Border [ 0 0 0 ] + /Action << /Subtype /URI /URI (books/bookvol10.pamphlet) >> + /Subtype /Link +/ANN pdfmark +gsave 10 dict begin +filled +0.537 0.247 0.902 nodecolor +0.537 0.247 0.902 nodecolor +newpath 207 252 moveto +5 252 lineto +5 216 lineto +207 216 lineto +closepath +fill +0.537 0.247 0.902 nodecolor +newpath 207 252 moveto +5 252 lineto +5 216 lineto +207 216 lineto +closepath +stroke +gsave 10 dict begin +0.000 0.000 0.000 nodecolor +12 229 moveto +(HomogeneousAggregate\(a:Type\)) +[10.08 6.96 10.8 6.96 6.72 6.24 6.96 6.24 6.96 6.96 5.52 9.84 6.96 7.2 4.8 6.24 6.72 6.24 3.84 6.24 4.56 6.24 3.84 7.2 6.96 6.96 6.24 4.56] +xshow +end grestore +end grestore +% RecursiveAggregate(a:Type)->HomogeneousAggregate(a:Type) +newpath 106 288 moveto +106 280 106 271 106 262 curveto +stroke +gsave 10 dict begin +solid +1 setlinewidth +0.000 0.000 0.000 edgecolor +newpath 110 262 moveto +106 252 lineto +103 262 lineto +closepath +fill +0.000 0.000 0.000 edgecolor +newpath 110 262 moveto +106 252 lineto +103 262 lineto +closepath +stroke +end grestore +% Aggregate() +[ /Rect [ 64 144 148 180 ] + /Border [ 0 0 0 ] + /Action << /Subtype /URI /URI (books/bookvol10.pamphlet) >> + /Subtype /Link +/ANN pdfmark +gsave 10 dict begin +filled +0.537 0.247 0.902 nodecolor +0.537 0.247 0.902 nodecolor +newpath 148 180 moveto +64 180 lineto +64 144 lineto +148 144 lineto +closepath +fill +0.537 0.247 0.902 nodecolor +newpath 148 180 moveto +64 180 lineto +64 144 lineto +148 144 lineto +closepath +stroke +gsave 10 dict begin +0.000 0.000 0.000 nodecolor +71 157 moveto +(Aggregate\(\)) +[9.84 6.96 7.2 4.8 6.24 6.72 6.24 3.84 6.24 4.56 4.56] +xshow +end grestore +end grestore +% HomogeneousAggregate(a:Type)->Aggregate() +newpath 106 216 moveto +106 208 106 199 106 190 curveto +stroke +gsave 10 dict begin +solid +1 setlinewidth +0.000 0.000 0.000 edgecolor +newpath 110 190 moveto +106 180 lineto +103 190 lineto +closepath +fill +0.000 0.000 0.000 edgecolor +newpath 110 190 moveto +106 180 lineto +103 190 lineto +closepath +stroke +end grestore +% Type() +[ /Rect [ 79 72 133 108 ] + /Border [ 0 0 0 ] + /Action << /Subtype /URI /URI (books/bookvol10.pamphlet) >> + /Subtype /Link +/ANN pdfmark +gsave 10 dict begin +filled +0.537 0.247 0.902 nodecolor +0.537 0.247 0.902 nodecolor +newpath 133 108 moveto +79 108 lineto +79 72 lineto +133 72 lineto +closepath +fill +0.537 0.247 0.902 nodecolor +newpath 133 108 moveto +79 108 lineto +79 72 lineto +133 72 lineto +closepath +stroke +gsave 10 dict begin +0.000 0.000 0.000 nodecolor +87 85 moveto +(Type\(\)) +[7.2 6.96 6.96 6.24 4.56 4.56] +xshow +end grestore +end grestore +% Aggregate()->Type() +newpath 106 144 moveto +106 136 106 127 106 118 curveto +stroke +gsave 10 dict begin +solid +1 setlinewidth +0.000 0.000 0.000 edgecolor +newpath 110 118 moveto +106 108 lineto +103 118 lineto +closepath +fill +0.000 0.000 0.000 edgecolor +newpath 110 118 moveto +106 108 lineto +103 118 lineto +closepath +stroke +end grestore +% Category +[ /Rect [ 72 0 140 36 ] + /Border [ 0 0 0 ] + /Action << /Subtype /URI /URI (books/bookvol10.pamphlet) >> + /Subtype /Link +/ANN pdfmark +gsave 10 dict begin +filled +0.537 0.247 0.902 nodecolor +0.537 0.247 0.902 nodecolor +newpath 140 36 moveto +72 36 lineto +72 0 lineto +140 0 lineto +closepath +fill +0.537 0.247 0.902 nodecolor +newpath 140 36 moveto +72 36 lineto +72 0 lineto +140 0 lineto +closepath +stroke +gsave 10 dict begin +0.000 0.000 0.000 nodecolor +80 13 moveto +(Category) +[9.36 6.24 3.84 6.24 6.96 6.96 5.04 6.96] +xshow +end grestore +end grestore +% Type()->Category +newpath 106 72 moveto +106 64 106 55 106 46 curveto +stroke +gsave 10 dict begin +solid +1 setlinewidth +0.000 0.000 0.000 edgecolor +newpath 110 46 moveto +106 36 lineto +103 46 lineto +closepath +fill +0.000 0.000 0.000 edgecolor +newpath 110 46 moveto +106 36 lineto +103 46 lineto +closepath +stroke +end grestore +endpage +showpage +grestore +%%PageTrailer +%%EndPage: 1 +%%Trailer +%%Pages: 1 +end +restore +%%EOF diff --git a/changelog b/changelog index a9d52fa..a9fc94f 100644 --- a/changelog +++ b/changelog @@ -1,3 +1,38 @@ +20080911 tpd src/algebra/Makefile remove coerce.spad +20080911 tpd books/ps/v10unaryrecursiveaggregate.ps add image +20080911 tpd books/ps/v10type.ps add image +20080911 tpd books/ps/v10tableaggregate.ps add image +20080911 tpd books/ps/v10stringaggregate.ps add image +20080911 tpd books/ps/v10streamaggregate.ps add image +20080911 tpd books/ps/v10stackaggregate.ps add image +20080911 tpd books/ps/v10retractableto.ps add image +20080911 tpd books/ps/v10recursiveaggregate.ps add image +20080911 tpd books/ps/v10queueaggregate.ps add image +20080911 tpd books/ps/v10priorityqueueaggregate.ps add image +20080911 tpd books/ps/v10onedimensionalarrayaggregate.ps add image +20080911 tpd books/ps/v10multidictionary.ps add image +20080911 tpd books/ps/v10listaggregate.ps add image +20080911 tpd books/ps/v10linearaggregate.ps add image +20080911 tpd books/ps/v10konvert.ps add image +20080911 tpd books/ps/v10koerce.ps add image +20080911 tpd books/ps/v10keyeddictionary.ps add image +20080911 tpd books/ps/v10indexedaggregate.ps add image +20080911 tpd books/ps/v10homogeneousaggregate.ps add image +20080911 tpd books/ps/v10finitelinearaggregate.ps add image +20080911 tpd books/ps/v10extensiblelinearaggregate.ps add image +20080911 tpd books/ps/v10eltableaggregate.ps add image +20080911 tpd books/ps/v10eltab.ps add image +20080911 tpd books/ps/v10doublylinkedaggregate.ps add image +20080911 tpd books/ps/v10dictionaryoperations.ps add image +20080911 tpd books/ps/v10dictionary.ps add image +20080911 tpd books/ps/v10dequeueaggregate.ps add image +20080911 tpd books/ps/v10collection.ps add image +20080911 tpd books/ps/v10binaryrecursiveaggregate.ps add image +20080911 tpd books/ps/v10bagaggregate.ps add image +20080911 tpd books/ps/v10associationlistaggregate.ps add image +20080911 tpd books/ps/v10agg.ps add image +20080911 tpd src/algebra/coerce.spad merge into bookvol10 +20080911 tpd books/bookvol10 document aggcat, coerce layers 20080911 tpd books/bookvol11 fix background image 20080909 tpd books/bookvol0 change \over to \frac 20080908 tpd books/bookvol10 latex cleanup diff --git a/src/algebra/Makefile.pamphlet b/src/algebra/Makefile.pamphlet index 7ac4e51..59f9a08 100644 --- a/src/algebra/Makefile.pamphlet +++ b/src/algebra/Makefile.pamphlet @@ -197,7 +197,6 @@ LAYER0=\ ituple.spad.pamphlet (ITFUN2 ITFUN3 ITUPLE) mkrecord.spad.pamphlet (MKRECORD) pcurve.spad.pamphlet (PPCURVE PSCURVE) -coerce.spad.pamphlet (TYPE KOERCE KONVERT RETRACT) \end{verbatim} <>= @@ -727,10 +726,6 @@ LAYER16=\ \subsubsection{Completed spad files} \begin{verbatim} algext.spad.pamphlet (SAE) -aggcat.spad.pamphlet (AGG HOAGG CLAGG BGAGG SKAGG QUAGG DQAGG PRQAGG DIOPS - DIAGG MDAGG SETAGG FSAGG MSETAGG OMSAGG KDAGG ELTAB - ELTAGG ISAGG TBAGG RCAGG BRAGG DLAGG URAGG STAGG LNAGG - FLAGG A1AGG ELAGG LSAGG ALAGG SRAGG BTAGG ITAGG) aggcat2.spad.pamphlet (FLAGG2 FSAGG2) galfact.spad.pamphlet (GALFACT) intfact.spad.pamphlet (PRIMES IROOT INTFACT) @@ -1201,7 +1196,7 @@ SPADFILES= \ ${OUTSRC}/c02.spad ${OUTSRC}/c05.spad ${OUTSRC}/c06.spad \ ${OUTSRC}/card.spad ${OUTSRC}/carten.spad ${OUTSRC}/catdef.spad \ ${OUTSRC}/cden.spad ${OUTSRC}/clifford.spad ${OUTSRC}/clip.spad \ - ${OUTSRC}/cmplxrt.spad ${OUTSRC}/coerce.spad ${OUTSRC}/color.spad \ + ${OUTSRC}/cmplxrt.spad ${OUTSRC}/color.spad \ ${OUTSRC}/combfunc.spad ${OUTSRC}/combinat.spad ${OUTSRC}/complet.spad \ ${OUTSRC}/constant.spad ${OUTSRC}/contfrac.spad ${OUTSRC}/cont.spad \ ${OUTSRC}/coordsys.spad ${OUTSRC}/cra.spad ${OUTSRC}/crfp.spad \ @@ -1361,7 +1356,7 @@ DOCFILES= \ ${DOC}/c02.spad.dvi ${DOC}/c05.spad.dvi ${DOC}/c06.spad.dvi \ ${DOC}/card.spad.dvi ${DOC}/carten.spad.dvi ${DOC}/catdef.spad.dvi \ ${DOC}/cden.spad.dvi ${DOC}/clifford.spad.dvi ${DOC}/clip.spad.dvi \ - ${DOC}/cmplxrt.spad.dvi ${DOC}/coerce.spad.dvi ${DOC}/color.spad.dvi \ + ${DOC}/cmplxrt.spad.dvi ${DOC}/color.spad.dvi \ ${DOC}/combfunc.spad.dvi ${DOC}/combinat.spad.dvi ${DOC}/complet.spad.dvi \ ${DOC}/constant.spad.dvi ${DOC}/contfrac.spad.dvi ${DOC}/cont.spad.dvi \ ${DOC}/coordsys.spad.dvi ${DOC}/cra.spad.dvi ${DOC}/crfp.spad.dvi \ diff --git a/src/algebra/coerce.spad.pamphlet b/src/algebra/coerce.spad.pamphlet deleted file mode 100644 index ad24e99..0000000 --- a/src/algebra/coerce.spad.pamphlet +++ /dev/null @@ -1,167 +0,0 @@ -\documentclass{article} -\usepackage{axiom} -\begin{document} -\title{\$SPAD/src/algebra coerce.spad} -\author{Richard Jenks, Manuel Bronstein} -\maketitle -\begin{abstract} -\end{abstract} -\eject -\tableofcontents -\eject -\section{category TYPE Type} -<>= -"TYPE" -> "CATEGORY" -"Type()" -> "Category" -@ -<>= -)abbrev category TYPE Type -++ The new fundamental Type (keeping Object for 1.5 as well) -++ Author: Richard Jenks -++ Date Created: 14 May 1992 -++ Date Last Updated: 14 May 1992 -++ Description: The fundamental Type; -Type(): Category == with nil - -@ -\section{category KOERCE CoercibleTo} -<>= -"KOERCE" -> "CATEGORY" -"CoercibleTo(a:Type)" -> "Category" -"CoercibleTo(OutputForm)" -> - "CoercibleTo(a:Type)" -@ -<>= -)abbrev category KOERCE CoercibleTo -++ Category for coerce -++ Author: Manuel Bronstein -++ Date Created: ??? -++ Date Last Updated: 14 May 1991 -++ Description: -++ A is coercible to B means any element of A can automatically be -++ converted into an element of B by the interpreter. -CoercibleTo(S:Type): Category == with - coerce: % -> S - ++ coerce(a) transforms a into an element of S. - -@ -\section{category KONVERT ConvertibleTo} -<>= -"KONVERT" -> "CATEGORY" -"ConvertibleTo(a:Type)" -> "Category" -"ConvertibleTo(DoubleFloat)" -> "ConvertibleTo(a:Type)" -"ConvertibleTo(Float)" -> "ConvertibleTo(a:Type)" -"ConvertibleTo(InputForm)" -> "ConvertibleTo(a:Type)" -"ConvertibleTo(Integer)" -> "ConvertibleTo(a:Type)" -"ConvertibleTo(Pattern(Integer))" -> "ConvertibleTo(a:Type)" -"ConvertibleTo(Pattern(Float))" -> "ConvertibleTo(a:Type)" -"ConvertibleTo(Complex(Float))" -> "ConvertibleTo(a:Type)" -"ConvertibleTo(Complex(DoubleFloat))" -> "ConvertibleTo(a:Type)" -"ConvertibleTo(String)" -> "ConvertibleTo(a:Type)" -"ConvertibleTo(Symbol)" -> "ConvertibleTo(a:Type)" -"ConvertibleTo(SExpression)" -> "ConvertibleTo(a:Type)" -"ConvertibleTo(Pattern(Base))" -> "ConvertibleTo(a:Type)" -"ConvertibleTo(List(Integer))" -> "ConvertibleTo(a:Type)" -"ConvertibleTo(List(Character))" -> "ConvertibleTo(a:Type)" -"ConvertibleTo(UnivariatePolynomialCategory(CommutativeRing))" -> - "ConvertibleTo(a:Type)" -@ -<>= -)abbrev category KONVERT ConvertibleTo -++ Category for convert -++ Author: Manuel Bronstein -++ Date Created: ??? -++ Date Last Updated: 14 May 1991 -++ Description: -++ A is convertible to B means any element of A -++ can be converted into an element of B, -++ but not automatically by the interpreter. -ConvertibleTo(S:Type): Category == with - convert: % -> S - ++ convert(a) transforms a into an element of S. - -@ -\section{category RETRACT RetractableTo} -<>= -"RETRACT" -> "CATEGORY" -"RetractableTo(a:Type)" -> "Category" -"RetractableTo(SetCategory)" -> "RetractableTo(a:Type)" -"RetractableTo(Symbol)" -> "RetractableTo(a:Type)" -"RetractableTo(Integer)" -> "RetractableTo(a:Type)" -"RetractableTo(NonNegativeInteger)" -> "RetractableTo(a:Type)" -"RetractableTo(Fraction(Integer))" -> "RetractableTo(a:Type)" -"RetractableTo(Float)" -> "RetractableTo(a:Type)" -"RetractableTo(Kernel(ExpressionSpace))" -> "RetractableTo(a:Type)" -"RetractableTo(CommutativeRing)" -> "RetractableTo(a:Type)" -@ -<>= -)abbrev category RETRACT RetractableTo -++ Category for retract -++ Author: ??? -++ Date Created: ??? -++ Date Last Updated: 14 May 1991 -++ Description: -++ A is retractable to B means that some elementsif A can be converted -++ into elements of B and any element of B can be converted into an -++ element of A. -RetractableTo(S: Type): Category == with - coerce: S -> % - ++ coerce(a) transforms a into an element of %. - retractIfCan: % -> Union(S,"failed") - ++ retractIfCan(a) transforms a into an element of S if possible. - ++ Returns "failed" if a cannot be made into an element of S. - retract: % -> S - ++ retract(a) transforms a into an element of S if possible. - ++ Error: if a cannot be made into an element of S. - add - retract(s) == - (u:=retractIfCan s) case "failed" => error "not retractable" - u - -@ -\section{License} -<>= ---Copyright (c) 1991-2002, The Numerical ALgorithms Group Ltd. ---All rights reserved. --- ---Redistribution and use in source and binary forms, with or without ---modification, are permitted provided that the following conditions are ---met: --- --- - Redistributions of source code must retain the above copyright --- notice, this list of conditions and the following disclaimer. --- --- - Redistributions in binary form must reproduce the above copyright --- notice, this list of conditions and the following disclaimer in --- the documentation and/or other materials provided with the --- distribution. --- --- - Neither the name of The Numerical ALgorithms Group Ltd. nor the --- names of its contributors may be used to endorse or promote products --- derived from this software without specific prior written permission. --- ---THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS ---IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED ---TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A ---PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT OWNER ---OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, ---EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, ---PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR ---PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF ---LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING ---NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS ---SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. -@ -<<*>>= -<> - -<> -<> -<> -<> -@ -\eject -\begin{thebibliography}{99} -\bibitem{1} nothing -\end{thebibliography} -\end{document}