RosettaCodeData/Task/Loops-With-multiple-ranges/Common-Lisp/loops-with-multiple-ranges-1.lisp
2023-07-01 13:44:08 -04:00

39 lines
942 B
Common Lisp

(let ((prod 1) ; Initialize aggregator
(sum 0)
(x 5) ; Initialize variables
(y -5)
(z -2)
(one 1)
(three 3)
(seven 7))
(flet ((loop-body (j) ; Set the loop function
(incf sum (abs j))
(if (and (< (abs prod) (expt 2 27))
(/= j 0))
(setf prod (* prod j)))))
(do ((i (- three) (incf i three))) ; Just a serie of individual loops
((> i (expt 3 3)))
(loop-body i))
(do ((i (- seven) (incf i x)))
((> i seven))
(loop-body i))
(do ((i 555 (incf i -1)))
((< i (- 550 y)))
(loop-body i))
(do ((i 22 (incf i (- three))))
((< i -28))
(loop-body i))
(do ((i 1927 (incf i)))
((> i 1939))
(loop-body i))
(do ((i x (incf i z)))
((< i y))
(loop-body i))
(do ((i (expt 11 x) (incf i)))
((> i (+ (expt 11 x) one)))
(loop-body i)))
(format t "~&sum = ~14<~:d~>" sum)
(format t "~&prod = ~14<~:d~>" prod))