{VERSION 5 0 "IBM INTEL NT" "5.0" } {USTYLETAB {CSTYLE "Maple Input" -1 0 "Courier" 0 1 255 0 0 1 0 1 0 0 1 0 0 0 0 1 }{CSTYLE "2D Math" -1 2 "Times" 0 1 0 0 0 0 0 0 2 0 0 0 0 0 0 1 }{CSTYLE "2D Comment" 2 18 "" 0 1 0 0 0 0 0 0 0 0 0 0 0 0 0 1 } {CSTYLE "Help Heading" -1 26 "" 1 14 0 0 0 0 0 1 0 0 0 0 0 0 0 1 } {CSTYLE "" -1 256 "Helvetica" 1 14 128 0 0 1 0 0 2 0 0 0 0 0 0 1 } {CSTYLE "" -1 257 "" 0 24 0 0 255 1 0 0 0 0 0 0 0 0 0 1 }{CSTYLE "" -1 258 "Helvetica" 0 1 128 0 0 1 0 0 0 0 0 0 0 0 0 1 }{CSTYLE "" -1 277 "" 0 1 255 0 0 1 0 0 0 0 0 0 0 0 0 0 }{CSTYLE "" -1 285 "" 1 14 0 0 1 1 0 0 0 0 0 0 0 0 0 0 }{CSTYLE "" -1 286 "" 0 1 0 0 255 1 0 0 0 0 0 0 0 0 0 0 }{CSTYLE "" -1 287 "" 0 14 0 0 1 1 0 0 0 0 0 0 0 0 0 1 } {CSTYLE "" -1 288 "" 0 1 0 0 1 1 0 0 0 0 0 0 0 0 0 1 }{CSTYLE "" -1 289 "" 1 14 0 0 0 0 0 0 0 0 0 0 0 0 0 1 }{CSTYLE "" -1 290 "" 0 1 0 0 0 0 0 0 0 0 0 0 0 0 0 1 }{CSTYLE "" -1 291 "" 0 1 0 0 0 0 0 0 1 0 0 0 0 0 0 1 }{CSTYLE "" -1 292 "" 0 1 0 0 1 1 0 0 0 0 0 0 0 0 0 1 } {CSTYLE "" -1 294 "" 0 1 0 0 0 0 1 0 0 0 0 0 0 0 0 0 }{CSTYLE "" -1 295 "" 0 1 0 0 0 0 1 0 0 0 0 0 0 0 0 0 }{CSTYLE "" -1 296 "" 0 1 0 0 0 0 1 0 0 0 0 0 0 0 0 0 }{CSTYLE "" -1 297 "" 0 1 0 0 0 0 1 0 0 0 0 0 0 0 0 0 }{CSTYLE "" -1 298 "" 0 1 0 0 0 0 1 0 0 0 0 0 0 0 0 0 } {CSTYLE "" -1 299 "" 1 18 0 0 1 1 0 1 0 0 0 0 0 0 0 0 }{CSTYLE "" -1 300 "" 0 1 0 0 1 1 0 0 0 0 0 0 0 0 0 0 }{CSTYLE "" -1 301 "" 0 1 0 0 1 1 0 0 0 0 0 0 0 0 0 0 }{CSTYLE "" -1 302 "" 1 18 0 0 1 1 0 1 0 0 0 0 0 0 0 0 }{CSTYLE "" -1 303 "" 0 1 0 0 1 1 0 0 0 0 0 0 0 0 0 0 } {CSTYLE "" -1 304 "" 0 1 0 0 1 1 0 0 0 0 0 0 0 0 0 0 }{CSTYLE "" -1 305 "" 1 18 0 0 1 1 0 1 0 0 0 0 0 0 0 0 }{CSTYLE "" -1 306 "" 0 1 0 0 1 1 1 0 0 0 0 0 0 0 0 0 }{CSTYLE "" -1 307 "" 0 1 0 0 1 1 0 0 0 0 0 0 0 0 0 0 }{CSTYLE "" -1 308 "" 0 1 0 0 1 1 0 0 0 0 0 0 0 0 0 0 } {CSTYLE "" -1 309 "" 0 1 0 0 1 1 0 0 0 0 0 0 0 0 0 0 }{PSTYLE "Normal " -1 0 1 {CSTYLE "" -1 -1 "Times" 1 12 0 0 0 1 2 2 2 2 2 2 1 1 1 1 }1 1 0 0 0 0 1 0 1 0 2 2 0 1 }{PSTYLE "Heading 1" -1 3 1 {CSTYLE "" -1 -1 "Times" 1 18 0 0 0 1 2 1 2 2 2 2 1 1 1 1 }1 1 0 0 8 4 1 0 1 0 2 2 0 1 }{PSTYLE "Heading 2" -1 4 1 {CSTYLE "" -1 -1 "Times" 1 14 0 0 0 1 2 1 2 2 2 2 1 1 1 1 }1 1 0 0 8 2 1 0 1 0 2 2 0 1 }{PSTYLE "Title" -1 256 1 {CSTYLE "" -1 -1 "Times" 1 18 0 0 0 1 2 1 1 2 2 2 1 1 1 1 }1 1 0 0 12 12 1 0 1 0 2 2 19 1 }{PSTYLE "Normal" -1 257 1 {CSTYLE "" -1 -1 "Times" 1 12 0 0 0 1 2 2 2 2 2 2 1 1 1 1 }1 1 0 0 0 0 1 0 1 0 2 2 0 1 }{PSTYLE "Normal" -1 258 1 {CSTYLE "" -1 -1 "Times" 1 12 0 0 0 1 2 1 2 2 2 2 1 1 1 1 }1 1 0 0 0 0 1 0 1 0 2 2 0 1 }{PSTYLE "Normal" -1 259 1 {CSTYLE "" -1 -1 "Times" 1 14 0 0 0 1 2 2 2 2 2 2 1 1 1 1 }1 1 0 0 0 0 1 0 1 0 2 2 0 1 }} {SECT 0 {EXCHG {PARA 256 "" 0 "" {TEXT 257 46 "MLC Lab Visit - Lab 01 \+ - Introduction to Maple" }}{PARA 0 "" 0 "" {TEXT 256 45 "Mth 355 (a.k. a. Mth 399) Jan 8, 2003 Maple 7" }}{PARA 0 "" 0 "" {TEXT -1 34 "Revis ed Jan 10, 2003, Jan 28, 2003" }}{PARA 0 "" 0 "" {TEXT 258 16 "Bent E. Petersen" }{TEXT -1 0 "" }}{PARA 0 "" 0 "" {TEXT -1 0 "" }}{PARA 259 "" 0 "" {TEXT 277 298 "There are 3 problems below. Problem solutions a re due Jan 15, 2003. There's a lot to absorb. This initial selection o f problems will take time to solve. Do not wait to the last minute! Em ail your solutions to me as Maple worksheet attachments. Your workshee t must execute correctly for full credit." }}{PARA 0 "" 0 "" {TEXT -1 0 "" }}}{SECT 1 {PARA 3 "" 0 "" {TEXT -1 12 "Introduction" }}{EXCHG {PARA 0 "" 0 "" {TEXT -1 0 "" }}{PARA 0 "" 0 "" {TEXT 288 276 "If you \+ are viewing the MWS version of this document you will note all the Map le output has been removed. You will have to execute each command (by \+ pressing Enter when the cursor is on the command line) to see the outp ut. Take the opportunity to experiment! Change some things." }}{PARA 0 "" 0 "" {TEXT -1 0 "" }}{PARA 0 "" 0 "" {TEXT -1 123 "The static PDF version of this document shows all of the Maple output. It is useful \+ to look at when Maple is not available." }}{PARA 0 "" 0 "" {TEXT -1 0 "" }{TEXT 26 0 "" }}{PARA 0 "" 0 "" {TEXT -1 365 "Maple is a CAS, that is, a Computer Algebra System. It performs mathematical operations sy mbolically, but a large number of robust numerical routines are also b uilt in. Maple can be used interactively as a rather fancy calculator, but it can also be used as a flexible programming language. In this i ntroduction we will look both at interactive use and programming." }} {PARA 0 "" 0 "" {TEXT -1 0 "" }}}{EXCHG {PARA 0 "> " 0 "" {MPLTEXT 1 0 0 "" }}}}{SECT 1 {PARA 3 "" 0 "" {TEXT -1 15 "Getting Started" }} {EXCHG {PARA 0 "" 0 "" {TEXT -1 0 "" }}{PARA 0 "" 0 "" {TEXT -1 0 "" } {TEXT 285 0 "" }{TEXT -1 507 "Scroll down to the restart command below . Position the cursor on the line containg the restart command and pre ss Enter. Maple will execute the restart command and then position the cursor on the next command, skipping over all the intervening text. N ow press Enter to execute the next command, etc., or be brave and edit it first. Experiment! Some of the commands depend on previous assignm ents, etc. If you skip around and something doesn't work you may just \+ have to execute a few of the previous commands." }}{PARA 0 "" 0 "" {TEXT -1 0 "" }}{PARA 0 "" 0 "" {TEXT -1 262 "This entire document was written in Maple. The sample commands were selected to illustrate a f ew Maple features to get you started using Maple. To learn more you sh ould make heavy use of the online help. The help is very good and usua lly includes a few examples." }}{PARA 0 "" 0 "" {TEXT -1 0 "" }}{PARA 258 "" 0 "" {TEXT -1 239 "Note each Maple command must be terminated b y a colon or a semicolon (except help commands preceded by a question \+ mark). The effect of the colon is to suppress output from the correspo nding command, though the command is still carried out." }}{PARA 0 "" 0 "" {TEXT -1 0 "" }}{PARA 0 "" 0 "" {TEXT 287 429 "Maple commands are executed by pressing the Enter key when the mouse cursor (pointer, th umb) is anywhere in the line containing the commands. Note that Maple \+ skips over the interpolated text comments (like this one). To execute \+ the commands on this worksheet position the mouse cursor on the comman d line and press Enter. Edit the command first if you wish. Explore! S imply waiting for something to happen will not be productive." }} {PARA 0 "" 0 "" {TEXT -1 0 "" }}{PARA 0 "" 0 "" {TEXT -1 345 "You can \+ spread a command over several lines by postponing the terminating colo n or semicolon. You simply move to a new line by pressing Enter. Maple will chatter at you when you move to a new line in this manner if the previous command is unterminated. Ignore it, but keep in mind a comma nd will not be executed before it is properly terminated." }}{PARA 0 " " 0 "" {TEXT -1 0 "" }}{PARA 0 "" 0 "" {TEXT -1 220 "You can also stac k up several commands on one line by terminating them individually wit h colons or semicolons. All the commands on a line are executed when \+ you press the Enter key (with the cursor anywhere on the line)." }} {PARA 0 "" 0 "" {TEXT -1 0 "" }}{PARA 0 "" 0 "" {TEXT 286 222 "Here's \+ a useful fact: You can open a new command line below the current one b y pressing Ctrl-J, or above the current line, by pressing Ctrl-K. This is pretty useful when you realize you omitted something at a certain \+ step." }}{PARA 0 "" 0 "" {TEXT -1 0 "" }}}{EXCHG {PARA 0 "> " 0 "" {MPLTEXT 1 0 0 "" }}}}{SECT 1 {PARA 3 "" 0 "" {TEXT -1 13 "The Workshe et" }}{EXCHG {PARA 4 "" 0 "" {TEXT 289 0 "" }{TEXT -1 0 "" }}{PARA 257 "" 0 "" {TEXT -1 470 "When you are using Maple in a window environ ment it is possible to move around on the worksheet by left-clicking t he mouse. As a result, commands may end up being executed in a nonline ar order. This can cause some confusion, since there is no visual clue . One way to fix a mess is to have Maple re-execute the whole workshee t (look on the Edit menu). This works best if old expressions are clea ned up first, so it is a good idea to start each worksheet with the co mmand " }{TEXT 290 7 "restart" }{TEXT 291 1 ";" }{TEXT -1 40 " You do \+ not need to do so of course ...." }}{PARA 0 "" 0 "" {TEXT -1 0 "" }}} {EXCHG {PARA 0 "> " 0 "" {MPLTEXT 1 0 8 "restart;" }}}{EXCHG {PARA 0 " " 0 "" {TEXT -1 0 "" }}{PARA 0 "" 0 "" {TEXT -1 69 "To find out what r estart does execute the command ?restart - try it." }}{PARA 0 "" 0 " " {TEXT -1 0 "" }}}{EXCHG {PARA 0 "> " 0 "" {MPLTEXT 1 0 0 "" }}} {EXCHG {PARA 0 "" 0 "" {TEXT -1 0 "" }}{PARA 0 "" 0 "" {TEXT -1 150 "N ote that commands starting with ? invoke the help system and do not n eed to be terminated with a semi-colon (but it doesn't hurt to termina te them)." }}}{EXCHG {PARA 0 "> " 0 "" {MPLTEXT 1 0 0 "" }}}}{SECT 1 {PARA 3 "" 0 "" {TEXT -1 30 "Assignment and Ditto Operators" }}{EXCHG {PARA 0 "" 0 "" {TEXT -1 0 "" }}{PARA 0 "" 0 "" {TEXT -1 129 "The assi gnment operator in maple is := (colon and equals sign juxtaposed). The equals sign by itself does not perform assignment." }}{PARA 0 "" 0 " " {TEXT -1 0 "" }}{PARA 0 "" 0 "" {TEXT -1 249 "Maple has two ditto op erators, % and %%. The value of % is the previously evaluated expres sion, the value of %% is the one before that. Since the Worksheet co mmands may be executed in any order, the ditto operators can cause a l ot of confusion. " }{TEXT 292 87 "It is probably best to restrict them to the same line as the expressions they refer to." }}{PARA 0 "" 0 " " {TEXT -1 0 "" }}}{EXCHG {PARA 0 "> " 0 "" {MPLTEXT 1 0 0 "" }}}} {SECT 1 {PARA 3 "" 0 "" {TEXT -1 14 "Execution Time" }}{EXCHG {PARA 4 "" 0 "" {TEXT -1 1 " " }}{PARA 0 "" 0 "" {TEXT -1 270 "There are times when we want to know how long it takes to carry out a given task. The time() function keeps track of the number of seconds that have passed since the beginning of the current Maple session. We can use it to re cord start and stop times. Here's an example:" }}{PARA 0 "" 0 "" {TEXT -1 0 "" }}}{EXCHG {PARA 0 "> " 0 "" {MPLTEXT 1 0 43 "stime:=time (): 20000!: etime:=time()-stime;" }}}{EXCHG {PARA 0 "" 0 "" {TEXT -1 0 "" }}{PARA 0 "" 0 "" {TEXT -1 37 "Let's execute the same command aga in:" }}{PARA 0 "" 0 "" {TEXT -1 0 "" }}}{EXCHG {PARA 0 "> " 0 "" {MPLTEXT 1 0 43 "stime:=time(): 20000!: etime:=time()-stime;" }}} {EXCHG {PARA 0 "" 0 "" {TEXT -1 0 "" }}{PARA 0 "" 0 "" {TEXT -1 164 "H ere we see an important property of Maple - it remembers and recalls p reviously computed expressions. You'll have to be careful if you inten d to time calculations." }}{PARA 0 "" 0 "" {TEXT -1 0 "" }}}{EXCHG {PARA 0 "> " 0 "" {MPLTEXT 1 0 0 "" }}}}{SECT 1 {PARA 3 "" 0 "" {TEXT -1 37 "Sets, Intersection, Union, Difference" }}{EXCHG {PARA 0 "" 0 " " {TEXT -1 0 "" }}{PARA 0 "" 0 "" {TEXT -1 54 "Here's a simple way to \+ define a (finite) set in Maple:" }}{PARA 0 "" 0 "" {TEXT -1 0 "" }}} {EXCHG {PARA 0 "> " 0 "" {MPLTEXT 1 0 35 "A1:=\{3,1,3,13,5,36,7,11,6,9 ,16,17\};" }}}{EXCHG {PARA 0 "" 0 "" {TEXT -1 0 "" }}{PARA 0 "" 0 "" {TEXT -1 102 "Notice we do not have to worry about repetitions since M aple discards repeated elements automatically." }}{PARA 0 "" 0 "" {TEXT -1 0 "" }}{PARA 0 "" 0 "" {TEXT -1 61 "The sequence command seq () can be useful for creating sets:" }}{PARA 0 "" 0 "" {TEXT -1 0 "" }}}{EXCHG {PARA 0 "> " 0 "" {MPLTEXT 1 0 25 "A2:=\{ seq(k^2, k=2..9) \+ \};" }}}{EXCHG {PARA 0 "> " 0 "" {MPLTEXT 1 0 34 "A3:=\{ seq(ithprime( k), k=1..10) \};" }}}{EXCHG {PARA 0 "" 0 "" {TEXT -1 0 "" }}{PARA 0 " " 0 "" {TEXT -1 32 "Note the Maple convention for a " }{TEXT 294 5 "ra nge" }{TEXT -1 42 " k=1..10, in the above two constructions." }}} {EXCHG {PARA 0 "" 0 "" {TEXT -1 0 "" }}{PARA 0 "" 0 "" {TEXT -1 58 "Th e intersect statement computes the intersection of sets:" }}{PARA 0 " " 0 "" {TEXT -1 0 "" }}{PARA 0 "" 0 "" {TEXT -1 0 "" }}}{EXCHG {PARA 0 "> " 0 "" {MPLTEXT 1 0 16 "A1 intersect A2;" }}}{EXCHG {PARA 0 "> " 0 "" {MPLTEXT 1 0 33 "A4:=A1 intersect A2 intersect A3;" }}}{EXCHG {PARA 0 "" 0 "" {TEXT -1 42 "Note the notation \{ \} for the empty s et." }}{PARA 0 "" 0 "" {TEXT -1 0 "" }}{PARA 0 "" 0 "" {TEXT -1 100 "M ultiple intersections can be calculated in a more convenient manner by the intersect function call." }}{PARA 0 "" 0 "" {TEXT -1 0 "" }}} {EXCHG {PARA 0 "> " 0 "" {MPLTEXT 1 0 22 "`intersect`(A1,A2,A3);" }}} {EXCHG {PARA 0 "" 0 "" {TEXT -1 0 "" }}{PARA 0 "" 0 "" {TEXT -1 61 "Th e quote-marks here are back-ticks. They are needed because " }{TEXT 295 9 "intersect" }{TEXT -1 77 " is a Maple keyword. If the tick-marks are absent Maple will try to evaluate " }{TEXT 296 9 "intersect" } {TEXT -1 54 " immediately as above rather than as a function call. " } }{PARA 0 "" 0 "" {TEXT -1 0 "" }}{PARA 0 "" 0 "" {TEXT -1 164 "I find \+ the back-ticks hard to see. Perhaps you do too We can use assignment t o give the intersect function a new name (for example, mint for multip le intersection):" }}{PARA 0 "" 0 "" {TEXT -1 0 "" }}}{EXCHG {PARA 0 " > " 0 "" {MPLTEXT 1 0 18 "mint:=`intersect`:" }}}{EXCHG {PARA 0 "> " 0 "" {MPLTEXT 1 0 12 "mint(A1,A2);" }}}{EXCHG {PARA 0 "> " 0 "" {MPLTEXT 1 0 15 "mint(A1,A2,A3);" }}}{EXCHG {PARA 0 "" 0 "" {TEXT -1 0 "" }}{PARA 0 "" 0 "" {TEXT -1 34 "Naturally unions behave similarly: " }}{PARA 0 "" 0 "" {TEXT -1 0 "" }}}{EXCHG {PARA 0 "> " 0 "" {MPLTEXT 1 0 12 "A1 union A2;" }}}{EXCHG {PARA 0 "> " 0 "" {MPLTEXT 1 0 21 "A1 union A2 union A3;" }}}{EXCHG {PARA 0 "" 0 "" {TEXT -1 0 "" } }{PARA 0 "" 0 "" {TEXT -1 81 "Again we avoid using `union` for multipl e unions by assigning a new name, muni()." }}{PARA 0 "" 0 "" {TEXT -1 0 "" }}}{EXCHG {PARA 0 "> " 0 "" {MPLTEXT 1 0 14 "muni:=`union`:" }}} {EXCHG {PARA 0 "> " 0 "" {MPLTEXT 1 0 15 "muni(A1,A2,A3);" }}}{EXCHG {PARA 0 "" 0 "" {TEXT -1 0 "" }}{PARA 0 "" 0 "" {TEXT -1 241 "Note the functions mint() and muni() are defined just in this worksheet. T hey do not become part of Maple and will not be available in other wor ksheets unless you define them again (except in the case of worksheets sharing a work space)." }}{PARA 0 "" 0 "" {TEXT -1 0 "" }}}{EXCHG {PARA 0 "" 0 "" {TEXT -1 58 "The difference of two sets may be calcula ted by using the " }{TEXT 297 5 "minus" }{TEXT -1 62 " command (see al so the section on symmetric difference below):" }}{PARA 0 "" 0 "" {TEXT -1 0 "" }}}{EXCHG {PARA 0 "> " 0 "" {MPLTEXT 1 0 21 "A5:=\{seq(k ,k=1..12)\};" }}}{EXCHG {PARA 0 "> " 0 "" {MPLTEXT 1 0 22 "A6:=\{seq(2 *k,k=1..8)\};" }}}{EXCHG {PARA 0 "> " 0 "" {MPLTEXT 1 0 16 "A7:=A5 min us A6;" }}}{EXCHG {PARA 0 "> " 0 "" {MPLTEXT 1 0 16 "A8:=A6 minus A5; " }}}{EXCHG {PARA 0 "> " 0 "" {MPLTEXT 1 0 0 "" }}}}{SECT 1 {PARA 3 " " 0 "" {TEXT -1 9 "Functions" }}{EXCHG {PARA 0 "" 0 "" {TEXT -1 0 "" } }{PARA 0 "" 0 "" {TEXT -1 231 "There are several ways to define a func tion in Maple. One way is by the \"arrow notation.\" In this formalism a function f is defined by describing how, given x, to compute f (x). The notation easily extends to several variables:" }}{PARA 0 "" 0 "" {TEXT -1 0 "" }}}{EXCHG {PARA 0 "> " 0 "" {MPLTEXT 1 0 19 "f1:=x- >exp(sin(x));" }}}{EXCHG {PARA 0 "> " 0 "" {MPLTEXT 1 0 16 "f1(u); f1( Pi/2);" }}}{EXCHG {PARA 0 "" 0 "" {TEXT -1 0 "" }}{PARA 0 "" 0 "" {TEXT -1 33 "Note pi means the Greek letter " }{XPPEDIT 18 0 "pi;" " 6#%#piG" }{TEXT -1 69 " whereas Pi means the number usually symbolized by the Greek letter " }{XPPEDIT 18 0 "pi;" "6#%#piG" }{TEXT -1 167 " . The number Pi is manipulated symbolically. That is, a value is not a ssigned to expressions involving Pi unless it can be done exactly, o r an estimate is specified." }}{PARA 0 "" 0 "" {TEXT -1 0 "" }}} {EXCHG {PARA 0 "> " 0 "" {MPLTEXT 1 0 10 "sin(Pi/3);" }}}{EXCHG {PARA 0 "> " 0 "" {MPLTEXT 1 0 20 "sin(Pi/7); evalf(%);" }}}{EXCHG {PARA 0 " " 0 "" {TEXT -1 0 "" }}{PARA 0 "" 0 "" {TEXT -1 133 "The evalf() func tion evalualtes an expression to floating point at the default precisi on (set by Digits) or prescribed. For example," }}{PARA 0 "" 0 "" {TEXT -1 0 "" }}}{EXCHG {PARA 0 "> " 0 "" {MPLTEXT 1 0 13 "evalf(Pi,40 );" }}}{EXCHG {PARA 0 "" 0 "" {TEXT -1 0 "" }}{PARA 0 "" 0 "" {TEXT -1 20 "Try evalf(Pi,2000);" }}}{EXCHG {PARA 0 "> " 0 "" {MPLTEXT 1 0 0 "" }}}}{SECT 1 {PARA 3 "" 0 "" {TEXT -1 28 "Symmetric Difference of \+ Sets" }}{EXCHG {PARA 0 "" 0 "" {TEXT -1 0 "" }}{PARA 0 "" 0 "" {TEXT -1 212 "The symmetric difference of two sets is the union of the compl ement of either one in the other. It is a measure of how much two sets differ. Here is a function which computes the symmetric difference of two sets." }}{PARA 0 "" 0 "" {TEXT -1 0 "" }}}{EXCHG {PARA 0 "> " 0 " " {MPLTEXT 1 0 46 "symdiff:=(x,y)->(x minus y) union (y minus x);" }}} {EXCHG {PARA 0 "" 0 "" {TEXT -1 0 "" }}{PARA 0 "" 0 "" {TEXT -1 22 "He re's a few examples:" }}{PARA 0 "" 0 "" {TEXT -1 0 "" }}}{EXCHG {PARA 0 "> " 0 "" {MPLTEXT 1 0 15 "symdiff(A1,A2);" }}}{EXCHG {PARA 0 "> " 0 "" {MPLTEXT 1 0 16 "A9:=\{2,3,4,5,6\};" }}}{EXCHG {PARA 0 "> " 0 "" {MPLTEXT 1 0 17 "A10:=\{1,2,3,4,5\};" }}}{EXCHG {PARA 0 "> " 0 "" {MPLTEXT 1 0 16 "symdiff(A9,A10);" }}}{EXCHG {PARA 0 "> " 0 "" {MPLTEXT 1 0 0 "" }}}}{SECT 1 {PARA 3 "" 0 "" {TEXT -1 20 "Cardinality of a Set" }}{EXCHG {PARA 0 "" 0 "" {TEXT -1 0 "" }}{PARA 0 "" 0 "" {TEXT -1 58 "The number of elements in a set can be found by using the " }{TEXT 298 18 "number of operands" }{TEXT -1 20 ", nops(), functio n." }}{PARA 0 "" 0 "" {TEXT -1 0 "" }}}{EXCHG {PARA 0 "> " 0 "" {MPLTEXT 1 0 9 "nops(A1);" }}}{EXCHG {PARA 0 "> " 0 "" {MPLTEXT 1 0 10 "nops(\{ \});" }}}{EXCHG {PARA 0 "> " 0 "" {MPLTEXT 1 0 10 "nops(A1 0);" }}}{EXCHG {PARA 0 "> " 0 "" {MPLTEXT 1 0 0 "" }}}}{SECT 1 {PARA 3 "" 0 "" {TEXT -1 17 "Elements of a Set" }}{EXCHG {PARA 0 "" 0 "" {TEXT -1 0 "" }}{PARA 0 "" 0 "" {TEXT -1 18 "Recall the set A3" }} {PARA 0 "" 0 "" {TEXT -1 0 "" }}}{EXCHG {PARA 0 "> " 0 "" {MPLTEXT 1 0 34 "A3:=\{ seq(ithprime(k), k=1..10) \};" }}}{EXCHG {PARA 4 "" 0 "" {TEXT -1 0 "" }}{PARA 0 "" 0 "" {TEXT -1 102 "The elements of a set ar e its operands in Maple-speak. The operands are returned by the op() f unction." }}{PARA 0 "" 0 "" {TEXT -1 0 "" }}}{EXCHG {PARA 0 "> " 0 "" {MPLTEXT 1 0 7 "op(A3);" }}}{EXCHG {PARA 0 "" 0 "" {TEXT -1 0 "" }} {PARA 0 "" 0 "" {TEXT -1 76 "This may not look useful but we will see \+ an applictaion in the next section." }}{PARA 0 "" 0 "" {TEXT -1 0 "" } }{PARA 0 "" 0 "" {TEXT -1 72 "If we just want to test for membership w e can use the member() function:" }}{PARA 0 "" 0 "" {TEXT -1 0 "" }}} {EXCHG {PARA 0 "> " 0 "" {MPLTEXT 1 0 13 "member(7,A3);" }}}{EXCHG {PARA 0 "> " 0 "" {MPLTEXT 1 0 13 "member(9,A3);" }}}{EXCHG {PARA 0 "> " 0 "" {MPLTEXT 1 0 0 "" }}}}{SECT 1 {PARA 3 "" 0 "" {TEXT -1 5 "List s" }}{EXCHG {PARA 0 "" 0 "" {TEXT -1 0 "" }}{PARA 0 "" 0 "" {TEXT -1 74 "A list is an ordered sequence of expressions enclosed in square br ackets. " }}{PARA 0 "" 0 "" {TEXT -1 0 "" }}}{EXCHG {PARA 0 "> " 0 "" {MPLTEXT 1 0 24 "L1:=[3,7,2,1,4,9,3,1,7];" }}}{EXCHG {PARA 0 "" 0 "" {TEXT -1 0 "" }}{PARA 0 "" 0 "" {TEXT -1 153 "The sort function sorts \+ the elements of a list L into ascending order if we have a comparison \+ between elements of the list (or specify one - check help)." }}{PARA 0 "" 0 "" {TEXT -1 0 "" }}}{EXCHG {PARA 0 "> " 0 "" {MPLTEXT 1 0 9 "so rt(L1);" }}}{EXCHG {PARA 0 "" 0 "" {TEXT -1 0 "" }}{PARA 0 "" 0 "" {TEXT -1 92 "The op() function returns the list of elements in a list \+ in the order specified in the list." }}{PARA 0 "" 0 "" {TEXT -1 0 "" } }}{EXCHG {PARA 0 "> " 0 "" {MPLTEXT 1 0 7 "op(L1);" }}}{EXCHG {PARA 0 "" 0 "" {TEXT -1 0 "" }}{PARA 0 "" 0 "" {TEXT -1 100 "If we surround t he returned list of elements by [ ... ] we, of course, get the origi nal list back." }}{PARA 0 "" 0 "" {TEXT -1 0 "" }}}{EXCHG {PARA 0 "> \+ " 0 "" {MPLTEXT 1 0 16 "is(L1=[op(L1)]);" }}}{EXCHG {PARA 0 "" 0 "" {TEXT -1 0 "" }}{PARA 0 "" 0 "" {TEXT -1 35 "Note this useful test for equality." }}{PARA 0 "" 0 "" {TEXT -1 0 "" }}}{EXCHG {PARA 0 "" 0 "" {TEXT -1 132 "If however we surround the returned list of elements by \+ \{ ... \} we obtain the set of list elements, that is, duplicates are \+ removed." }}{PARA 0 "" 0 "" {TEXT -1 0 "" }}}{EXCHG {PARA 0 "> " 0 "" {MPLTEXT 1 0 9 "\{op(L1)\};" }}}{EXCHG {PARA 0 "" 0 "" {TEXT -1 0 "" } }{PARA 0 "" 0 "" {TEXT -1 89 "Using these ideas we can construct a fun ction which removes duplicate elements in a list." }}{PARA 0 "" 0 "" {TEXT -1 0 "" }}}{EXCHG {PARA 0 "> " 0 "" {MPLTEXT 1 0 25 "remdup:=x-> [op(\{op(x)\})];" }}}{EXCHG {PARA 0 "" 0 "" {TEXT -1 0 "" }}{PARA 0 " " 0 "" {TEXT -1 14 "Let's test it:" }}{PARA 0 "" 0 "" {TEXT -1 0 "" }} }{EXCHG {PARA 0 "> " 0 "" {MPLTEXT 1 0 11 "remdup(L1);" }}}{EXCHG {PARA 0 "" 0 "" {TEXT -1 0 "" }}{PARA 0 "" 0 "" {TEXT -1 327 "It works ! Notice however that the original order of L1 is not preserved. If \+ you want to keep the order in some sense, for example, you want to rem ove all but the first (or last) occurence of each element and otherwis e keep the elements in the original order, you'll have to work harder \+ to come up with a solution (see below)." }}{PARA 0 "" 0 "" {TEXT -1 0 "" }}{PARA 0 "" 0 "" {TEXT -1 65 "A very useful construction is the pr ocess for selecting sublists:" }}{PARA 0 "" 0 "" {TEXT -1 0 "" }}} {EXCHG {PARA 0 "> " 0 "" {MPLTEXT 1 0 9 "L1[2..6];" }}}{EXCHG {PARA 0 "" 0 "" {TEXT -1 0 "" }}{PARA 0 "" 0 "" {TEXT -1 82 "Of course, we can also use subscripting to extract individual entries from a list:" }} {PARA 0 "" 0 "" {TEXT -1 0 "" }}}{EXCHG {PARA 0 "> " 0 "" {MPLTEXT 1 0 13 "L1[2]; L1[3];" }}}{EXCHG {PARA 0 "> " 0 "" {MPLTEXT 1 0 0 "" }}} }{SECT 1 {PARA 3 "" 0 "" {TEXT -1 16 "Subsets of a Set" }}{EXCHG {PARA 0 "" 0 "" {TEXT -1 0 "" }}{PARA 0 "" 0 "" {TEXT -1 17 "Recall th e set A3" }}{PARA 0 "" 0 "" {TEXT -1 0 "" }}}{EXCHG {PARA 0 "> " 0 "" {MPLTEXT 1 0 34 "A3:=\{ seq(ithprime(k), k=1..10) \};" }}}{EXCHG {PARA 0 "" 0 "" {TEXT -1 0 "" }}{PARA 0 "" 0 "" {TEXT -1 38 "The subse t statement is pretty simple:" }}{PARA 0 "" 0 "" {TEXT -1 0 "" }}} {EXCHG {PARA 0 "> " 0 "" {MPLTEXT 1 0 22 "\{13,11,2,3\} subset A3;" }} }{EXCHG {PARA 0 "> " 0 "" {MPLTEXT 1 0 22 "\{13,11,4,3\} subset A3;" } }}{EXCHG {PARA 0 "" 0 "" {TEXT -1 0 "" }}{PARA 0 "" 0 "" {TEXT -1 101 "You can also use a function call, though you have to escape the reser ved word subset with back-ticks." }}{PARA 0 "" 0 "" {TEXT -1 0 "" }}} {EXCHG {PARA 0 "> " 0 "" {MPLTEXT 1 0 25 "`subset`(\{13,11,2,3\},A3); " }}}{EXCHG {PARA 0 "> " 0 "" {MPLTEXT 1 0 0 "" }}}}{SECT 1 {PARA 3 " " 0 "" {TEXT -1 16 "Maple Procedures" }}{EXCHG {PARA 0 "" 0 "" {TEXT -1 0 "" }}{PARA 0 "" 0 "" {TEXT -1 169 "Maple procedures are similar t o Maple functions, but much more complicated processing can be specifi ed in a procedure. The definition of a procedure follows the pattern: " }}{PARA 0 "" 0 "" {TEXT -1 0 "" }}{PARA 0 "" 0 "" {TEXT -1 20 "name \+ := proc( args )" }}{PARA 0 "" 0 "" {TEXT -1 21 " local variable list " }}{PARA 0 "" 0 "" {TEXT -1 18 " ... commands ..." }}{PARA 0 "" 0 " " {TEXT -1 4 "end;" }}{PARA 0 "" 0 "" {TEXT -1 0 "" }}{PARA 0 "" 0 "" {TEXT -1 458 "Note inside a procedure nargs tells you how many argum ents were passed to the procedure and args is the list of arguments. T his is very handy. The arguments do not have to declared in the proced ure definition, so it becomes possible to write procedures which take \+ a variable number of arguments. You can also test the type of the argu ments and so write procedures that are polymorphic, that is, change th eir behavior depending on the type of data received." }}{PARA 0 "" 0 " " {TEXT -1 0 "" }}{PARA 0 "" 0 "" {TEXT -1 338 "The procedure returns \+ the last value evaluated in the body of the procedure. Sometimes it is necessary or just clearer to specify the returned value explicitly by using the return statement. The local variable are variables used onl y in the procedure. They do no conflict with variables of the same nam e existing outside of the procedure." }}{PARA 0 "" 0 "" {TEXT -1 0 "" }}{PARA 0 "" 0 "" {TEXT -1 135 "Once a procedure has been defined (tha t is, its definition has been executed) it can be used the same way as any other Maple procedure." }}{PARA 0 "" 0 "" {TEXT -1 0 "" }}{PARA 0 "" 0 "" {TEXT -1 332 "Here is a procedure, remldupe(), which removes duplicate entries from a list. It does it in such a way that only the first occurence of each distinct entry is retained. Thus the retained entries are in the same order as the corresponding entries were in L. The reml part of the name is supposed to suggest \"remove later dupli cates.\"" }}{PARA 0 "" 0 "" {TEXT -1 0 "" }}}{EXCHG {PARA 0 "> " 0 "" {MPLTEXT 1 0 16 "remldup:=proc(L)" }}{PARA 0 "> " 0 "" {MPLTEXT 1 0 15 "local LL,n,k,x;" }}{PARA 0 "> " 0 "" {MPLTEXT 1 0 39 "n:=nops(L); \+ # number of entries in L" }}{PARA 0 "> " 0 "" {MPLTEXT 1 0 12 "if n <=1 then" }}{PARA 0 "> " 0 "" {MPLTEXT 1 0 52 " return L; # if L h as 0 or 1 entries we are done" }}{PARA 0 "> " 0 "" {MPLTEXT 1 0 7 "end if;" }}{PARA 0 "> " 0 "" {MPLTEXT 1 0 1 "#" }}{PARA 0 "> " 0 "" {MPLTEXT 1 0 47 "LL:=[L[1]]; # add the first entry of L to LL" }} {PARA 0 "> " 0 "" {MPLTEXT 1 0 20 "for k from 2 to n do" }}{PARA 0 "> \+ " 0 "" {MPLTEXT 1 0 34 " if `member`(L[k],L[1..k-1]) then" }}{PARA 0 "> " 0 "" {MPLTEXT 1 0 58 " ; # do not add any entries whi ch come earlier" }}{PARA 0 "> " 0 "" {MPLTEXT 1 0 55 " else # (so in effect remove later duplicates)" }}{PARA 0 "> " 0 "" {MPLTEXT 1 0 22 " LL:=[op(LL),L[k]];" }}{PARA 0 "> " 0 "" {MPLTEXT 1 0 9 " \+ end if;" }}{PARA 0 "> " 0 "" {MPLTEXT 1 0 7 "end do;" }}{PARA 0 "> " 0 "" {MPLTEXT 1 0 5 " LL:" }}{PARA 0 "> " 0 "" {MPLTEXT 1 0 4 "end:" }}}{EXCHG {PARA 0 "" 0 "" {TEXT -1 0 "" }}{PARA 0 "" 0 "" {TEXT -1 127 "Note above the use of the Maple comment character #. Everything f ollowing # to the end of the current line is ignored by Maple." }}} {EXCHG {PARA 0 "" 0 "" {TEXT -1 0 "" }}{PARA 0 "" 0 "" {TEXT -1 34 "Le t's test remldup on our list L1:" }}{PARA 0 "" 0 "" {TEXT -1 0 "" }}} {EXCHG {PARA 0 "> " 0 "" {MPLTEXT 1 0 16 "L1; remldup(L1);" }}}{EXCHG {PARA 0 "" 0 "" {TEXT -1 0 "" }}{PARA 0 "" 0 "" {TEXT -1 23 "Here's an other example:" }}{PARA 0 "" 0 "" {TEXT -1 0 "" }}}{EXCHG {PARA 0 "> \+ " 0 "" {MPLTEXT 1 0 32 "L2:=[3,1,3,3,3,3,4,3,4,3,3,2,5];" }}}{EXCHG {PARA 0 "> " 0 "" {MPLTEXT 1 0 12 "remldup(L2);" }}}{EXCHG {PARA 0 "" 0 "" {TEXT -1 0 "" }}{PARA 0 "" 0 "" {TEXT -1 88 "Note above the const ruction [op(L), x] to add the entry x at the end of the list L." }}}{EXCHG {PARA 0 "" 0 "" {TEXT -1 0 "" }}{PARA 0 "" 0 "" {TEXT -1 130 "Perhaps we'd rather retain the last occurence of each entry in th e list. In that case this last string should yield [1,4,3,2,5]. " }} {PARA 0 "" 0 "" {TEXT -1 173 "A simple way to do this is to reverse th e list, use the procedure remldup() above, and then reverse the result . We can use the Reverse() function from the ListTools library:" }} {PARA 0 "" 0 "" {TEXT -1 0 "" }}}{EXCHG {PARA 0 "> " 0 "" {MPLTEXT 1 0 24 "rev:=ListTools[Reverse]:" }}}{EXCHG {PARA 0 "> " 0 "" {MPLTEXT 1 0 24 "rev((remldup(rev(L2))));" }}}{EXCHG {PARA 0 "" 0 "" {TEXT -1 0 "" }}{PARA 0 "" 0 "" {TEXT -1 122 "Using ListTools[Reverse]() is pro bably overkill. If we are careful we can achieve the reversal by using negative indexing." }}{PARA 0 "" 0 "" {TEXT -1 0 "" }}}{EXCHG {PARA 0 "> " 0 "" {MPLTEXT 1 0 26 "seq(L2[-k],k=1..nops(L2));" }}}{EXCHG {PARA 0 "" 0 "" {TEXT -1 169 "Perhaps a better approach is to write a \+ procedure remfdup(), along the lines above, to remove the first occure nces of each duplicated entry, and to retain only the last." }}} {EXCHG {PARA 0 "> " 0 "" {MPLTEXT 1 0 0 "" }}}}{SECT 1 {PARA 3 "" 0 " " {TEXT -1 25 "Cartesian Product of Sets" }}{EXCHG {PARA 0 "" 0 "" {TEXT -1 0 "" }}{PARA 0 "" 0 "" {TEXT -1 242 "The Cartesian product X x Y of two sets X and Y is the set of ordered pairs [x,y] wher e x is an element of X and y is an element of Y. The Cartesian produ ct of an ordered set of sets is defined similarly. Can you write a def inition?" }}{PARA 0 "" 0 "" {TEXT -1 0 "" }}{PARA 0 "" 0 "" {TEXT -1 273 "Now ordered pairs, ordered triples, and so on, are simply lists, \+ so we construct the Cartesian product in Maple in terms of lists. Here is a recursive Maple procedure to compute the Cartesian product of an y number of sets (mcarp is motivated by multiple Cartesian product):" }}{PARA 0 "" 0 "" {TEXT -1 0 "" }}}{EXCHG {PARA 0 "> " 0 "" {MPLTEXT 1 0 29 "mcarp:=proc() local Z,k,x,y;" }}{PARA 0 "> " 0 "" {MPLTEXT 1 0 18 " option remember;" }}{PARA 0 "> " 0 "" {MPLTEXT 1 0 17 " if na rgs=0 then" }}{PARA 0 "> " 0 "" {MPLTEXT 1 0 8 " Z:=\{\};" }}{PARA 0 "> " 0 "" {MPLTEXT 1 0 17 "elif nargs=1 then" }}{PARA 0 "> " 0 "" {MPLTEXT 1 0 13 " Z:=args[1];" }}{PARA 0 "> " 0 "" {MPLTEXT 1 0 11 "e lse Z:=\{\};" }}{PARA 0 "> " 0 "" {MPLTEXT 1 0 67 " for x in mcarp( s eq(args[k], k=1..nargs-1) ) do # note recursion" }}{PARA 0 "> " 0 "" {MPLTEXT 1 0 28 " for y in args[nargs] do " }}{PARA 0 "> " 0 "" {MPLTEXT 1 0 30 " Z:= Z union \{[op(x),y]\};" }}{PARA 0 "> " 0 " " {MPLTEXT 1 0 7 " od;" }}{PARA 0 "> " 0 "" {MPLTEXT 1 0 5 " od;" }}{PARA 0 "> " 0 "" {MPLTEXT 1 0 3 "fi;" }}{PARA 0 "> " 0 "" {MPLTEXT 1 0 9 "return Z;" }}{PARA 0 "> " 0 "" {MPLTEXT 1 0 4 "end:" }}}{EXCHG {PARA 0 "" 0 "" {TEXT -1 0 "" }}{PARA 0 "" 0 "" {TEXT -1 115 "Here nar gs is the number of variables (in our case sets) passed to the procedu re on a function call. Let's test it:" }}{PARA 0 "" 0 "" {TEXT -1 0 " " }}}{EXCHG {PARA 0 "> " 0 "" {MPLTEXT 1 0 61 "B1:=\{1,2,3\}; B2:=\{b, a\}; B3:=\{a,c,b\}; B4:=\{\}; B5:=\{3,6,7,8,4\};" }}}{EXCHG {PARA 0 "> " 0 "" {MPLTEXT 1 0 16 "mcarp(B1,B2,B3);" }}}{EXCHG {PARA 0 "> " 0 " " {MPLTEXT 1 0 19 "mcarp(B1,B2,B3,B4);" }}}{EXCHG {PARA 0 "> " 0 "" {MPLTEXT 1 0 19 "mcarp(B1,B2,B3,B5);" }}}{EXCHG {PARA 0 "" 0 "" {TEXT -1 0 "" }}{PARA 0 "" 0 "" {TEXT -1 94 "The \"option remember\" sometim es speeds up recursive routines at the expense of using more RAM." }} {PARA 0 "" 0 "" {TEXT -1 0 "" }}}{EXCHG {PARA 0 "> " 0 "" {MPLTEXT 1 0 0 "" }}}}{SECT 1 {PARA 3 "" 0 "" {TEXT -1 8 "Problems" }}{EXCHG {PARA 0 "" 0 "" {TEXT -1 0 "" }}{PARA 0 "" 0 "" {TEXT 299 10 "Problem \+ 1." }}{PARA 0 "" 0 "" {TEXT 300 0 "" }}{PARA 0 "" 0 "" {TEXT 301 174 " Write a procedure remfdup() which takes as input any list L and return s a list formed from L by retaining only the last occurence of each en try in L. Order must be preserved." }}{PARA 0 "" 0 "" {TEXT -1 0 "" }} {PARA 0 "" 0 "" {TEXT -1 23 "For clarification note " }}{PARA 0 "" 0 " " {TEXT -1 39 " remldup([1,2,3,2]); yields [1,2,3]" }}{PARA 0 "" 0 "" {TEXT -1 39 " remfdup([1,2,3,2]); yields [1,3,2]" }}}{EXCHG {PARA 0 "" 0 "" {TEXT -1 0 "" }}{PARA 0 "" 0 "" {TEXT 302 10 "Problem \+ 2." }}{PARA 0 "" 0 "" {TEXT 303 0 "" }}{PARA 0 "" 0 "" {TEXT 304 101 " Write a non-recursive procedure to compute the Cartesian product of an y finite number of finite sets." }}{PARA 0 "" 0 "" {TEXT -1 0 "" }} {PARA 0 "" 0 "" {TEXT -1 268 "Note you will have to loop over the argu ments. If you find this problem too difficult then, for partial credit , write a routine to compute the Cartesian product of any 2 finite set s. Indicate how you might use your routine (without rewiting it) for t he case of 3 sets." }}{PARA 0 "" 0 "" {TEXT -1 0 "" }}}{EXCHG {PARA 0 "" 0 "" {TEXT -1 117 "The Maple function call irem(m,n) returns the \+ integer remainder when m is divided by n. Here are some examples: " }}{PARA 0 "" 0 "" {TEXT -1 0 "" }}}{EXCHG {PARA 0 "> " 0 "" {MPLTEXT 1 0 15 "irem(142856,7);" }}}{EXCHG {PARA 0 "> " 0 "" {MPLTEXT 1 0 16 "ifactor(142856);" }}}{EXCHG {PARA 0 "" 0 "" {TEXT -1 0 "" }}{PARA 0 "" 0 "" {TEXT -1 36 "Sure enough 7 is a factor of 14285 6." }}{PARA 0 "" 0 "" {TEXT -1 0 "" }}}{EXCHG {PARA 0 "> " 0 "" {MPLTEXT 1 0 14 "irem(9937,11);" }}}{EXCHG {PARA 0 "" 0 "" {TEXT -1 0 "" }}{PARA 0 "" 0 "" {TEXT 305 10 "Problem 3." }}{PARA 0 "" 0 "" {TEXT 307 0 "" }}{PARA 0 "" 0 "" {TEXT 308 43 "Write a procedure g(a,b ) which returns the " }{TEXT 306 4 "list" }{TEXT 309 108 " consisting \+ of all integers from a to b which are divisible by 3 and by 7, bu t are not divisible by 5." }}{PARA 0 "" 0 "" {TEXT -1 0 "" }}{PARA 0 "" 0 "" {TEXT -1 46 "Your code should probably start something like" } }{PARA 0 "" 0 "" {TEXT -1 0 "" }}{PARA 0 "" 0 "" {TEXT -1 12 "g:=proc( a,b)" }}{PARA 0 "" 0 "" {TEXT -1 14 "local A,B,...;" }}{PARA 0 "" 0 " " {TEXT -1 16 "if nargs<>2 then" }}{PARA 0 "" 0 "" {TEXT -1 14 " retu rn FAIL;" }}{PARA 0 "" 0 "" {TEXT -1 3 "fi;" }}{PARA 0 "" 0 "" {TEXT -1 25 "A:=ceil(a); B:=floor(b);" }}{PARA 0 "" 0 "" {TEXT -1 7 "...... ." }}{PARA 0 "" 0 "" {TEXT -1 4 "end:" }}{PARA 0 "" 0 "" {TEXT -1 0 " " }}{PARA 0 "" 0 "" {TEXT -1 35 "As test g(41, 327); should return" }}{PARA 0 "" 0 "" {TEXT -1 0 "" }}{PARA 0 "" 0 "" {XPPEDIT 18 0 "[42, \+ 63, 84, 126, 147, 168, 189, 231, 252, 273, 294];" "6#7-\"#U\"#j\"#%)\" $E\"\"$Z\"\"$o\"\"$*=\"$J#\"$_#\"$t#\"$%H" }{TEXT -1 0 "" }}{PARA 0 " " 0 "" {TEXT -1 0 "" }}}{EXCHG {PARA 0 "> " 0 "" {MPLTEXT 1 0 0 "" }}} }{EXCHG {PARA 0 "> " 0 "" {MPLTEXT 1 0 0 "" }}}}{MARK "0 2 0" 34 } {VIEWOPTS 1 1 0 1 1 1803 1 1 1 1 }{PAGENUMBERS 0 1 2 33 1 1 }