File: tri.lisp

package info (click to toggle)
maxima 5.47.0-9
  • links: PTS
  • area: main
  • in suites: forky, sid
  • size: 193,104 kB
  • sloc: lisp: 434,678; fortran: 14,665; tcl: 10,990; sh: 4,577; makefile: 2,763; ansic: 447; java: 328; python: 262; perl: 201; xml: 60; awk: 28; sed: 15; javascript: 2
file content (51 lines) | stat: -rw-r--r-- 1,792 bytes parent folder | download | duplicates (16)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
(in-package :maxima)

(defun $lexicographique? ($a $b)
   (2lexinv_type1 (cddr $a) (cddr $b)))

(defun $longueur? ($a $b)
   (longueur? (cddr $a) (cddr $b)))

(defun longueur? (tt1 t2)
    (let ((l1 (longueur tt1)) (l2 (longueur t2))) ; longueur est dans util.lsp
         (or (< l1 l2)
             (and (= l1 l2)
                  ($lex tt1 t2)))))

; on a un polynome ordonne' mais dont les monomes sont eventuellement
; egaux. Il s'agit d'additionner les coefficients concerne's.
; le polynome est sous sa representation distribue'e en macsyma :
; ((mlist simp) ((mlist simp) coe e1 e2 ... en) ....)

(defun $simplifie_dist ($polynome)
    (simplifie_dist (cadr $polynome) (cdr $polynome)) 
    $polynome)

(defun simplifie_dist (polynome $monome) 
  (if (null (cddr polynome)) nil
    (let (($mon2 (cadr polynome))) 
      (if (not (equal (cddr $mon2) (cddr $monome)))
	  (simplifie_dist (cdr polynome) $mon2)
	(progn (rplaca (cdr $monome)
		       (+ (cadr $monome) (cadr $mon2)))
	       (rplacd polynome (cddr polynome))
	       (simplifie_dist polynome $monome))))))

(defun $insert ($monome $polynome)
   (insert $monome $polynome)
   $polynome)

(defun insert ($monome polynome)
   (if (null (cdr polynome)) (rplacd polynome (list $monome))
       (let (($mon2 (cadr polynome)))
            (cond ((equal (cddr $mon2) (cddr $monome))
                   (let ((coe (+ (cadr $monome) (cadr $mon2))))
                     (if (= 0 coe)
                         (rplacd polynome (cddr polynome))
                         (rplaca (cdr $mon2) coe))))
                  (($longueur? $monome $mon2)
                   (insert $monome (cdr polynome)))
                  (t (rplacd polynome
                             (cons $monome (cdr polynome))))))))