Welcome to the Southern African Autolisp Website.

Afra-lISP


You are Visitor Number since 4th December 1998


Conditionals.

(If) is probably the most important and widely use condition statement.
Unlike other languages though, you can match only one (if) statement with
a then statement. The syntax is as follows :

(if xyz
	(then do this)
	(else do this)
)

Let's look at a simple example :

(defun c:testif ()
	(setq a (getreal "\nEnter a Number : ")
	      b (getreal "\nEnter Second Number : ")
	);setq
	(if (= a b)
		(prompt "\nBoth Numbers are equal")
		(prompt "\nBoth numbers are not equal")
	);if
   (princ)
);defun
(princ)


If you need to evaluate more than one then, or else statement, you
must use the (progn) function. Here's another example :

(defun c:testprogn ()
	(setq a (getreal "\nEnter a Number : ")
	      b (getreal "\nEnter Second Number : ")
	);setq
	(if (= a b)
	      (progn
		(prompt "\nBoth Numbers are equal")
		(prompt "\nHere is Another statement")
		(prompt "\nAnd Another One")
	      );progn
		(prompt "\nBoth numbers are not equal")
	);if
   (princ)
);defun
(princ)

You can use as many statements as you like within the (progn) function.


You can also use (if) along with logical operators. They are functions
that determine how two or more items are compared.
The available logical operators are :

AND     OR      NOT

AND returns true if all arguments are true.
OR returns true if any of the arguments are true.
NOT returns true if it's argument is false and returns false
if it's argument is true.
Let's look at some examples :

(defun c:testand ()
	(setq a (getreal "\nEnter a Number : "))
	(if
	    (and
		(>= a 5.0)
		(<= a 10.0)
	    );and
		(prompt "\nNumber is between 5 and 10")
		(prompt "\nNumber is less than 5 or greater than 10")
	);if
   (princ)
);defun
(princ)


(defun c:testor ()
	(setq a (getstring "\nAre you Male? Y/N : "))
	(if 
	    (or
	      	(= a "y")
		(= a "Y")
	    );or
		(prompt "\nHello Sir")
		(prompt "\nHello Madam")
	);if
    (princ)
);defun
(princ)


A Relation Operator is a function that evaluates the relationship between
two or more items. Relationship Operators available are :

<	less than
>	greater than
<=	less than or equal to
>=	greater than or equal to
=	equal to
/=	not equal to
eq	are two expressions identical
equal	are two expressions equal

Let's look a bit closer at the (eq) and the (equal) functions.
The (eq) function determines whether two expressions are bound to
the same object.

(setq a '(x y z))
(setq b '(x y z))
(setq c b)

(eq a c) would return nil, a and c are not the same list.
(eq c b) would return true, b and c are exactly the same list.

The (equal) function determines whether two expressions evaluate to
the same thing. You can use the optional numeric argument, fuzz,
to specify the maximum amount by which both expressions can differ
and still be considered equal.

(setq a '(x y z))
(setq b '(x y z))
(setq c b)
(setq m 1.123456))
(setq n 1.123457))

(equal a c) would return true.
(equal c b) would return true.
(equal m n) would return nil.
(equal m n 0.000001) would return true.


What about a Multiple (if) function. The (cond) function works very much
like (if), except (cond) can evaluate any number of test conditions.
Once (cond) finds the fist condition that is true, it processes the
statements associated with that condition. (It only processes the
first true condition). Here's an example :

(defun c:testcond ()
	(setq a
	   (strcase (getstring "\nSize of Bolt (M10,M12,M16): ")
	   );strcase
	);setq
	(cond
		((= a "M10") (prompt "\nYou have choosen M10"))
		((= a "M12") (prompt "\nYou have choosen M12"))
		((= a "M16") (prompt "\nYou have choosen M16"))
		(T (prompt "\nUnknown Bolt Size"))
	);cond
   (princ)
);defun
(princ)

The (cond) function takes any number of lists as it's arguments.
Each argument must be a list containing a test followed by any number
of expressions to be evaluated.


Copyright © 1998 by Kenny Ramage
All rights reserved.
Information in this document is subject to change without notice.
Site created and maintained by Kenny Ramage.