2
;;;; Author: Paul Dietz
3
;;;; Created: Sat Nov 16 09:07:02 2002
4
;;;; Contains: Tests of LOOP numeric value accumulation clauses
8
;; Tests of COUNT, COUNTING
11
(loop for x from 1 to 10 count (< x 5))
15
(loop for x from 1 to 10 counting (< x 7))
19
(loop for x from 1 to 10 count (< x 5) fixnum)
23
(loop for x from 1 to 10 count (< x 5) of-type integer)
29
(loop for x from 1 to 10 count (< x 5) into foo
38
(loop for x from 1 to 10 count (< x 5) into foo fixnum
47
(loop for x from 1 to 10 count (< x 5) into foo of-type (integer 0 100)
56
(loop for x from 1 to 10 count (< x 5) into foo float
65
for x in '(a b c) count x into foo
73
for x in '(a b c) counting x into foo
78
(declaim (special *loop-count-var*))
81
(let ((*loop-count-var* 100))
83
(loop for x in '(a b c d) count x into *loop-count-var*
84
finally (return *loop-count-var*))
89
(loop for x in '(a b nil d nil e)
95
(loop for x in '(a b nil d nil e)
101
(loop for x in '(a b c) count (return 10))
105
;;; Tests of MAXIMIZE, MAXIMIZING
108
(loop for x in '(1 4 10 5 7 9) maximize x)
112
(loop for x in '(1 4 10 5 7 9) maximizing x)
116
(loop for x in '(1000000000000) maximizing x)
120
(loop for x in '(-1000000000000) maximize x)
124
(loop for x in '(1.0 2.0 3.0 -1.0) maximize x)
128
(loop for x in '(8 20 5 3 24 1 19 4 20 3) maximize x fixnum)
132
(loop for x in '(8 20 5 3 24 1 19 4 20 3) maximize x of-type integer)
136
(loop for x in '(8 20 5 3 24 1 19 4 20 3) maximize x of-type rational)
140
(loop for x in '(1 4 10 5 7 9) maximize x into foo finally (return foo))
146
(loop for x in '(1 4 10 5 7 9) maximize x into foo finally (setq z foo))
152
(loop for x in '(8 20 5 3 24 1 19 4 20 3) maximize x of-type real)
156
(loop for x in '(0.08 0.20 0.05 0.03 0.24 0.01 0.19 0.04 0.20 0.03) maximize x of-type float)
160
(loop for x in '(-1/8 -1/20 -1/5 -1/3 -1/24 -1/1 -1/19 -1/4 -1/20 -1/3) maximize x of-type rational)
164
(loop for x in '(1 4 10 5 7 9) maximize x into foo fixnum finally (return foo))
168
(loop for x in '(1 4 10 5 7 9) maximize x into foo of-type integer finally (return foo))
174
(loop for x in '(3 5 8 3 7) maximize x into foo finally (return foo))
178
(declaim (special *loop-max-var*))
181
(let ((*loop-max-var* 100))
183
(loop for x in '(1 10 4 8) maximize x into *loop-max-var*
184
finally (return *loop-max-var*))
191
for i from 1 to 10 maximize i into foo
192
finally (return foo))
199
for i from 1 to 10 maximizing i into foo
200
finally (return foo))
206
(loop for x in '(1 2 3) maximize (return 10))
209
;;; Tests of MINIMIZE, MINIMIZING
212
(loop for x in '(4 10 1 5 7 9) minimize x)
216
(loop for x in '(4 10 5 7 1 9) minimizing x)
220
(loop for x in '(1000000000000) minimizing x)
224
(loop for x in '(-1000000000000) minimize x)
228
(loop for x in '(1.0 2.0 -1.0 3.0) minimize x)
232
(loop for x in '(8 20 5 3 24 1 19 4 20 3) minimize x fixnum)
236
(loop for x in '(8 20 5 3 24 1 19 4 20 3) minimize x of-type integer)
240
(loop for x in '(8 20 5 3 24 1 19 4 20 3) minimize x of-type rational)
244
(loop for x in '(1 4 10 5 7 9) minimize x into foo finally (return foo))
250
(loop for x in '(4 1 10 1 5 7 9) minimize x into foo finally (setq z foo))
256
(loop for x in '(8 20 5 3 24 1 19 4 20 3) minimize x of-type real)
260
(loop for x in '(0.08 0.40 0.05 0.03 0.44 0.01 0.19 0.04 0.40 0.03) minimize x of-type float)
264
(loop for x in '(-1/8 -1/20 -1/5 -1/3 -1/24 -1/1 -1/19 -1/4 -1/20 -1/3) minimize x of-type rational)
268
(loop for x in '(4 10 5 1 7 9) minimize x into foo fixnum finally (return foo))
272
(loop for x in '(1 4 10 5 7 9) minimize x into foo of-type integer finally (return foo))
278
(loop for x in '(4 5 8 3 7) minimize x into foo finally (return foo))
282
(declaim (special *loop-min-var*))
285
(let ((*loop-min-var* 100))
287
(loop for x in '(10 4 8) minimize x into *loop-min-var*
288
finally (return *loop-min-var*))
295
for i from 1 to 10 minimize i into foo
296
finally (return foo))
303
for i from 1 to 10 minimizing i into foo
304
finally (return foo))
309
(loop for x in '(1 2 3) minimize (return 10))
312
;;; Tests combining MINIMIZE, MAXIMIZE
315
(loop for i from 1 to 10
321
(loop for i from 1 to 10
327
(loop for i from 5 downto 1
333
;;; Tests for SUM, SUMMING
336
(loop for i from 1 to 4 sum i)
340
(loop for i from 1 to 4 summing i)
344
(loop for i from 1 to 4 sum (float i))
348
(loop for i from 1 to 4 sum (complex i i))
352
(loop for i from 1 to 4 sum i fixnum)
356
(loop for i from 1 to 4 sum i of-type integer)
360
(loop for i from 1 to 4 sum i of-type rational)
364
(loop for i from 1 to 4 sum (float i) float)
368
(loop for i from 1 to 4 sum i of-type number)
372
(loop for i from 1 to 4 sum i into foo finally (return foo))
376
(loop for i from 1 to 4 sum i into foo fixnum finally (return foo))
382
(loop for i from 1 to 4 sum i into foo of-type (integer 0 10)
383
finally (setq z foo))
389
(loop for i from 1 to 4
395
(loop for i from 1 to 4
403
(loop for i from 1 to 4 sum i into foo of-type integer
404
finally (return foo))
411
for i from 1 to 4 sum i into foo
412
finally (return foo))
419
for i from 1 to 4 summing i into foo
420
finally (return foo))
425
(loop for i from 1 to 4
426
sum (complex i (1+ i)) of-type complex)
430
(loop for i from 1 to 4
431
sum (/ i 17) of-type rational)
435
(loop for i from 1 to 4 summing (/ i 17))
439
(loop for i from 1 to 4
442
finally (return (values foo bar)))
446
(loop for i from 1 to 4
447
sum i into foo fixnum
448
sum (float (1+ i)) into bar float
449
finally (return (values foo bar)))
453
(loop for i from 1 to 4 sum (return 100))
457
(loop for i from 1 to 4 summing (return 100))
461
(loop for i in nil sum i of-type integer)
465
(loop for i in nil sum i of-type fixnum)
469
(loop for i in nil sum i of-type bit)
473
(loop for i in nil sum i of-type (integer 0 100))
477
(loop for i in nil sum i of-type (integer -100 0))
481
(loop for i in nil sum i of-type (integer -100 100))
485
(loop for i in nil sum i of-type (and integer (real -100.0 100.0)))
489
(loop for i in nil sum i of-type short-float)
493
(loop for i in nil sum i of-type single-float)
497
(loop for i in nil sum i of-type double-float)
501
(loop for i in nil sum i of-type long-float)