Function: math-handle-for
math-handle-for is an autoloaded and byte-compiled function defined in
calc-prog.el.gz.
Signature
(math-handle-for HEAD BODY)
Source Code
;; Defined in /usr/src/emacs/lisp/calc/calc-prog.el.gz
;; (put 'math-for 'lisp-indent-hook 1)
(defun math-handle-for (head body)
(let* ((var (nth 0 (car head)))
(init (nth 1 (car head)))
(limit (nth 2 (car head)))
(step (or (nth 3 (car head)) 1))
(body (if (cdr head)
(list (math-handle-for (cdr head) body))
body))
(all-ints (and (integerp init) (integerp limit) (integerp step)))
(const-limit (or (integerp limit)
(and (eq (car-safe limit) 'quote)
(math-realp (nth 1 limit)))))
(const-step (or (integerp step)
(and (eq (car-safe step) 'quote)
(math-realp (nth 1 step)))))
(save-limit (if const-limit limit (make-symbol "<limit>")))
(save-step (if const-step step (make-symbol "<step>"))))
(cons 'let
(cons (append (if const-limit nil (list (list save-limit limit)))
(if const-step nil (list (list save-step step)))
(list (list var init)))
(list
(cons 'while
(cons (if all-ints
(if (> step 0)
(list '<= var save-limit)
(list '>= var save-limit))
(list 'not
(if const-step
(if (or (math-posp step)
(math-posp
(cdr-safe step)))
(list 'math-lessp
save-limit
var)
(list 'math-lessp
var
save-limit))
(list 'if
(list 'math-posp
save-step)
(list 'math-lessp
save-limit
var)
(list 'math-lessp
var
save-limit)))))
(append body
(list (list 'setq
var
(list (if all-ints
'+
'math-add)
var
save-step)))))))))))