Mix bindings?
No, the into variables are bound by loop.
What you can do is bind your var to the return value of loop:
(let ((var (loop for x from 0 to 10 maximize (func x))))
;; use var here
...)
Complex loop - use multiple values, functional style
If you are doing many things in a single loop, you might want to use values function in Common Lisp:
(multiple-value-bind (max min sum)
(loop for x from 0 to 10
maximize (f1 x) into max
minimize (f2 x) into min
sum (f3 x) into sum
finally (return (values max min sum)))
;; use max, min and sum here
...)
Note that the variables max, min and sum bound by multiple-value-bind and loop are completely separate and independent, and have absolutely nothing in common and are named the same for didactic purposes only.
If you rename them (as you definitely should for the sake of code readability!):
(multiple-value-bind (max min sum)
(loop for x from 0 to 10
maximize (f1 x) into max1
minimize (f2 x) into min1
sum (f3 x) into sum1
finally (return (values max1 min1 sum1)))
;; use max, min and sum here
...)
and recompile your code, you will see that the
disassembly is identical.
Complex loop, use finally, procedural style
As suggested by @coredump, you can set your variables in the finally construct:
;; bind max, min and sum
(loop for x from 0 to 10
maximize (f1 x) into max1
minimize (f2 x) into min1
sum (f3 x) into sum1
finally (setq max max1
min min1
sum sum1))
;; use max, min, and sum; max1 et al do not exist here
Generally, speaking, there is more than one way to skin the cat here...