source: CGBLisp/trunk/src/monom.lisp@ 58

Last change on this file since 58 was 58, checked in by Marek Rychlik, 15 years ago

* empty log message *

File size: 2.4 KB
Line 
1#|
2 $Id: monom.lisp,v 1.3 2009/01/22 04:04:31 marek Exp $
3 *--------------------------------------------------------------------------*
4 | Copyright (C) 1994, Marek Rychlik (e-mail: rychlik@math.arizona.edu) |
5 | Department of Mathematics, University of Arizona, Tucson, AZ 85721 |
6 | |
7 | Everyone is permitted to copy, distribute and modify the code in this |
8 | directory, as long as this copyright note is preserved verbatim. |
9 *--------------------------------------------------------------------------*
10|#
11(defpackage "MONOM"
12 (:use "COMMON-LISP")
13 (:export monom-equal monom-divides-p monom-divisible-by-p monom-rel-prime
14 monom* nmonom* monom/
15 monom-lcm monom-gcd))
16
17(in-package "MONOM")
18
19(proclaim '(optimize (speed 3) (space 0) (safety 0) (debug 0)))
20
21;;----------------------------------------------------------------
22;; This package implements BASIC OPERATIONS ON MONOMIALS
23;;----------------------------------------------------------------
24;; DATA STRUCTURES: Monomials are represented as lists:
25;;
26;; monom: (n1 n2 ... nk) where ni are non-negative integers
27;;
28;;----------------------------------------------------------------
29;; EXAMPLES: Suppose that variables are x and y. Then
30;;
31;; Monom x*y^2 ---> (1 2)
32;;
33;;----------------------------------------------------------------
34
35(defun monom/ (m1 m2)
36 "Divide monomial M1 by monomial M2."
37 (mapcar #'- m1 m2))
38
39(defun monom* (m1 m2)
40 "Multiply monomial M1 by monomial M2."
41 (mapcar #'+ m1 m2))
42
43(defun nmonom* (m1 m2)
44 "Multiply monomials M1 and M2 - destructive version.
45 M1 is destructively modified, M2 is not modified."
46 (mapl #'(lambda (x y) (incf (car x) (car y))) m1 m2))
47
48(defun monom-divides-p (m1 m2)
49 "Returns T if monomial M1 divides monomial M2, NIL otherwise."
50 (every #'<= m1 m2))
51
52(defun monom-divisible-by-p (m1 m2)
53 "Returns T if monomial M1 is divisible by monomial M2, NIL otherwise."
54 (every #'>= m1 m2))
55
56(defun monom-rel-prime (m1 m2)
57 "Returns T if two monomials M1 and M2 are relatively prime (disjoint)."
58 (every #'(lambda (x y) (zerop (min x y))) m1 m2))
59
60(defun monom-equal (m1 m2)
61 "Returns T if two monomials M1 and M2 are equal."
62 (every #'= m1 m2))
63
64(defun monom-lcm (m1 m2)
65 "Returns least common multiple of monomials M1 and M2."
66 (mapcar #'max m1 m2))
67
68(defun monom-gcd (m1 m2)
69 "Returns greatest common divisor of monomials M1 and M2."
70 (mapcar #'min m1 m2))
Note: See TracBrowser for help on using the repository browser.