(math-add-or-sub (list '/ (nth 1 (nth 1 expr)) (nth 2 expr))
(list '/ (nth 2 (nth 1 expr)) (nth 2 expr))
nil (eq (car (nth 1 expr)) '-)))
- ((and (eq calc-matrix-mode 'matrix)
- (eq (car-safe expr) '^)
- (natnump (nth 2 expr))
- (> (nth 2 expr) 1)
- (memq (car-safe (nth 1 expr)) '(+ -)))
- (if (= (nth 2 expr) 2)
- (math-add-or-sub (list '* (nth 1 (nth 1 expr)) (nth 1 expr))
- (list '* (nth 2 (nth 1 expr)) (nth 1 expr))
- nil (eq (car (nth 1 expr)) '-))
- (math-add-or-sub (list '* (nth 1 (nth 1 expr)) (list '^ (nth 1 expr)
- (1- (nth 2 expr))))
- (list '* (nth 2 (nth 1 expr)) (list '^ (nth 1 expr)
- (1- (nth 2 expr))))
- nil (eq (car (nth 1 expr)) '-))))
((and (eq (car-safe expr) '^)
(memq (car-safe (nth 1 expr)) '(+ -))
(integerp (nth 2 expr))
- (if (and (eq calc-matrix-mode 'matrix)
- (> (nth 2 expr) 1))
+ (if (and
+ (or (math-known-matrixp (nth 1 (nth 1 expr)))
+ (math-known-matrixp (nth 2 (nth 1 expr)))
+ (and
+ calc-matrix-mode
+ (not (eq calc-matrix-mode 'scalar))
+ (not (and (math-known-scalarp (nth 1 (nth 1 expr)))
+ (math-known-scalarp (nth 2 (nth 1 expr)))))))
+ (> (nth 2 expr) 1))
(if (= (nth 2 expr) 2)
(math-add-or-sub (list '* (nth 1 (nth 1 expr)) (nth 1 expr))
(list '* (nth 2 (nth 1 expr)) (nth 1 expr))