(let (a b c)
(and (null (psetq a 1 b 2 c 3))
(eql a 1)
(eql b 2)
(eql c 3)))
(let ((a 1)
(b 2)
(c 3))
(and (null (psetq a (1+ b) b (1+ a) c (+ a b)))
(eql a 3)
(eql b 2)
(eql c 3)))
(let ((x (list 10 20 30)))
(symbol-macrolet ((y (car x)) (z (cadr x)))
(psetq y (1+ z) z (1+ y))
(equal (list x y z) '((21 11 30) 21 11))))
(let ((a 1) (b 2))
(and (null (psetq a b b a))
(eql a 2)
(eql b 1)))
(null (psetq))
(let ((a nil))
(and (null (psetq a t))
(eq a t)))
(let ((a 0)
(b 1))
(and (null (psetq a b
b a))
(eq a 1)
(eq b 0)))
(let ((a 0)
(b 1)
(c 2))
(and (null (psetq a b
b c
c a))
(eq a 1)
(eq b 2)
(eq c 0)))
(let ((a 0)
(b 1)
(c 2)
(d 3))
(and (null (psetq a b
b c
c d
d a))
(eq a 1)
(eq b 2)
(eq c 3)
(eq d 0)))
(null (block nil (return) 1))
(eql (block nil (return 1) 2) 1)
(equal (multiple-value-list (block nil (return (values 1 2)) 3)) '(1 2))
(eql (block nil (block alpha (return 1) 2)) 1)
(eql (block alpha (block nil (return 1)) 2) 2)
(eql (block nil (block nil (return 1) 2)) 1)
(eq (dotimes (i 10 nil)
(return t))
t)
(eq (dolist (elt (list 0 1 2 3) nil)
(when (numberp elt)
(return t)))
t)
(not nil)
(not '())
(not (integerp 'sss))
(null (not (integerp 1)))
(null (not 3.7))
(null (not 'apple))
(not nil)
(null (not t))
(not (cdr '(a)))
(equal 'a 'a)
(not (equal 'a 'b))
(equal 'abc 'abc)
(equal 1 1)
(equal 2 2)
(equal 0.1 0.1)
(equal 1/3 1/3)
(not (equal 0 1))
(not (equal 1 1.0))
(not (equal 1/3 1/4))
(equal #\a #\a)
(equal #\b #\b)
(not (equal #\b #\B))
(not (equal #\C #\c))
(equal '(0) '(0))
(equal '(0 #\a) '(0 #\a))
(equal '(0 #\a x) '(0 #\a x))
(equal '(0 #\a x (0)) '(0 #\a x (0)))
(equal '(0 #\a x (0 (#\a (x "abc" #*0101))))
'(0 #\a x (0 (#\a (x "abc" #*0101)))))
(not (equal (make-array '(2 2) :initial-contents '((a b) (c d)))
(make-array '(2 2) :initial-contents '((a b) (c d)))))
(let ((array (make-array '(2 2) :initial-contents '((a b) (c d)))))
(equal array array))
(eql (identity 101) 101)
(equal (mapcan #'identity (list (list 1 2 3) '(4 5 6))) '(1 2 3 4 5 6))
(eq (identity 'x) 'x)
(funcall (complement #'zerop) 1)
(not (funcall (complement #'characterp) #\A))
(not (funcall (complement #'member) 'a '(a b c)))
(funcall (complement #'member) 'd '(a b c))
(equal (mapcar (constantly 3) '(a b c d)) '(3 3 3 3))
(let ((const-func (constantly 'xyz)))
(every #'(lambda (arg) (eq arg 'xyz))
(list (funcall const-func)
(funcall const-func 'a)
(funcall const-func 'a 'b)
(funcall const-func 'a 'b 'c)
(funcall const-func 'a 'b 'c 'd))))
(let ((temp1 1)
(temp2 1)
(temp3 1))
(and (eql (and (incf temp1) (incf temp2) (incf temp3)) 2)
(and (eql 2 temp1) (eql 2 temp2) (eql 2 temp3))
(eql (decf temp3) 1)
(null (and (decf temp1) (decf temp2) (eq temp3 'nil) (decf temp3)))
(and (eql temp1 temp2) (eql temp2 temp3))
(and)))
(eq (and) t)
(equal (multiple-value-list (and 't 't 't (values 'a 'b 'c)))
'(a b c))
(null (and 't 't (cdr '(a)) (error "error")))
(let ((temp0 nil)
(temp1 10)
(temp2 20)
(temp3 30))
(and (eql (or temp0 temp1 (setq temp2 37)) 10)
(eql temp2 20)
(eql (or (incf temp1) (incf temp2) (incf temp3)) 11)
(eql temp1 11)
(eql temp2 20)
(eql temp3 30)
(equal (multiple-value-list (or (values) temp1)) '(11))
(equal (multiple-value-list (or (values temp1 temp2) temp3)) '(11))
(equal (multiple-value-list (or temp0 (values temp1 temp2))) '(11 20))
(equal (multiple-value-list (or (values temp0 temp1)
(values temp2 temp3)))
'(20 30))))
(zerop (or '0 '1 '2))
(let ((a 0))
(and (eql (or (incf a) (incf a) (incf a)) 1)
(eql a 1)))
(equal (multiple-value-list (or (values) 1)) '(1))
(equal (multiple-value-list (or (values 1 2) 3)) '(1))
(null (or))
(equal (multiple-value-list (or (values 0 1 2))) '(0 1 2))
(equal (multiple-value-list (or nil (values 0 1 2))) '(0 1 2))
(equal (multiple-value-list (or nil nil (values 0 1 2))) '(0 1 2))
(equal (multiple-value-list (or nil nil nil (values 0 1 2))) '(0 1 2))
(let ((a nil))
(flet ((select-options ()
(cond ((= a 1) (setq a 2))
((= a 2) (setq a 3))
((and (= a 3) (floor a 2)))
(t (floor a 3)))))
(and (eql (setq a 1) 1)
(eql (select-options) 2)
(eql a 2)
(eql (select-options) 3)
(eql a 3)
(eql (select-options) 1)
(setq a 5)
(equal (multiple-value-list (select-options)) '(1 2)))))
(null (cond))
(equal (multiple-value-list (cond ((values 1 2 3)))) '(1))
(equal (multiple-value-list (cond (t (values 1 2 3)))) '(1 2 3))
(equal (multiple-value-list (cond (t (values 1)
(values 1 2)
(values 1 2 3)))) '(1 2 3))
(let ((a 0))
(and (eql (cond
((incf a))
((incf a))
((incf a)))
1)
(eql a 1)))
(let ((a 0))
(and (eql (cond
((incf a) (incf a) (incf a))
((incf a) (incf a) (incf a))
((incf a) (incf a) (incf a)))
3)
(eql a 3)))
(eq (when t 'hello) 'HELLO)
(null (unless t 'hello))
(null (when nil 'hello))
(eq (unless nil 'hello) 'HELLO)
(null (when t))
(null (unless nil))
(let ((x 3))
(equal (list (when (oddp x) (incf x) (list x))
(when (oddp x) (incf x) (list x))
(unless (oddp x) (incf x) (list x))
(unless (oddp x) (incf x) (list x))
(if (oddp x) (incf x) (list x))
(if (oddp x) (incf x) (list x))
(if (not (oddp x)) (incf x) (list x))
(if (not (oddp x)) (incf x) (list x)))
'((4) NIL (5) NIL 6 (6) 7 (7))))
(equal (let ((list nil))
(dolist (k '(1 2 3 :four #\v () t 'other))
(push (case k
((1 2) 'clause1)
(3 'clause2)
(nil 'no-keys-so-never-seen)
((nil) 'nilslot)
((:four #\v) 'clause4)
((t) 'tslot)
(otherwise 'others))
list))
list)
'(OTHERS TSLOT NILSLOT CLAUSE4 CLAUSE4 CLAUSE2 CLAUSE1 CLAUSE1))
(macro-function 'case)
(macro-function 'ccase)
(macro-function 'ecase)
(eql (case 'a
((a b c) 0)
(x 1)
(y 2)
(z 3))
0)
(eql (case 'j
((a b c) 0)
(x 1)
(y 2)
(z 3)
(t 9))
9)
(eql (case 'j
((a b c) 0)
(x 1)
(y 2)
(z 3)
(otherwise 9))
9)
(eql (case 'j
((a b c) 0)
(x 1)
(y 2)
(z 3))
nil)
(null (case 'x))
(let ((x #\a))
(equal (case x
((#\x #\y #\z) "xyz")
(#\a "a")
(t "-"))
"a"))
(let ((x #\A))
(equal (case x
((#\x #\y #\z) "xyz")
(#\a "a")
(t "-"))
"-"))
(let ((x t))
(eql (case x
((t) 0)
(t 1))
0))
(let ((x nil))
(eql (case x
((t) 0)
(t 1))
1))
(let ((x 'a))
(eql (case x
((t) 0))
nil))
(let ((x 'otherwise))
(eql (case x
((otherwise) 0)
(otherwise 1))
0))
(let ((x nil))
(eql (case x
((otherwise) 0)
(otherwise 1))
1))
(let ((x 'a))
(eql (case x
((otherwise) 0))
nil))
(let ((x 'a))
(and (eql (case x
((a b c) (setq x 0) 'a)
((x y z) (setq x 1) 'x))
'a)
(eql x 0)))
(let ((x 'x))
(and (eql (case x
((a b c) (setq x 0) 'a)
((x y z) (setq x 1) 'x))
'x)
(eql x 1)))
(equal (mapcar #'(lambda (x) (case x (a 0) (b 1) (c 2) (d 3) (e 4)))
'(a b c d e f))
'(0 1 2 3 4 nil))
(case 'a (otherwise t))
(eql (case 'a (otherwise 10)) 10)
(let ((a 0)
(b 1))
(and (eq (case (progn (incf a) (incf b))
(0 'a)
(1 'b)
(2 'c))
'c)
(eql a 1)
(eql b 2)))
(let ((a 0)
(b 1))
(and (eq (case (progn (incf a) (incf b))
(0 'a)
(1 'b)
(2 (incf a) (incf b) 'c))
'c)
(eql a 2)
(eql b 3)))
(let ((a (list 0 1 2 3)))
(eq (case (caddr a)
(0 'x)
(1 'y)
(2 'z)
(3 t))
'z))
(equal (multiple-value-list (case 2
(0 (values 0 'x))
(1 (values 1 'y))
(2 (values 2 'z))
(3 (values 3 't))))
'(2 z))
(let ((a 'c))
(eql (ccase a
((a b c) 0)
(x 1)
(y 2)
(z 3))
0))
(HANDLER-CASE
(PROGN
(LET ((A 'J))
(CCASE A ((A B C) 0) (X 1) (Y 2) (Z 3))))
(TYPE-ERROR NIL T)
(ERROR NIL NIL)
(:NO-ERROR (&REST REST) (DECLARE (IGNORE REST)) NIL))
(HANDLER-CASE
(PROGN
(LET ((A NIL))
(CCASE A)))
(TYPE-ERROR NIL T)
(ERROR NIL NIL)
(:NO-ERROR (&REST REST) (DECLARE (IGNORE REST)) NIL))
(HANDLER-CASE
(PROGN
(LET ((A #\a))
(CCASE A ((#\A #\B #\C) 0) ((#\X #\Y #\Z) 1))))
(TYPE-ERROR NIL T)
(ERROR NIL NIL)
(:NO-ERROR (&REST REST) (DECLARE (IGNORE REST)) NIL))
(let ((a (list 0 1 2 3)))
(eq (ccase (caddr a)
(0 'x)
(1 'y)
(2 'z)
(3 t))
'z))
(let ((x #\a))
(equal (ccase x
((#\x #\y #\z) "xyz")
(#\a "a"))
"a"))
(let ((x 'a))
(and (eql (ccase x
((a b c) (setq x 0) 'a)
((x y z) (setq x 1) 'x))
'a)
(eql x 0)))
(let ((x 'x))
(and (eql (ccase x
((a b c) (setq x 0) 'a)
((x y z) (setq x 1) 'x))
'x)
(eql x 1)))
(equal (mapcar #'(lambda (x) (ccase x (a 0) (b 1) (c 2) (d 3) (e 4)))
'(a b c d e))
'(0 1 2 3 4))
(equal (multiple-value-list (let ((a 2))
(ccase a
(0 (values 0 'x))
(1 (values 1 'y))
(2 (values 2 'z))
(3 (values 3 't)))))
'(2 z))
(let ((a 'c))
(eql (ecase a
((a b c) 0)
(x 1)
(y 2)
(z 3))
0))
(HANDLER-CASE
(PROGN
(LET ((A 'J))
(ECASE A ((A B C) 0) (X 1) (Y 2) (Z 3))))
(TYPE-ERROR NIL T)
(ERROR NIL NIL)
(:NO-ERROR (&REST REST) (DECLARE (IGNORE REST)) NIL))
(HANDLER-CASE
(PROGN
(LET ((A NIL))
(ECASE A)))
(TYPE-ERROR NIL T)
(ERROR NIL NIL)
(:NO-ERROR (&REST REST) (DECLARE (IGNORE REST)) NIL))
(HANDLER-CASE
(PROGN
(LET ((A #\a))
(ECASE A ((#\A #\B #\C) 0) ((#\X #\Y #\Z) 1))))
(TYPE-ERROR NIL T)
(ERROR NIL NIL)
(:NO-ERROR (&REST REST) (DECLARE (IGNORE REST)) NIL))
(let ((a (list 0 1 2 3)))
(eq (ecase (caddr a)
(0 'x)
(1 'y)
(2 'z)
(3 t))
'z))
(let ((x #\a))
(equal (ecase x
((#\x #\y #\z) "xyz")
(#\a "a"))
"a"))
(let ((x 'a))
(and (eql (ecase x
((a b c) (setq x 0) 'a)
((x y z) (setq x 1) 'x))
'a)
(eql x 0)))
(let ((x 'x))
(and (eql (ecase x
((a b c) (setq x 0) 'a)
((x y z) (setq x 1) 'x))
'x)
(eql x 1)))
(equal (mapcar #'(lambda (x) (ecase x (a 0) (b 1) (c 2) (d 3) (e 4)))
'(a b c d e))
'(0 1 2 3 4))
(equal (multiple-value-list (let ((a 2))
(ecase a
(0 (values 0 'x))
(1 (values 1 'y))
(2 (values 2 'z))
(3 (values 3 't)))))
'(2 z))
(let ((x 'a))
(equal (typecase x
(cons "cons")
(symbol "symbol")
(number "number")
(otherwise "unknown"))
"symbol"))
(let ((x (list 'a)))
(equal (typecase x
(cons "cons")
(symbol "symbol")
(number "number")
(otherwise "unknown"))
"cons"))
(let ((x 0))
(equal (typecase x
(cons "cons")
(symbol "symbol")
(number "number")
(otherwise "unknown"))
"number"))
(let ((x (make-array '(3 3))))
(equal (typecase x
(cons "cons")
(symbol "symbol")
(number "number")
(otherwise "unknown"))
"unknown"))
(null (typecase 'a))
(typecase 'a (otherwise t))
(typecase 'a (t t))
(let ((x (make-array '(3 3))))
(equal (typecase x
(cons "cons")
(symbol "symbol")
(number "number"))
nil))
(let ((x ""))
(equal (typecase x
(t "anything")
(otherwise nil))
"anything"))
(let ((x ""))
(and (eql (typecase x
(string (setq x 'string) 0)
(cons (setq x 'cons) 1)
(array (setq x 'array) 2)
(t (setq x 't) 9))
0)
(eq x 'string)))
(let ((x (list nil)))
(and (eql (typecase x
(string (setq x 'string) 0)
(cons (setq x 'cons) 1)
(array (setq x 'array) 2)
(t (setq x 't) 9))
1)
(eq x 'cons)))
(let ((x #*01))
(and (eql (typecase x
(string (setq x 'string) 0)
(cons (setq x 'cons) 1)
(array (setq x 'array) 2)
(t (setq x 't) 9))
2)
(eq x 'array)))
(let ((x #\a))
(and (eql (typecase x
(string (setq x 'string) 0)
(cons (setq x 'cons) 1)
(array (setq x 'array) 2)
(t (setq x 't) 9))
9)
(eq x 't)))
(let ((x #*01))
(and (equal (multiple-value-list (typecase x
(string (setq x 'string) (values 'string 0))
(cons (setq x 'cons) (values 'cons 1))
(array (setq x 'array) (values 'array 2))
(t (setq x 't) (values 't 9))))
'(array 2))
(eq x 'array)))
(let ((x 'a))
(equal (ctypecase x
(cons "cons")
(symbol "symbol")
(number "number"))
"symbol"))
(let ((x (list 'a)))
(equal (ctypecase x
(cons "cons")
(symbol "symbol")
(number "number"))
"cons"))
(let ((x 0))
(equal (ctypecase x
(cons "cons")
(symbol "symbol")
(number "number"))
"number"))
(HANDLER-CASE
(LET ((X (MAKE-ARRAY '(3 3))))
(CTYPECASE X
(CONS "cons")
(SYMBOL "symbol")
(NUMBER "number")))
(TYPE-ERROR NIL T)
(ERROR NIL NIL)
(:NO-ERROR (&REST REST) (DECLARE (IGNORE REST)) NIL))
(HANDLER-CASE
(LET ((A NIL)) (CTYPECASE A))
(TYPE-ERROR NIL T)
(ERROR NIL NIL)
(:NO-ERROR (&REST REST) (DECLARE (IGNORE REST)) NIL))
(let ((x ""))
(and (eql (ctypecase x
(string (setq x 'string) 0)
(cons (setq x 'cons) 1)
(array (setq x 'array) 2))
0)
(eq x 'string)))
(let ((x (list nil)))
(and (eql (ctypecase x
(string (setq x 'string) 0)
(cons (setq x 'cons) 1)
(array (setq x 'array) 2))
1)
(eq x 'cons)))
(let ((x #*01))
(and (eql (ctypecase x
(string (setq x 'string) 0)
(cons (setq x 'cons) 1)
(array (setq x 'array) 2))
2)
(eq x 'array)))
(HANDLER-CASE
(LET ((X #\a))
(CTYPECASE X
(STRING (SETQ X 'STRING) 0)
(CONS (SETQ X 'CONS) 1)
(ARRAY (SETQ X 'ARRAY) 2)))
(TYPE-ERROR NIL T)
(ERROR NIL NIL)
(:NO-ERROR (&REST REST) (DECLARE (IGNORE REST)) NIL))
(let ((x #*01))
(and (equal (multiple-value-list (ctypecase x
(string (setq x 'string) (values 'string 0))
(cons (setq x 'cons) (values 'cons 1))
(array (setq x 'array) (values 'array 2))))
'(array 2))
(eq x 'array)))
(let ((x 'a))
(equal (etypecase x
(cons "cons")
(symbol "symbol")
(number "number"))
"symbol"))
(let ((x (list 'a)))
(equal (etypecase x
(cons "cons")
(symbol "symbol")
(number "number"))
"cons"))
(let ((x 0))
(equal (etypecase x
(cons "cons")
(symbol "symbol")
(number "number"))
"number"))
(HANDLER-CASE
(PROGN
(LET ((X (MAKE-ARRAY '(3 3))))
(ETYPECASE X (CONS "cons") (SYMBOL "symbol") (NUMBER "number"))))
(TYPE-ERROR NIL T)
(ERROR NIL NIL)
(:NO-ERROR (&REST REST) (DECLARE (IGNORE REST)) NIL))
(HANDLER-CASE
(PROGN
(LET ((A NIL))
(ETYPECASE A)))
(TYPE-ERROR NIL T)
(ERROR NIL NIL)
(:NO-ERROR (&REST REST) (DECLARE (IGNORE REST)) NIL))
(let ((x ""))
(and (eql (etypecase x
(string (setq x 'string) 0)
(cons (setq x 'cons) 1)
(array (setq x 'array) 2))
0)
(eq x 'string)))
(let ((x (list nil)))
(and (eql (etypecase x
(string (setq x 'string) 0)
(cons (setq x 'cons) 1)
(array (setq x 'array) 2))
1)
(eq x 'cons)))
(let ((x #*01))
(and (eql (etypecase x
(string (setq x 'string) 0)
(cons (setq x 'cons) 1)
(array (setq x 'array) 2))
2)
(eq x 'array)))
(HANDLER-CASE
(PROGN
(LET ((X #\a))
(ETYPECASE X
(STRING (SETQ X 'STRING) 0)
(CONS (SETQ X 'CONS) 1)
(ARRAY (SETQ X 'ARRAY) 2))))
(TYPE-ERROR NIL T)
(ERROR NIL NIL)
(:NO-ERROR (&REST REST) (DECLARE (IGNORE REST)) NIL))
(let ((x #*01))
(and (equal (multiple-value-list (etypecase x
(string (setq x 'string) (values 'string 0))
(cons (setq x 'cons) (values 'cons 1))
(array (setq x 'array) (values 'array 2))))
'(array 2))
(eq x 'array)))
(macro-function 'multiple-value-bind)
(equal (multiple-value-bind (f r)
(floor 130 11)
(list f r))
'(11 9))
(multiple-value-bind (a b c d)
(values 0 1 2 3 4 5)
(and (eql a 0)
(eql b 1)
(eql c 2)
(eql d 3)))
(multiple-value-bind (a b c d)
(values 0 1)
(and (eql a 0)
(eql b 1)
(eql c nil)
(eql d nil)))
(equal (multiple-value-list (multiple-value-bind (a b)
(values 0 1)
(values a b 2 3)))
'(0 1 2 3))
(multiple-value-bind ()
(values 0 1 2)
t)
(null (multiple-value-bind () nil))
(eql (multiple-value-bind (a)
(floor 130 11)
(+ a 10))
21)
(eql (multiple-value-bind (a)
(floor 130 11)
(+ a 10)
(incf a 100)
(+ a 10))
121)
(equal (multiple-value-call #'list 1 '/ (values 2 3) '/ (values) '/ (floor 2.5))
'(1 / 2 3 / / 2 0.5))
(eql (+ (floor 5 3) (floor 19 4)) (+ 1 4))
(eql (multiple-value-call #'+ (floor 5 3) (floor 19 4)) (+ 1 2 4 3))
(let ((list nil))
(and (eql (multiple-value-call (progn (push 'function list) #'+)
(progn (push 0 list) 0)
(progn (push 1 list) (values 1 2))
(progn (push 2 list) (values 3 4 5))
(progn (push 3 list) (values 6 7 8 9)))
45)
(equal (reverse list) '(function 0 1 2 3))))
(eql (multiple-value-call #'+ 0 1 2 3 4) 10)
(eql (multiple-value-call #'+) 0)
(equal (multiple-value-list
(multiple-value-call #'values
0 1 (values 2) (values 3 4) (values 5 6 7)))
'(0 1 2 3 4 5 6 7))
(special-operator-p 'multiple-value-call)
(macro-function 'multiple-value-list)
(equal (multiple-value-list (floor -3 4)) '(-1 1))
(equal (multiple-value-list
(progn
(values 'a 'b)
0))
'(0))
(equal (multiple-value-list
(prog1
(values 'a 'b)
0))
'(a))
(equal (multiple-value-list
(multiple-value-prog1
(values 'a 'b)
0))
'(a b))
(special-operator-p 'multiple-value-prog1)
(eql (multiple-value-prog1 1 2 3) 1)
(eql (multiple-value-prog1 1 2 3) 1)
(let ((temp '(1 2 3)))
(multiple-value-bind (a b c)
(multiple-value-prog1
(values-list temp)
(setq temp nil)
(values-list temp))
(and (eql a 1)
(eql b 2)
(eql c 3))))
(zerop (multiple-value-prog1 0
(values 0 1)
(values 0 1 2)))
(equal (multiple-value-list (multiple-value-prog1 (progn 0
(values 0 1)
(values 0 1 2))))
'(0 1 2))
(let (quotient remainder)
(and (eql (multiple-value-setq (quotient remainder) (truncate 3.2 2)) 1)
(eql quotient 1)
(eql remainder 1.2)))
(let ((a 7)
(b 8)
(c 9))
(and (eql (multiple-value-setq (a b c) (values 1 2)) 1)
(eql a 1)
(eql b 2)
(eql c NIL)))
(let ((a 0)
(b 1))
(and (eql (multiple-value-setq (a b) (values 4 5 6)) 4)
(eql a 4)
(eql b 5)))
(null (multiple-value-list (values-list nil)))
(equal (multiple-value-list (values-list '(1))) '(1))
(equal (multiple-value-list (values-list '(1 2))) '(1 2))
(equal (multiple-value-list (values-list '(1 2 3))) '(1 2 3))
(every #'(lambda (list) (equal (multiple-value-list (values-list list)) list))
'()
'(a)
'(a b)
'(a b c)
'(a b c d)
'(a b c d e)
'(a b c d e f)
'(a b c d e f g)
'(a b c d e f g h))
(macro-function 'nth-value)
(eql (nth-value 0 (values 'a 'b)) 'A)
(eql (nth-value 1 (values 'a 'b)) 'B)
(null (nth-value 2 (values 'a 'b)))
(multiple-value-bind (a b eq?)
(let* ((x 83927472397238947423879243432432432)
(y 32423489732)
(a (nth-value 1 (floor x y)))
(b (mod x y)))
(values a b (= a b)))
(and (eql a 3332987528)
(eql b 3332987528)
eq?))
(null (nth-value 0 (values)))
(eql (nth-value 0 1) 1)
(null (nth-value 1 1))
(eql (nth-value 0 (values 0 1 2)) 0)
(eql (nth-value 1 (values 0 1 2)) 1)
(eql (nth-value 2 (values 0 1 2)) 2)
(eql (nth-value 3 (values 0 1 2)) nil)
(eql (nth-value 4 (values 0 1 2)) nil)
(eql (nth-value 5 (values 0 1 2)) nil)
(let ((z (list 0 1 2 3)))
(eql (prog* ((y z)
(x (car y)))
(return x))
(car z)))
(macro-function 'prog)
(macro-function 'prog*)
(let ((a 1))
(eq (prog ((a 2) (b a)) (return (if (= a b) '= '/=))) '/=))
(eq (prog* ((a 2) (b a)) (return (if (= a b) '= '/=))) '=)
(null (prog () 'no-return-value))
(flet ((king-of-confusion (w)
"Take a cons of two lists and make a list of conses.
Think of this function as being like a zipper."
(prog (x y z) (setq y (car w) z (cdr w))
loop
(cond ((null y) (return x))
((null z) (go err)))
rejoin
(setq x (cons (cons (car y) (car z)) x))
(setq y (cdr y) z (cdr z))
(go loop)
err
(cerror "Will self-pair extraneous items"
"Mismatch - gleep! ~S" y)
(setq z y)
(go rejoin))))
(and (equal (king-of-confusion '((0 1 2) . (a b c)))
'((2 . C) (1 . B) (0 . A)))
(equal (king-of-confusion '((0 1 2 3 4 5) . (a b c d e f)))
'((5 . F) (4 . E) (3 . D) (2 . C) (1 . B) (0 . A)))))
(null (prog () t))
(null (prog ()))
(eql (let ((a 0)
(b 0))
(prog ((a 10)
(b 100))
(return (+ a b))))
110)
(prog (a
(b 1)
(c 2))
(return (and (null a) (eql b 1) (eql c 2))))
(prog ((a 0)
b
(c 2))
(return (and (eql a 0) (null b) (eql c 2))))
(prog ((a 0)
(b 1)
c)
(return (and (eql a 0) (eql b 1) (null c))))
(prog (a b c)
(return (every #'null (list a b c))))
(eql (let ((a 0))
(declare (special a))
(flet ((ref-a () a))
(prog ((a 10))
(declare (special a))
(return (ref-a)))))
10)
(let ((a 0))
(declare (special a))
(and (eql (flet ((ref-a () a))
(prog ((a 10)
b
(c 100))
(declare (special a))
(setq b 1)
(return (+ (ref-a) b c))))
111)
(eql a 0)))
(let ((a 0))
(declare (special a))
(and (equal (multiple-value-list (flet ((ref-a () a))
(prog ((a 10)
b
(c 100))
(declare (special a))
(setq b 1)
(return (values (ref-a) b c)))))
'(10 1 100))
(eql a 0)))
(let ((a 0))
(and (eql (prog () (return a)) 0)
(eql a 0)))
(flet ((rev (list)
(prog ((x list)
(result nil))
top
(when (null x)
(return result))
(psetq x (cdr x)
result (cons (car x) result))
(go top))))
(and (equal (rev '(0 1 2 3))
'(3 2 1 0))
(equal (rev nil)
nil)
(equal (rev '(0))
'(0))))
(eql (prog (val)
(setq val 1)
(go point-a)
(incf val 16)
point-c
(incf val 04)
(go point-b)
(incf val 32)
point-a
(incf val 02)
(go point-c)
(incf val 64)
point-b
(incf val 08)
(return val))
15)
(let ((a 0))
(and (equal (multiple-value-list (prog ((a 100)
(b a)
(c 1))
(return (values a b c))))
'(100 0 1))
(eql a 0)))
(null (prog* () 'no-return-value))
(flet ((king-of-confusion (w)
"Take a cons of two lists and make a list of conses.
Think of this function as being like a zipper."
(prog* (x y z) (setq y (car w) z (cdr w))
loop
(cond ((null y) (return x))
((null z) (go err)))
rejoin
(setq x (cons (cons (car y) (car z)) x))
(setq y (cdr y) z (cdr z))
(go loop)
err
(cerror "Will self-pair extraneous items"
"Mismatch - gleep! ~S" y)
(setq z y)
(go rejoin))))
(and (equal (king-of-confusion '((0 1 2) . (a b c)))
'((2 . C) (1 . B) (0 . A)))
(equal (king-of-confusion '((0 1 2 3 4 5) . (a b c d e f)))
'((5 . F) (4 . E) (3 . D) (2 . C) (1 . B) (0 . A)))))
(null (prog* () t))
(null (prog* ()))
(eql (let ((a 0)
(b 0))
(prog* ((a 10)
(b 100))
(return (+ a b))))
110)
(prog* (a
(b 1)
(c 2))
(return (and (null a) (eql b 1) (eql c 2))))
(prog* ((a 0)
b
(c 2))
(return (and (eql a 0) (null b) (eql c 2))))
(prog* ((a 0)
(b 1)
c)
(return (and (eql a 0) (eql b 1) (null c))))
(prog* (a b c)
(return (every #'null (list a b c))))
(eql (let ((a 0))
(declare (special a))
(flet ((ref-a () a))
(prog* ((a 10))
(declare (special a))
(return (ref-a)))))
10)
(let ((a 0))
(declare (special a))
(and (eql (flet ((ref-a () a))
(prog* ((a 10)
b
(c 100))
(declare (special a))
(setq b 1)
(return (+ (ref-a) b c))))
111)
(eql a 0)))
(let ((a 0))
(declare (special a))
(and (equal (multiple-value-list (flet ((ref-a () a))
(prog* ((a 10)
b
(c 100))
(declare (special a))
(setq b 1)
(return (values (ref-a) b c)))))
'(10 1 100))
(eql a 0)))
(let ((a 0))
(and (eql (prog* () (return a)) 0)
(eql a 0)))
(flet ((rev (list)
(prog* ((x list)
(result nil))
top
(when (null x)
(return result))
(psetq x (cdr x)
result (cons (car x) result))
(go top))))
(and (equal (rev '(0 1 2 3))
'(3 2 1 0))
(equal (rev nil)
nil)
(equal (rev '(0))
'(0))))
(eql (prog* (val)
(setq val 1)
(go point-a)
(incf val 16)
point-c
(incf val 04)
(go point-b)
(incf val 32)
point-a
(incf val 02)
(go point-c)
(incf val 64)
point-b
(incf val 08)
(return val))
15)
(let ((a 0))
(and (equal (multiple-value-list (prog* ((a 100)
(b a)
(c 1))
(return (values a b c))))
'(100 100 1))
(eql a 0)))
(macro-function 'prog1)
(macro-function 'prog2)
(eql (let ((temp 1))
(prog1 temp (incf temp) temp))
1)
(let ((temp t))
(and (eq (prog1 temp (setq temp nil)) 't)
(null temp)))
(equal (multiple-value-list (prog1 (values 1 2 3) 4)) '(1))
(let ((temp (list 'a 'b 'c)))
(and (eq (prog1 (car temp) (setf (car temp) 'alpha)) 'a)
(equal temp '(ALPHA B C))))
(equal (flet ((swap-symbol-values (x y)
(setf (symbol-value x)
(prog1 (symbol-value y)
(setf (symbol-value y) (symbol-value x))))))
(let ((*foo* 1) (*bar* 2))
(declare (special *foo* *bar*))
(swap-symbol-values '*foo* '*bar*)
(list *foo* *bar*)))
'(2 1))
(let ((temp 1))
(and (eql (prog2 (incf temp) (incf temp) (incf temp)) 3)
(eql temp 4)))
(equal (multiple-value-list (prog2 1 (values 2 3 4) 5)) '(2))
(equal (multiple-value-list (prog2 1 (values 2 3 4) 5 (values 6 7))) '(2))
(eql (prog1 1) 1)
(eql (prog1 1 2) 1)
(eql (prog1 1 2 3) 1)
(equal (multiple-value-list (prog1 (values 1 2 3))) '(1))
(equal (multiple-value-list (prog1
(values 1 2 3)
(values 4 5 6)
(values 7 8 9)))
'(1))
(eql (prog2 1 2) 2)
(eql (prog2 1 2 3) 2)
(eql (prog2 1 2 3 4) 2)
(let ((x 0))
(and (eql (prog2 (incf x)
(incf x)
(incf x)
(incf x))
2)
(eql x 4)))
(let ((x (cons 'a 'b))
(y (list 1 2 3)))
(and (equal (setf (car x) 'x (cadr y) (car x) (cdr x) y) '(1 X 3))
(equal x '(X 1 X 3))
(equal y '(1 X 3))))
(let ((x (cons 'a 'b))
(y (list 1 2 3)))
(and (null (psetf (car x) 'x (cadr y) (car x) (cdr x) y))
(equal x '(X 1 A 3))
(equal y '(1 A 3))))
(null (setf))
(null (psetf))
(let ((a 0))
(and (eql (setf a 10) 10)
(eql a 10)))
(let ((a 0)
(b 1))
(and (eql (setf a 10 b 20) 20)
(eql a 10)
(eql b 20)))
(let ((a 0)
(b 1)
(c 2))
(and (eql (setf a 10 b (+ a 10) c (+ b 10)) 30)
(eql a 10)
(eql b 20)
(eql c 30)))
(let ((x (list 0 1 2)))
(and (eq (setf (car x) 'a) 'a)
(eq (setf (cadr x) 'b) 'b)
(eq (setf (caddr x) 'c) 'c)
(equal x '(a b c))))
(let ((a 0))
(and (null (psetf a 10))
(eql a 10)))
(let ((a 0)
(b 1))
(and (null (psetf a 10 b 20))
(eql a 10)
(eql b 20)))
(let ((a 0)
(b 1)
(c 2))
(and (null (psetf a 10 b (+ a 10) c (+ b 10)))
(eql a 10)
(eql b 10)
(eql c 11)))
(let ((x (list 0 1 2)))
(and (null (psetf (car x) 'a))
(null (psetf (cadr x) 'b))
(null (psetf (caddr x) 'c))
(equal x '(a b c))))
(let ((x (make-array '(2 3) :initial-contents '((a b c) (x y z)))))
(and (eql (setf (aref x 0 0) 0.0) 0.0)
(eql (setf (aref x 0 1) 0.1) 0.1)
(eql (setf (aref x 0 2) 0.2) 0.2)
(eql (setf (aref x 1 0) 1.0) 1.0)
(eql (setf (aref x 1 1) 1.1) 1.1)
(eql (setf (aref x 1 2) 1.2) 1.2)
(equalp x #2A((0.0 0.1 0.2) (1.0 1.1 1.2)))))
(let ((x (make-array 4 :element-type 'bit :initial-element 0)))
(and (equalp x #*0000)
(eql (setf (bit x 0) 1) 1)
(eql (setf (bit x 2) 1) 1)
(equal x #*1010)))
(let ((x (copy-seq "dog")))
(and (eql (setf (char x 0) #\c) #\c)
(eql (setf (char x 1) #\a) #\a)
(eql (setf (char x 2) #\t) #\t)
(equal x "cat")))
(let ((x (copy-seq "dog")))
(and (eql (setf (schar x 0) #\c) #\c)
(eql (setf (schar x 1) #\a) #\a)
(eql (setf (schar x 2) #\t) #\t)
(equal x "cat")))
(let ((x (copy-seq "dog")))
(and (eql (setf (elt x 0) #\c) #\c)
(eql (setf (elt x 1) #\a) #\a)
(eql (setf (elt x 2) #\t) #\t)
(equal x "cat")))
(let ((x (list 0 1 2)))
(and (eql (setf (elt x 0) #\c) #\c)
(eql (setf (elt x 1) #\a) #\a)
(eql (setf (elt x 2) #\t) #\t)
(equal x '(#\c #\a #\t))))
(let ((x #'(lambda (a) (+ a 10)))
(saved (when (fboundp 'test-fn) (fdefinition 'test-fn))))
(unwind-protect (and (eq (setf (fdefinition 'test-fn) x) x)
(eql (test-fn 10) 20))
(when saved
(setf (fdefinition 'test-fn) saved))))
(let ((table (make-hash-table)))
(and (equal (multiple-value-list (gethash 1 table)) '(NIL NIL))
(equal (multiple-value-list (gethash 1 table 2)) '(2 NIL))
(equal (setf (gethash 1 table) "one") "one")
(equal (setf (gethash 2 table "two") "two") "two")
(multiple-value-bind (value present-p) (gethash 1 table)
(and (equal value "one")
present-p))
(multiple-value-bind (value present-p) (gethash 2 table)
(and (equal value "two")
present-p))))
(let ((table (make-hash-table)))
(and (equal (multiple-value-list (gethash nil table)) '(NIL NIL))
(null (setf (gethash nil table) nil))
(multiple-value-bind (value present-p) (gethash nil table)
(and (equal value NIL)
present-p))))
(let ((x (copy-seq #*0101)))
(and (eql (setf (sbit x 0) 1) 1)
(eql (setf (sbit x 2) 1) 1)
(equal x #*1111)))
(let ((a 0)
(b 1))
(and (equal (multiple-value-list (setf (values a b) (values 'x 'y 'z)))
'(x y))
(eq a 'x)
(eq b 'y)))
(let ((x (list 0 1 2))
(order nil))
(and
(equal (multiple-value-list (setf (values (car (prog1 x (push 0 order)))
(cadr (prog1 x (push 1 order)))
(caddr (prog1 x (push 2 order))))
(values 'a 'b)))
'(a b nil))
(equal x '(a b nil))
(equal order '(2 1 0))))
(let ((a 'a)
(b 'b)
(c 'c))
(and (equal (multiple-value-list (setf (values (values a) (values b c))
(values 0 1 2 3 4)))
'(0 1))
(eql a 0)
(eql b 1)
(null c)))
(let ((a 'a)
(b 'b)
(c 'c)
(d 'd))
(and (equal (multiple-value-list (setf (values (values a b) (values c d))
(values 0 1 2 3 4)))
'(0 1))
(eql a 0)
(null b)
(eql c 1)
(null d)))
(let ((a 'a)
(b 'b)
(c 'c)
(d 'd))
(and (equal (multiple-value-list (setf (values (values a b) (values c d))
(values 0)))
'(0 nil))
(eql a 0)
(null b)
(null c)
(null d)))
(let ((a 'a)
(b 'b)
(c 'c))
(and (equal (multiple-value-list (setf (values a) (values 0 1 2)))
'(0))
(eql a 0)
(eq b 'b)
(eq c 'c)))
(let ((x (list 1 2 3))
(y 'trash))
(and (eq (shiftf y x (cdr x) '(hi there)) 'TRASH)
(equal x '(2 3))
(equal y '(1 HI THERE))))
(let ((x (list 'a 'b 'c)))
(and (eq (shiftf (cadr x) 'z) 'B)
(equal x '(A Z C))
(eq (shiftf (cadr x) (cddr x) 'q) 'Z)
(equal x '(A (C) . Q))))
(let ((n 0)
(x (list 'a 'b 'c 'd)))
(and (eq (shiftf (nth (setq n (+ n 1)) x) 'z) 'B)
(equal x '(A Z C D))))
(let ((a 0)
(b 1)
(c 2)
(d 3))
(and (equal (multiple-value-list (shiftf (values a b) (values c d)
(values 4 5)))
'(0 1))
(eql a 2)
(eql b 3)
(eql c 4)
(eql d 5)))
(let ((n 0)
(x (list 'a 'b 'c 'd 'e 'f 'g)))
(and (null (rotatef (nth (incf n) x)
(nth (incf n) x)
(nth (incf n) x)))
(equal x '(A C D B E F G))))
(let ((x (list 'a 'b 'c)))
(and (null (rotatef (first x) (second x) (third x)))
(equal x '(b c a))))
(let ((x (list 'a 'b 'c 'd 'e 'f)))
(and (null (rotatef (second x) (third x) (fourth x) (fifth x)))
(equal x '(a c d e b f))))
(null (rotatef))
(let ((a 0))
(and (null (rotatef a))
(zerop a)))
(let ((x (list 'a 'b 'c))
(order nil))
(and (null (rotatef (first (progn (push 1 order) x))
(second (progn (push 2 order) x))
(third (progn (push 3 order) x))))
(equal x '(b c a))
(equal order '(3 2 1))))
(let ((x (list 'a 'b 'c))
(order nil))
(and (null (psetf (first (progn (push 1 order) x))
(second (progn (push 2 order) x))
(second (progn (push 2 order) x))
(third (progn (push 3 order) x))
(third (progn (push 3 order) x))
(first (progn (push 1 order) x))))
(equal x '(b c a))
(equal order '(1 3 3 2 2 1))))
(let ((a 0)
(b 1)
(c 2)
(d 3))
(and (null (rotatef (values a b) (values c d)))
(eql a 2)
(eql b 3)
(eql c 0)
(eql d 1)))