3 ; ***************************************************************
5 ; * MANIPULATIONS DE FONCTIONS SYMETRIQUES *
6 ; * (version01: Commonlisp pour Maxima) *
8 ; * ---------------------- *
11 ; * (Mathe'matiques Effectives, De'veloppements Informatiques, *
12 ; * Calculs et Ingenierie, Syste`mes) *
13 ; * LITP (Equipe Calcul Formel) *
14 ; * Universite' Paris 6, *
15 ; * 4 place Jussieu, 75252 Paris cedex 05. *
16 ; * e-mail : avb@sysal.ibp.fr *
17 ; ***************************************************************
19 ;=========================================================================
20 ; ALGORITHMES SUR LES PARTITIONS
21 ;============================================================================
25 (macsyma-module treillis
)
28 ((lambda ()) ((mlist) $poids
)
29 ((mprog) (($operation
)) (($treillis_init
) $poids
)))
31 (add2lnc '(($treillis
) $poids
) $functions
)
33 ((lambda ()) ((mlist) $poids $longueur
)
34 ((mprog) (($operation
)) (($lgtreillis_init
) $poids $longueur
)))
36 (add2lnc '(($lgtreillis
) $poids $longueur
) $functions
)
39 ((lambda ()) ((mlist) $poids $longueur
)
40 ((mprog) (($operation
)) (($ltreillis_init
) $poids $longueur
)))
42 (add2lnc '(($ltreillis
) $poids $longueur
) $functions
)
44 ;==========================================================================
45 ; TREILLIS DES PARTITIONS DE POIDS n
46 ; dans l'ordre lexicographique
47 (defun $treillis_init
(n)
48 (macsy_list (treillis n
)))
51 (let ((ltreillis (cons nil nil
)))
52 (treillis2 n
0 ltreillis nil
)
55 ; p(i+1)^m=max(0,2pi-p(i+1))
57 (defun treillis2 (pui ote ltreillis poule
)
59 ((eql 0 pui
) (rplacd ltreillis
(list (reverse poule
))))
69 (treillis2 pui ote
(last ltreillis
) poule
))))))
70 ;=========================================================================
71 ; TREILLIS DES PARTITIONS DE POIDS ET LONGUEUR FIXE
72 ; dans l'ordre lexicographique
74 (defun $lgtreillis_init
(p l
)
75 (macsy_list (lgtreillis p l
)))
77 (defun lgtreillis (poids longueur
)
78 (let ((lpart (cons nil nil
)))
82 (maxote poids longueur
) nil lpart
)
85 (defun lgtreillis2 (poids rlongueur ote maxote partition lpart
)
86 (cond ((minusp rlongueur
)
87 (rplacd lpart
(list (reverse partition
))))
90 (max (- rlongueur
1) (- (* 2 ote
) poids
))
91 (maxote ote rlongueur
)
103 ; la fonction maxote est commune a : treillis.lsp , resolvante.lsp, kak.lsp
106 ;-----------------------------------------------------------------------
107 ; PARTITIONS DE POIDS FIXE ET DE LONGUEUR BORNEE
109 (defun $ltreillis_init
(p l
)
110 (macsy_list (ltreillis p l
)))
112 (defun ltreillis (poids longueur
)
113 (let ((lpart (cons nil nil
)))
116 0 (maxote poids longueur
) nil lpart
)
119 (defun ltreillis2 (poids rlongueur ote maxote partition lpart
)
120 (cond ((minusp rlongueur
)
121 (rplacd lpart
(list (reverse partition
))))
124 (max 0 (- (* 2 ote
) poids
))
125 (maxote ote rlongueur
)
126 (cons (- poids ote
) partition
)