Mercurial > emacs
changeset 65987:16a03d245dee
(math-check-known-scalarp, math-check-known-matrixp): Check the values of
arguments that are variables.
(math-check-known-square-matrixp): New function.
(math-known-square-matrixp): Use math-check-known-square-matrixp.
(math-super-types): Add sqmatrix type.
author | Jay Belanger <jay.p.belanger@gmail.com> |
---|---|
date | Mon, 10 Oct 2005 19:37:33 +0000 |
parents | 2a8946924f5f |
children | 43c517a3ef4e |
files | lisp/calc/calc-arith.el |
diffstat | 1 files changed, 54 insertions(+), 14 deletions(-) [+] |
line wrap: on
line diff
--- a/lisp/calc/calc-arith.el Mon Oct 10 19:02:10 2005 +0000 +++ b/lisp/calc/calc-arith.el Mon Oct 10 19:37:33 2005 +0000 @@ -239,6 +239,7 @@ (real number) (number) (scalar) + (sqmatrix matrix vector) (matrix vector) (vector) (const))) @@ -306,16 +307,9 @@ (not (math-known-scalarp a t)))) (defun math-known-square-matrixp (a) - (if (eq (car-safe a) '^) - (math-known-square-matrixp (nth 1 a)) - (and (math-known-matrixp a) - (or (math-square-matrixp a) - (and (or - (integerp calc-matrix-mode) - (eq calc-matrix-mode 'square)) - (eq (car-safe a) 'var) - (not (math-const-var a))))))) - + (and (math-known-matrixp a) + (math-check-known-square-matrixp a))) + ;;; Try to prove that A is a scalar (i.e., a non-vector). (defun math-check-known-scalarp (a) (cond ((Math-objectp a) t) @@ -334,8 +328,17 @@ (let ((decl (if (eq (car a) 'var) (or (assq (nth 2 a) math-decls-cache) math-decls-all) - (assq (car a) math-decls-cache)))) - (memq 'scalar (nth 1 decl)))))) + (assq (car a) math-decls-cache))) + val) + (cond + ((memq 'scalar (nth 1 decl)) + t) + ((and (eq (car a) 'var) + (boundp (nth 2 a)) + (setq val (symbol-value (nth 2 a)))) + (math-check-known-scalarp val)) + (t + nil)))))) ;;; Try to prove that A is *not* a scalar. (defun math-check-known-matrixp (a) @@ -353,9 +356,46 @@ (let ((decl (if (eq (car a) 'var) (or (assq (nth 2 a) math-decls-cache) math-decls-all) - (assq (car a) math-decls-cache)))) - (memq 'vector (nth 1 decl)))))) + (assq (car a) math-decls-cache))) + val) + (cond + ((memq 'matrix (nth 1 decl)) + t) + ((and (eq (car a) 'var) + (boundp (nth 2 a)) + (setq val (symbol-value (nth 2 a)))) + (math-check-known-matrixp val)) + (t + nil)))))) +;;; Given that A is a matrix, try to prove that it is a square matrix. +(defun math-check-known-square-matrixp (a) + (cond ((math-square-matrixp a) + t) + ((eq (car-safe a) '^) + (math-check-known-square-matrixp (nth 1 a))) + (t + (let ((decl (if (eq (car a) 'var) + (or (assq (nth 2 a) math-decls-cache) + math-decls-all) + (assq (car a) math-decls-cache))) + val) + (cond + ((memq 'sqmatrix (nth 1 decl)) + t) + ((memq 'matrix (nth 1 decl)) + nil) + ((and (eq (car a) 'var) + (boundp (nth 2 a)) + (setq val (symbol-value (nth 2 a)))) + (math-check-known-square-matrixp val)) + ((and (or + (integerp calc-matrix-mode) + (eq calc-matrix-mode 'sqmatrix)) + (eq (car-safe a) 'var)) + t) + (t + nil)))))) ;;; Try to prove that A is a real (i.e., not complex). (defun math-known-realp (a)