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)))