Format: (cond (<test1> <body1> ) (<test2> <body2> ) . . (<testN> <bodyN> ))
Required arguments: none
Optional arguments: zero or more (<test> <body> ) clauses
Here, <test> is any Lisp expression. The <body> is a sequence of zero or more Lisp expressions.
Each <test> expression is evaluated in turn, until one is found whose value is non-NIL. For this clause, the sequence of <body> expressions are evaluated and the value of the last expression is returned as the result of cond. If no successful <test> expression is found, cond returns NIL. If a successful <test> expression is found, but its clause contains no <body> expressions, the result of the <test> expression is returned as the result of cond.
> (setq a '3) 3 > (setq b '4) 4 > (cond ((= a b) 'equal) ((< a b) 'b-is-bigger) (t 'a-is-bigger)) B-IS-BIGGER > (setq action 'square-both) SQUARE-BOTH > (cond ((equal action 'clear-both) (setq a 0) (setq b 0)) ((equal action 'square-both) (setq a (* a a)) (setq b (* b b))) ((equal action 'square-a) (setq a (* a a))) ((equal action 'square-b) (setq b (* b b)))) 16 > (cond ((= a 5) 'found) ((= b 5) 'found)) NIL > (cond ((+ a 1))) ; strange use of cond 10 ; before this, a was 9 due to previous ; cond clauses
© Colin Allen & Maneesh Dhagat