Function: calc-rewrite-selection
calc-rewrite-selection is an autoloaded, interactive and byte-compiled
function defined in calc-rewr.el.gz.
Signature
(calc-rewrite-selection RULES-STR &optional MANY PREFIX)
Key Bindings
Source Code
;; Defined in /usr/src/emacs/lisp/calc/calc-rewr.el.gz
(defun calc-rewrite-selection (rules-str &optional many prefix)
(interactive "sRewrite rule(s): \np")
(calc-slow-wrapper
(calc-preserve-point)
(let* ((num (max 1 (calc-locate-cursor-element (point))))
(reselect t)
(pop-rules nil)
rules
(entry (calc-top num 'entry))
(expr (car entry))
(calc-rewr-sel (calc-auto-selection entry))
(math-rewrite-selections t)
(math-rewrite-default-iters 1))
(if (or (null rules-str) (equal rules-str "") (equal rules-str "$"))
(if (= num 1)
(error "Can't use same stack entry for formula and rules")
(setq rules (calc-top-n 1 t)
pop-rules t))
(setq rules (if (stringp rules-str)
(math-read-exprs rules-str) rules-str))
(if (eq (car-safe rules) 'error)
(error "Bad format in expression: %s" (nth 1 rules)))
(if (= (length rules) 1)
(setq rules (car rules))
(setq rules (cons 'vec rules)))
(or (memq (car-safe rules) '(vec var calcFunc-assign
calcFunc-condition))
(let ((rhs (math-read-expr
(read-string (concat "Rewrite from: " rules-str
" to: ")))))
(if (eq (car-safe rhs) 'error)
(error "Bad format in expression: %s" (nth 1 rhs)))
(setq rules (list 'calcFunc-assign rules rhs))))
(or (eq (car-safe rules) 'var)
(calc-record rules "rule")))
(if (eq many 0)
(setq many '(var inf var-inf))
(if many (setq many (prefix-numeric-value many))))
(if calc-rewr-sel
(setq expr (calc-replace-sub-formula (car entry)
calc-rewr-sel
(list 'calcFunc-select calc-rewr-sel)))
(setq expr (car entry)
reselect nil
math-rewrite-selections nil))
(setq expr (calc-encase-atoms
(calc-normalize
(math-rewrite
(calc-normalize expr)
rules many)))
calc-rewr-sel nil
expr (calc-locate-select-marker expr))
(or (consp calc-rewr-sel) (setq calc-rewr-sel nil))
(if pop-rules (calc-pop-stack 1))
(calc-pop-push-record-list 1 (or prefix "rwrt") (list expr)
(- num (if pop-rules 1 0))
(list (and reselect calc-rewr-sel))))
(calc-handle-whys)))