;;; calc-map.el --- higher-order functions for Calc
-;; Copyright (C) 1990, 1991, 1992, 1993, 2001, 2004 Free Software Foundation, Inc.
+;; Copyright (C) 1990, 1991, 1992, 1993, 2001, 2002, 2003, 2004,
+;; 2005, 2006, 2007, 2008 Free Software Foundation, Inc.
;; Author: David Gillespie <daveg@synaptics.com>
-;; Maintainers: D. Goel <deego@gnufans.org>
-;; Colin Walters <walters@debian.org>
+;; Maintainer: Jay Belanger <jay.p.belanger@gmail.com>
;; This file is part of GNU Emacs.
+;; GNU Emacs is free software; you can redistribute it and/or modify
+;; it under the terms of the GNU General Public License as published by
+;; the Free Software Foundation; either version 3, or (at your option)
+;; any later version.
+
;; GNU Emacs is distributed in the hope that it will be useful,
-;; but WITHOUT ANY WARRANTY. No author or distributor
-;; accepts responsibility to anyone for the consequences of using it
-;; or for whether it serves any particular purpose or works at all,
-;; unless he says so in writing. Refer to the GNU Emacs General Public
-;; License for full details.
-
-;; Everyone is granted permission to copy, modify and redistribute
-;; GNU Emacs, but only under the conditions described in the
-;; GNU Emacs General Public License. A copy of this license is
-;; supposed to have been given to you along with GNU Emacs so you
-;; can know your rights and responsibilities. It should be in a
-;; file named COPYING. Among other things, the copyright notice
-;; and this notice must be preserved on all copies.
+;; but WITHOUT ANY WARRANTY; without even the implied warranty of
+;; MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+;; GNU General Public License for more details.
+
+;; You should have received a copy of the GNU General Public License
+;; along with GNU Emacs; see the file COPYING. If not, write to the
+;; Free Software Foundation, Inc., 51 Franklin Street, Fifth Floor,
+;; Boston, MA 02110-1301, USA.
;;; Commentary:
;;; Code:
;; This file is autoloaded from calc-ext.el.
-(require 'calc-ext)
+(require 'calc-ext)
(require 'calc-macs)
-(defun calc-Need-calc-map () nil)
-
-
(defun calc-apply (&optional oper)
(interactive)
(calc-wrapper
;;; Return a list of the form (nargs func name)
+(defvar calc-get-operator-history nil
+ "History for calc-get-operator.")
+
(defun calc-get-operator (msg &optional nargs)
(setq calc-aborted-prefix nil)
(let ((inv nil) (hyp nil) (prefix nil) (forcenargs nil)
(let* ((calc-dollar-values calc-arg-values)
(calc-dollar-used 0)
(calc-hashes-used 0)
- (func (calc-do-alg-entry "" "Function: ")))
+ (func (calc-do-alg-entry "" "Function: " nil
+ 'calc-get-operator-history)))
(setq record-entry t)
(or (= (length func) 1)
(error "Bad format"))
(cons f args))))))
;;; Do substitutions in parallel to avoid crosstalk.
+
+;; The variables math-ms-temp and math-ms-args are local to
+;; math-multi-subst, but are used by math-multi-subst-rec, which
+;; is called by math-multi-subst.
+(defvar math-ms-temp)
+(defvar math-ms-args)
+
(defun math-multi-subst (expr olds news)
- (let ((args nil)
- temp)
+ (let ((math-ms-args nil)
+ math-ms-temp)
(while (and olds news)
- (setq args (cons (cons (car olds) (car news)) args)
+ (setq math-ms-args (cons (cons (car olds) (car news)) math-ms-args)
olds (cdr olds)
news (cdr news)))
(math-multi-subst-rec expr)))
(defun math-multi-subst-rec (expr)
- (cond ((setq temp (assoc expr args)) (cdr temp))
+ (cond ((setq math-ms-temp (assoc expr math-ms-args))
+ (cdr math-ms-temp))
((Math-primp expr) expr)
((and (eq (car expr) 'calcFunc-lambda) (> (length expr) 2))
(let ((new (list (car expr)))
- (args args))
+ (math-ms-args math-ms-args))
(while (cdr (setq expr (cdr expr)))
(setq new (cons (car expr) new))
- (if (assoc (car expr) args)
- (setq args (cons (cons (car expr) (car expr)) args))))
+ (if (assoc (car expr) math-ms-args)
+ (setq math-ms-args (cons (cons (car expr) (car expr))
+ math-ms-args))))
(nreverse (cons (math-multi-subst-rec (car expr)) new))))
(t
(cons (car expr)
(calcFunc-mod . math-mod)
(calcFunc-vconcat .
math-concat) )))
- lfunc)))
+ func)))
(while (cdr vec)
(setq expr (funcall lfunc expr (nth 1 vec))
vec (cdr vec)))))
(math-normalize (cons 'vec (nreverse mat)))))
-(defun calcFunc-inner (mul-func add-func a b)
+;; The variables math-inner-mul-func and math-inner-add-func are
+;; local to calcFunc-inner, but are used by math-inner-mats,
+;; which is called by math-inner-mats.
+(defvar math-inner-mul-func)
+(defvar math-inner-add-func)
+
+(defun calcFunc-inner (math-inner-mul-func math-inner-add-func a b)
(or (math-vectorp a) (math-reject-arg a 'vectorp))
(or (math-vectorp b) (math-reject-arg b 'vectorp))
(if (math-matrixp a)
(math-dimension-error))))
(if (math-matrixp b)
(nth 1 (math-inner-mats (list 'vec a) b))
- (calcFunc-reduce add-func (calcFunc-map mul-func a b)))))
+ (calcFunc-reduce math-inner-add-func (calcFunc-map math-inner-mul-func a b)))))
(defun math-inner-mats (a b)
(let ((mat nil)
(setq col cols
row nil)
(while (> (setq col (1- col)) 0)
- (setq row (cons (calcFunc-reduce add-func
- (calcFunc-map mul-func
+ (setq row (cons (calcFunc-reduce math-inner-add-func
+ (calcFunc-map math-inner-mul-func
(car a)
(math-mat-col b col)))
row)))
(setq mat (cons (cons 'vec row) mat)))
(cons 'vec (nreverse mat))))
-;;; arch-tag: 980eac49-00e0-4870-b72a-e726b74c7990
+(provide 'calc-map)
+
+;; arch-tag: 980eac49-00e0-4870-b72a-e726b74c7990
;;; calc-map.el ends here