mirror of
https://github.com/PDP-10/its.git
synced 2026-01-18 17:16:59 +00:00
562 lines
24 KiB
Common Lisp
562 lines
24 KiB
Common Lisp
;;; -*- Mode:LISP; Package:MACSYMA -*-
|
||
|
||
; ** (c) Copyright 1981 Massachusetts Institute of Technology **
|
||
|
||
(SETQ $LOADPRINT NIL)
|
||
;This shouldn't be needed any more --kmp
|
||
;(COND ((STATUS FEATURE MACLISP) (LOAD '((LISP)DEFMAX))))
|
||
(DEFUN IF MACRO (X)
|
||
(COND ((NULL (CDDDR X)) `(COND (,(CADR X) ,(CADDR X))))
|
||
(T `(COND (,(CADR X) ,(CADDR X)) (T . ,(CDDDR X))))))
|
||
(DEFSCRIPT $CONSOLEPRIMER
|
||
"Welcome to the MACSYMA Primer. This section of the Primer
|
||
is called the CONSOLEPRIMER because it is intended to be
|
||
used by people who have not had previous experience
|
||
interacting with a computer console."
|
||
(COND ((AND $PAGEPAUSE CURSORPOS)(SCRIPT 'CRTCONSOLE NIL)))
|
||
(SLEEP 2)
|
||
"You will notice that your console looks much like a typewriter, except
|
||
for having a few special keys. The two most important special
|
||
keys are the 'altmode' and the 'control' key. The 'altmode'
|
||
may be labeled 'alt', 'esc', '(sel)', or 'escape'. The 'control'
|
||
key may be labeled 'CTRL' or 'CNTL'. The altmode is used to
|
||
enter the MACSYMA editor. Do not attempt to use the editor while
|
||
you are in the Primer since it may tend to confuse you. A future
|
||
script will deal with editing. The control key is used in
|
||
the same fashion as the shift key on the typwriter, i.e. you hold
|
||
it down and type the character whose 'control' value you wish.
|
||
For example, to type control-Z, you would hold down the control
|
||
key and type a Z. Don't do that now, as control-Z is the control
|
||
character that will return you to top level when you are ready
|
||
to log out."
|
||
(SLEEP 2)
|
||
"The Primer will explain some of the aspects of MACSYMA to you and allow
|
||
you to try out various examples. Your responses to
|
||
the Primer must end with a semi-colon (;). That is the one
|
||
thing which the Primer cannot correct you on, since it will not
|
||
even see your response until you have typed the semi-colon. Thus
|
||
if nothing seems to be happening, check that you have typed the
|
||
semi-colon."
|
||
"In the Primer you should answer all questions the system asks. There
|
||
are three kinds of questions:"
|
||
"1. Questions you can answer with a yes or a no. You type the word
|
||
YES or the word NO followed immediately by a semi-colon (;) to
|
||
answer these. Case does not matter, upper or lower will do.
|
||
Try it here: Type YES; or NO;"
|
||
(IF (YESORNO) (TERPRI))
|
||
"2. Questions which require you to select a script or an option. The system
|
||
will print out a list, for example:"
|
||
(MENU '($SIMPLIFICATION $SCRATCHPAD $ASSIGNMENT))
|
||
"This list is called the 'menu', the list of scripts available.
|
||
You select a script to see by typing the number of your choice
|
||
followed by a semi-colon (;), to answer these. E.g."
|
||
"3;"
|
||
"Now you try it."
|
||
(MENU '($SIMPLIFICATION $SCRATCHPAD $ASSIGNMENT))
|
||
(NUMCHK 3)
|
||
"3. Requests to type in commands to MACSYMA. The system will make a
|
||
request, such as 'Type in a polynomial in X,' and then give you
|
||
a dummy MACSYMA command line number. You then type the command,
|
||
followed by a semi-colon. This is to give you a chance to practice
|
||
what you are learning. If you type the command correctly, the
|
||
system will pass what you type to MACSYMA, and MACSYMA will
|
||
evaluate it and return a response. If you make a mistake the
|
||
system will attempt to tell you what you did wrong, and will
|
||
offer you a chance to try again. Here, try typing X+2;"
|
||
(INCHK '((MPLUS) $X 2))
|
||
"The response, as you see, is just the expression itself, since
|
||
no simplification or operation was necessary or specified."
|
||
"Do you know how to type 'control-characters'?"
|
||
(IF (NOT (YESORNO)) (SCRIPT 'CTRLCHAR NIL))
|
||
"Control-G is the QUIT command for MACSYMA."
|
||
"The other control characters you should know about for MACSYMA are:"
|
||
"Control-L: this reprints the command line you are typing. On a display
|
||
console it will also clear the screen. It is particularly useful
|
||
if you have used rubout (delete) a lot and want to verify that you
|
||
have everything right."
|
||
"Control-^: this will put you into LISP, the language MACSYMA is written in.
|
||
You will not usually want to use it, but should know about it so
|
||
you can avoid typing it. If you do type it by mistake, control-G
|
||
will get you back to a MACSYMA command line."
|
||
"Control-A: this enters a MACSYMA break. This suspends the current
|
||
computation, and allows you to 'poke around' in your MACSYMA,
|
||
perhaps to open a file for output, or to see what the value of
|
||
some variable is. To get out of the 'break' and resume the
|
||
computation, type 'exit;'"
|
||
"Control-]: this prints out the time used by the computation so far.
|
||
You can type it at any point during a computation. Try it now to
|
||
see how much CPU time this PRIMER session has used:"
|
||
(SLEEP 8)
|
||
"Now you are ready to move along to the Introductory Script of the Primer."
|
||
(COND ((EQ 'WSMR (STATUS UNAME))(SCRIPT '$INTRO NIL))
|
||
(T (SEEN (STATUS UNAME) '$CONSOLEPRIMER)))
|
||
(SCRIPT '$INTRO NIL))
|
||
|
||
(DEFSCRIPT $INTRO
|
||
"Welcome to the MACSYMA Primer. This is the script called INTRO."
|
||
"Please terminate responses to all questions with a semi-colon (;).
|
||
You may delete any characters you have typed by using
|
||
the delete or rub-out key on your console. The deleted
|
||
character will be erased if you are using a display terminal.
|
||
If you are using a printing terminal, it will be
|
||
typed back so you know what has been deleted."
|
||
"If you do not understand how to type an expression, or have tried
|
||
several times and wish to give up, you may type NO; and the
|
||
PRIMER will show you the correct way to do it."
|
||
"In this PRIMER session, after an optional introduction to
|
||
MACSYMA syntax, a few of the specialized MACSYMA commands
|
||
will be introduced. After that we will discuss some of the
|
||
facilities of MACSYMA which allow you to manipulate algebraic
|
||
expressions within the computer in much the same way you
|
||
do on paper."
|
||
"MACSYMA is a system for symbolic algebraic manipulation.
|
||
It uses a syntax resembling ALGOL 60."
|
||
"Do you need help with MACSYMA syntax?"
|
||
(IF (YESORNO) (SCRIPT '$SYNTAX NIL))
|
||
"MACSYMA contains a large set of commands for manipulating
|
||
algebraic expressions. Among these are commands to
|
||
factor, expand, differentiate, integrate, substitute and
|
||
simplify. Lets try an example:"
|
||
"Type in"
|
||
(DISPLA EXAMPLE1)
|
||
(INCHKP 'CHKEXONEP)
|
||
"Now you may want this expression multiplied out. The EXPAND command
|
||
will do this for you. It takes one argument, the expression
|
||
to be EXPANDed. You may refer to an expression you have typed
|
||
in already by using its D-line label. Type:"
|
||
(PCLINE `(($EXPAND) ,DLABEL))
|
||
(CMDCHKP `(($EXPAND) ,DLABEL))
|
||
"On the other hand, factored form is smaller, and the FACTOR command
|
||
in MACSYMA will factor expressions for you. There is a short
|
||
hand for the D-line label of the last expression
|
||
you typed, the character %. Type"
|
||
(PCLINE '(($FACTOR) $%))
|
||
(CMDCHKP `(($FACTOR) ,DLABEL))
|
||
"The MACSYMA commands to integrate and differentiate (INTEGRATE and
|
||
DIFF) both take a second argument -- the variable to integrate
|
||
or differentiate with respect to. The second argument is
|
||
separated from the first by a comma. For example,"
|
||
(PCLINE `(($INTEGRATE) ,DLABEL $X))
|
||
"If you would type in the expression for"
|
||
(DISPLA EXAMPLE2)
|
||
"Then we can try integrating and differentiating it."
|
||
(INCHK EXAMPLE2)
|
||
"Now use the INTEGRATE command to integrate the last expression"
|
||
(setq $LOADPRINT T)
|
||
(INCHK `(($INTEGRATE) ,DLABEL $X))
|
||
"Now use the DIFF command to differentiate your last result."
|
||
(INCHK `(($DIFF) ,DLABEL $X))
|
||
"You may note that the answer MACSYMA just computed is not the same as
|
||
the original expression before it was integrated and
|
||
differentiated. The terms are not expanded, nor is the sum
|
||
put over a common denominator. The RATSIMP (RATional
|
||
SIMPlification) command will do this for you."
|
||
(CMDCHKP `(($RATSIMP) ,DLABEL))
|
||
"Would you like to learn in more detail about MACSYMA's simplification
|
||
commands?"
|
||
(IF (YESORNO) (SCRIPT '$SIMPLIFICATION NIL))
|
||
"MACSYMA has facilities to handle various series expansions, for
|
||
example, Taylor Series. The TAYLOR command takes four
|
||
arguments, an expression, a variable, the point around which
|
||
to expand the expression, and the power through which to
|
||
generate the terms. To generate a TAYLOR series of the
|
||
square root of 1+X, around the point 0, to the 5th power,
|
||
type:"
|
||
"TAYLOR (SQRT(1+X),X,0,5)"
|
||
|
||
(INCHK '(($TAYLOR) ((%SQRT) ((MPLUS) 1 $X)) $X 0 5))
|
||
|
||
"You can manipulate these expressions just like any others.
|
||
For instance, you can multiply the previous expression by
|
||
itself. Type:"
|
||
"%*%"
|
||
(INCHK `((MTIMES) ,DLABEL ,DLABEL))
|
||
|
||
"The TAYLOR command converts an expression internally
|
||
to MACSYMA's Canonical Rational Expression (CRE) form by
|
||
expanding it and combining all terms over a common denominator.
|
||
This simplifies the operation of the command.
|
||
Expressions that are in CRE form always have the symbol /R/
|
||
following the line label. The RATSIMP command also converts
|
||
expressions internally into CRE form, but converts them back
|
||
to the usual general form at the end.
|
||
Type in:"
|
||
(DISPLA '((MEXPT) ((MPLUS) $X 3) 20))
|
||
(INCHK '((MEXPT) ((MPLUS) $X 3) 20))
|
||
"RATSIMP takes one argument, the expression to be converted.
|
||
Use RATSIMP on the expression you just typed in."
|
||
(CMDCHKP `(($RATSIMP) ,DLABEL))
|
||
"This form is obviously bulkier than our original expression,
|
||
but the expanded CRE form is useful in many problems."
|
||
"Now, differentiate this expression with respect to X"
|
||
(INCHK `(($DIFF) ,DLABEL $X))
|
||
"If you use FACTOR on this expression, you will see that indeed it
|
||
is the appropriate derivative."
|
||
(CMDCHKP `(($FACTOR) ,DLABEL))
|
||
|
||
"MACSYMA has a facility to solve equations using the SOLVE command, which
|
||
usually takes two arguments, the first an expression, and the second
|
||
the variable to be solved for. The second argument may be
|
||
omitted if the expression contains only one variable.
|
||
Use SOLVE on the following expression:"
|
||
(DISPLA '((MPLUS) ((MEXPT) $X 6) ((MMINUS) 1)))
|
||
(INCHK '(($SOLVE) ((MPLUS) ((MEXPT) $X 6) ((MMINUS) 1))))
|
||
"What would you like to go over now?"
|
||
(PRIMER-SELECT '($SIMPLIFICATION $SCRATCHPAD $ASSIGNMENT $SYNTAX $EXIT)) )
|
||
|
||
(DEFSCRIPT $SIMPLIFICATION
|
||
"This is the SIMPLIFICATION script."
|
||
"MACSYMA has several functions to help simplify expressions. Each
|
||
one of them has special properties which make it useful in
|
||
certain situations."
|
||
"For dealing with ratios of polynomials, there are two
|
||
functions which are of use. These are RATSIMP and
|
||
RATEXPAND. RATSIMP rationally simplifies an expression
|
||
and all of its subexpressions and returns a quotient of
|
||
two polynomials. RATEXPAND is similar
|
||
to EXPAND but the result is a sum of terms each of the form A
|
||
over B with all terms over the least common denominator."
|
||
"Type in a polynomial in X."
|
||
(INCHKP 'POLYCHK)
|
||
"Now use the RATSIMP command on it."
|
||
(CMDCHKP `(($RATSIMP) ,DLABEL))
|
||
"Sometimes before using RATSIMP on a complicated expression, it is useful
|
||
to cancel common factors and combine terms a bit, to allow RATSIMP
|
||
to work more efficiently."
|
||
"To illustrate this let's make MACSYMA print out the time it uses, by
|
||
setting SHOWTIME to TRUE."
|
||
(MACSYMA '((MSETQ) $SHOWTIME $TRUE))
|
||
"Now type in this expression:"
|
||
(DISPLA SIMPEXAMPLE1)
|
||
(INCHK SIMPEXAMPLE1)(SETQ D DLABEL)
|
||
"And now use RATSIMP on it."
|
||
(CMDCHKP `(($RATSIMP) ,DLABEL))
|
||
"That works, but for larger expressions it might take quite a long time, or
|
||
might run out of space. XTHRU is a command that will do some
|
||
preliminary simplification like cancelling common factors and
|
||
combining terms. Like RATSIMP, it takes one argument, the
|
||
expression to be operated on.
|
||
So referring back to the original expression
|
||
by its D-label, @D use XTHRU to simplify it."
|
||
(GC)
|
||
(CMDCHKP `(($XTHRU) ,D))
|
||
"Now use RATSIMP on it."
|
||
(CMDCHKP `(($RATSIMP) ,DLABEL))
|
||
"As you can see, the total time for the XTHRU and RATSIMP are considerably
|
||
less than that for just the RATSIMP of the original expression."
|
||
"Now, we will turn off the TIME printout again, by setting TIME to FALSE."
|
||
(MACSYMA '((MSETQ) $SHOWTIME $FALSE))
|
||
"Along with FACTOR, EXPAND, RATSIMP, and RATEXPAND,
|
||
MACSYMA also has a simplifier to handle expressions
|
||
involving logs, exponentials, and radicals. This
|
||
simplifier is called RADCAN, which is short for radical
|
||
canonical. RADCAN can take a long time to simplify
|
||
some expressions, so it should be used with this in mind."
|
||
"Would you like to try RADCAN on an expression?"
|
||
(IF (YESORNO) (SCRIPT 'TRYRADCAN NIL))
|
||
"Would you like to learn more about simplifying and manipulating
|
||
expressions?"
|
||
(IF (YESORNO) (SCRIPT '$SCRATCHPAD NIL))
|
||
"What would you like to go over now?"
|
||
(PRIMER-SELECT '($INTRO $SCRATCHPAD $ASSIGNMENT $SYNTAX $EXIT)) )
|
||
|
||
(DEFSCRIPT $SCRATCHPAD
|
||
"This is the SCRATCHPAD script."
|
||
"In some cases the user
|
||
will want to have access to a finer level of control over
|
||
his expressions. MACSYMA has commands which allow the
|
||
user to play with his expressions in the machine in much
|
||
the same way he would with paper and pencil."
|
||
"One important command of this type in MACSYMA is the SUBST
|
||
command. This command can be used to replace all
|
||
occurrences of a subexpression with some other expression
|
||
in an intermediate result. This is useful, for
|
||
example, in expressions involving trigonometric
|
||
functions, where the MACSYMA simplifiers are not willing,
|
||
for reasons of efficiency, to try all possible trigonometric
|
||
identities."
|
||
"SUBST(A,B,C) means substitute A for B in C. The
|
||
resulting expression will be mathematically equivalent to the
|
||
original expression if A is mathematically equivalent to B."
|
||
(SLEEP 2)
|
||
"Here is a simple example of the use of SUBST. The
|
||
numerator of this expression is equal to 1 for all X,
|
||
but the MACSYMA simplifiers will not simplify it directly."
|
||
(MACSYMA SUBST-EXAMPLE1)
|
||
"There are three ways to use SUBST on this example:"
|
||
"One could substitute 1 for SIN(X)^2+COS(X)^2"
|
||
"One could substitute 1-SIN(X)^2 for COS(X)^2"
|
||
"Or one could substitute 1-COS(X)^2 for SIN(X)^2"
|
||
"The first way is more direct, but in more complex
|
||
examples where the sin squared plus cos squared is deeply
|
||
entwined with other elements of the expression the second
|
||
or third way would be necessary. Pick the way you like
|
||
best and simplify the expression by using SUBST."
|
||
(INCHKP 'SUBEXAMPLE1)
|
||
"SUBST however, can only substitute for expressions
|
||
that constitute an extractable part of the larger expression they
|
||
are contained in. In the case where the thing that you
|
||
want to substitute for is embedded in the expression,
|
||
then a more powerful tool is needed. RATSUBST is a
|
||
command that can be helpful in these cases. Here is an
|
||
example of the same simplification as before but with it
|
||
embedded so that the COS(X)^2 is not easily extractable from
|
||
the expression."
|
||
(MACSYMA SUBST-EXAMPLE2)
|
||
"Now use RATSUBST to simplify the above."
|
||
(INCHKP 'SUBEXAMPLE2)
|
||
"In working with algebraic expressions by hand, one will
|
||
often take part of a larger expression and work with that for
|
||
a time. In MACSYMA that can by done by using the PART
|
||
command. The PART command takes two or more arguments.
|
||
The first is the expression and the rest are specifications
|
||
as to which part is to be taken. Each of the specifications
|
||
is an integer that tells which one of the top level operators
|
||
arguments to take. Consider this example:"
|
||
(MACSYMA EXAMPLE3)
|
||
"This is a quotient of sums and thus the quotient is the top
|
||
level operator. Its first argument is its numerator, and its
|
||
second argument is the denominator. Thus:"
|
||
(PCLINE `(($PART) ,DLABEL 1))
|
||
"would return the numerator. If PART had been given a third
|
||
argument it would pick one of the terms of the numerator. Now
|
||
use the PART command to get the R from the above expression."
|
||
(SETQ $PARTSWITCH T)
|
||
(PARTCHK '$PART '$R)
|
||
(SETQ $PARTSWITCH NIL)
|
||
"What would you like to go over now?"
|
||
(PRIMER-SELECT '($INTRO $SIMPLIFICATION $ASSIGNMENT $SYNTAX $EXIT)) )
|
||
|
||
(DEFSCRIPT $SYNTAX
|
||
"This is the SYNTAX script."
|
||
"Input to MACSYMA is done with a syntax somewhat like that of
|
||
Fortran or Algol. All input lines are terminated
|
||
with a semi-colon (;). Input lines
|
||
are labeled consecutively starting with (C1), and then
|
||
(C2) (C3) etc. MACSYMA results are labeled from
|
||
(D1) on. Thus (D1) is the result of the computations
|
||
performed by MACSYMA on the user's input string (C1)."
|
||
"These line numbers may be used to refer to expressions."
|
||
(SLEEP 2)
|
||
"The display MACSYMA prints out is two dimensional, like a textbook.
|
||
You must be careful not to let this confuse you. If you want
|
||
to type in the mathematical expression 2X, which of course is
|
||
'2 times X', you must type '2*X' even though MACSYMA will
|
||
print back"
|
||
(DISPLA '((MTIMES) 2 $X))
|
||
"Try typing in 2X or some other expression times X:"
|
||
(SYNCHK '(MTIMES) '((MTIMES) 2 $X))
|
||
"* is the multiplication operator. The other operators MACSYMA
|
||
uses are:"
|
||
~! for Factorial,~
|
||
~^ or ** for Exponentiation,~
|
||
~* for Multiplication,~
|
||
~. for non-commutative multiplication~
|
||
~/ for Division, ~
|
||
~+ for Addition, and~
|
||
~- for Subtraction.~
|
||
(SLEEP 2)
|
||
"These operators are applied following the traditional rules for
|
||
operator precedence.
|
||
Do you know what is meant by operator precedence?"
|
||
(IF (NOT (YESORNO)) (SCRIPT 'PRECEDENCE NIL))
|
||
"Variables in MACSYMA (and names of functions and arrays) consist of
|
||
a string of numbers and letters including the character %. Other
|
||
characters may be included by preceding them with a backslash
|
||
(\). Variable names are not limited in length, but must not
|
||
begin with a number."
|
||
"Constants are either numbers or one of the special constants, pi, e
|
||
(the base of natural logarithms), or i (the square root of minus
|
||
one) which are written %PI, %E, and %I to distinguish them from
|
||
the variables pi, e, and i."
|
||
(SLEEP 2)
|
||
"An operator may appear before its argument(s), between its arguments
|
||
or after its argument. Operators that appear before their
|
||
arguments are usually functions (such as SIN and COS) or
|
||
MACSYMA commands (such as INTEGRATE or RATSIMP). The arguments
|
||
to these operators are enclosed in parentheses, for example"
|
||
(PCLINE '((%SIN) 3.141))
|
||
"or"
|
||
(PCLINE '(($INTEGRATE) $% $X))
|
||
"Would you like to practice typing in some expressions?"
|
||
(IF (YESORNO) (SCRIPT 'PRACTICE NIL))
|
||
"That's all for syntax.")
|
||
|
||
(DEFSCRIPT PRACTICE
|
||
"Let's start with a simple linear expression: type in the expression for"
|
||
(DISPLA PRAC-EXAMPLE1)
|
||
|
||
(INCHK PRAC-EXAMPLE1)
|
||
"Okay, now try one where you need to use some parentheses to get the proper
|
||
operator precedence"
|
||
(DISPLA PRAC-EXAMPLE2)
|
||
|
||
(INCHK PRAC-EXAMPLE2)
|
||
"Now try a ratio."
|
||
(DISPLA PRAC-EXAMPLE3)
|
||
|
||
(INCHK PRAC-EXAMPLE3)
|
||
"Okay, try another type of exponentiation"
|
||
(DISPLA PRAC-EXAMPLE4)
|
||
|
||
(INCHK PRAC-EXAMPLE4)
|
||
"Here's a polynomial"
|
||
(DISPLA PRAC-EXAMPLE5)
|
||
|
||
(INCHK PRAC-EXAMPLE5)
|
||
"Now try a slightly more complicated ratio:"
|
||
(DISPLA PRAC-EXAMPLE6)
|
||
|
||
(INCHK PRAC-EXAMPLE6)
|
||
|
||
"Would you like to continue with the Introductory Section of
|
||
the primer?"
|
||
(IF (NOT (YESORNO)) (SCRIPT '$HELP2 NIL)))
|
||
|
||
(DEFSCRIPT $HELP2
|
||
"What would you like to go over? "
|
||
(PRIMER-SELECT '($CONSOLEPRIMER $INTRO $SIMPLIFICATION $SCRATCHPAD $SYNTAX $ASSIGNMENT $EXIT)) )
|
||
|
||
(DEFSCRIPT PRECEDENCE
|
||
"MACSYMA uses the conventional mathematical operator precedence."
|
||
"Would you like to see some examples of how MACSYMA represents
|
||
operator precedence?"
|
||
(IF (YESORNO) (SCRIPT 'PRECEDENCE1 NIL)))
|
||
|
||
(DEFSCRIPT PRECEDENCE1
|
||
"Uparrow, ^, for exponentiation, has higher precedence that * for
|
||
multiplication, so:"
|
||
(MACSYMA '((MTIMES) ((MEXPT) $A 2) $B))
|
||
"Asterisk, *, for multiplication has higher precedence than + for
|
||
addition, so:"
|
||
(MACSYMA '((MPLUS) $A ((MTIMES) $B $C)))
|
||
"Parentheses may be used to change the order of application of
|
||
operators,"
|
||
(MACSYMA '((MTIMES) ((MPLUS) $A $B) $C))
|
||
"If you need further examples, consult page 8 of the MACSYMA Manual."
|
||
(SLEEP 7))
|
||
|
||
(DEFSCRIPT TRYRADCAN
|
||
"Type in this expression:"
|
||
(DISPLA RADCANEXAMPLE)
|
||
(INCHKP 'CHKRADCAN)
|
||
"Now use RADCAN on it."
|
||
(CMDCHKP `(($RADCAN) ,DLABEL)))
|
||
|
||
(DEFSCRIPT $HELP
|
||
"Hello. Please terminate your responses with a ;.
|
||
What would you like to go over? (Select the number of the script you
|
||
would like to see.)
|
||
INTRO is a general introduction
|
||
for people who have never used MACSYMA or this PRIMER before."
|
||
|
||
(PRIMER-SELECT '($CONSOLEPRIMER $INTRO $SIMPLIFICATION $SCRATCHPAD $SYNTAX $ASSIGNMENT $EXIT)) )
|
||
|
||
(DEFSCRIPT CRTCONSOLE
|
||
"Since you have a display (CRT) console, there is one special
|
||
thing you must know before we proceed: When the printout
|
||
reaches the bottom of your screen, the system will print
|
||
**MORE**, --More Display?--, or --Pause--, and the output
|
||
will pause, leaving you as much time as you like to read
|
||
what has been printed. When you are ready to continue, you
|
||
hit the space bar once. The system will print --Continued--
|
||
and output will resume." )
|
||
|
||
(DEFSCRIPT CTRLCHAR
|
||
(SSTATUS TTYINT 7 'NIL)
|
||
"To type a control-character you use the key on your console labeled
|
||
'CTRL' or 'Control' in the same fashion as you would use the
|
||
'shift' key, that is you hold down the key labeled 'CTRL' and
|
||
strike the key you want to make a control-character. The
|
||
control-character which you will probably find the most useful
|
||
in MACSYMA, is control-G.
|
||
This is MACSYMA's 'QUIT' character, that is the character which
|
||
will cause MACSYMA to stop what it is doing and accept more input
|
||
from you. It is sort of the 'panic button', and will stop infinite
|
||
loops. So you can find it and practice
|
||
typing it, it is temporarily disabled as a 'QUIT' character."
|
||
"Try typing it now:"
|
||
(QUITCHK)
|
||
(SSTATUS TTYINT 7 'MQUIT))
|
||
|
||
(SETQ EXAMPLE1 '((MEXPT) ((MPLUS) $X 1) 3))
|
||
|
||
(SETQ EXAMPLE2 '((MQUOTIENT) $A
|
||
((MPLUS) ((MEXPT) $X 3) ((MTIMES) 2 ((MEXPT) $X 2)) $X)))
|
||
|
||
(SETQ EXAMPLE3 '((MQUOTIENT) ((MPLUS) $A $B $C) ((MPLUS) $Q $R $S)))
|
||
|
||
(SETQ EXAMPLE4 '(($FACTOR)
|
||
((MPLUS) ((MEXPT) $X 3)
|
||
((MTIMES) ((MEXPT) $X 2)
|
||
((MEXPT) $Y 2))
|
||
((MMINUS) ((MTIMES) $X ((MEXPT) $Z 2)))
|
||
((MMINUS) ((MTIMES) ((MEXPT) $Y 2)
|
||
((MEXPT) $Z 2))))))
|
||
|
||
|
||
(SETQ SUBST-EXAMPLE1 '((MQUOTIENT)
|
||
((MPLUS) ((MEXPT) ((%SIN) $X) 2)
|
||
((MEXPT) ((%COS) $X) 2))
|
||
((MPLUS) ((MEXPT) $X 2) 39)))
|
||
|
||
(SETQ SUBST-EXAMPLE2 '((MPLUS)
|
||
((MTIMES) ((MEXPT) ((%COS) $X) 3) ((%SIN) $X))
|
||
((MTIMES) ((%COS) $X) ((MEXPT) ((%SIN) $X) 3))))
|
||
|
||
(SETQ PRAC-EXAMPLE1 '((MPLUS)((MTIMES) 3 $X) 1))
|
||
|
||
(SETQ PRAC-EXAMPLE2 '((MEXPT)((MPLUS) $X 2) 3))
|
||
|
||
(SETQ PRAC-EXAMPLE3 '((MQUOTIENT) 1 ((%SIN) $X)))
|
||
|
||
(SETQ PRAC-EXAMPLE4 '((MEXPT) $%E ((MTIMES) 2 $%PI $I)))
|
||
|
||
(SETQ PRAC-EXAMPLE5 '((MPLUS)((MEXPT) $X 2)((MTIMES) 2 $X) 1))
|
||
|
||
(SETQ PRAC-EXAMPLE6 '((MQUOTIENT) 1 ((MPLUS) ((MEXPT) $X 2) 3)))
|
||
|
||
(SETQ SIMPEXAMPLE1 '((MPLUS)((MQUOTIENT) 1 ((MEXPT) ((MPLUS) $Y $X) 3))
|
||
((MQUOTIENT) ((MPLUS) ((MEXPT) ((MPLUS) $X 2) 8)
|
||
((MMINUS) ((MTIMES) 2 $Y)))
|
||
((MEXPT) ((MPLUS) $Y $X) 8))))
|
||
|
||
(SETQ RADCANEXAMPLE '((MQUOTIENT)((MEXPT)((MPLUS)
|
||
((%LOG)((MPLUS)((MEXPT) $X 2) $X))
|
||
((MMINUS) ((%LOG) $X)))
|
||
$B)
|
||
((MEXPT)((%LOG)((MPLUS) $X 1))((MQUOTIENT) $B 2))))
|
||
|
||
(DEFUN NUMCHK (NUM)
|
||
(TERPRI)
|
||
(DO ANS (RETRIEVE NIL NIL) (RETRIEVE NIL NIL) NIL
|
||
(COND ((EQ '$NO ANS)
|
||
(TERPRI) (PRINC '|Well, all right, I'll show you.|)
|
||
(TERPRI)(PRIN1 NUM)(PRINC '|;|)(RETURN (TERPRI)))
|
||
((NOT (EQ (TYPEP ANS) 'FIXNUM))
|
||
(TERPRI)(PRINC '|That isn't a number.|)
|
||
(TERPRI)(PRINC '|Try again.|)(TERPRI))
|
||
((AND (> ANS 0)(NOT (> ANS NUM)))(RETURN (TERPRI)))
|
||
(T (TERPRI) (PRINC '|That number isn't in the list. Try again.|)
|
||
(TERPRI)))))
|
||
|
||
(DEFUN QUITCHK ()
|
||
(TERPRI)
|
||
(DO ((X (TYI)(TYI))) (NIL)
|
||
(COND ((OR (= X 103) (= X 71))
|
||
(TERPRI)
|
||
(PRINC '|That was just a G, try again.|)
|
||
(TERPRI)
|
||
(PRINC '|Hold down the control key.|)(TERPRI))
|
||
((= X 7)
|
||
(TERPRI)
|
||
(PRINC '|That's it, very good.|)
|
||
(TERPRI)
|
||
(PRINC '|Now we'll make it a quit character again, so|)
|
||
(TERPRI)
|
||
(PRINC '|only type it if you want to quit out of the PRIMER.|)
|
||
(RETURN (TERPRI)))
|
||
(T (TERPRI)
|
||
(PRINC '|Nope, not quite. Try again, hold down the control key|)
|
||
(TERPRI)
|
||
(PRINC '|and hit the G.|)(TERPRI))))) |