[BACK]Return to ecart.sm1 CVS log [TXT][DIR] Up to [local] / OpenXM / src / kan96xx / Doc

Diff for /OpenXM/src/kan96xx/Doc/ecart.sm1 between version 1.34 and 1.37

version 1.34, 2004/09/13 11:24:10 version 1.37, 2004/09/14 08:30:47
Line 1 
Line 1 
 % $OpenXM: OpenXM/src/kan96xx/Doc/ecart.sm1,v 1.33 2004/09/10 13:20:22 takayama Exp $  % $OpenXM: OpenXM/src/kan96xx/Doc/ecart.sm1,v 1.36 2004/09/14 05:49:36 takayama Exp $
 (hol_loaded) boundp { }  (hol_loaded) boundp { }
 { [(parse) (hol.sm1) pushfile] extension } ifelse  { [(parse) (hol.sm1) pushfile] extension } ifelse
 %[(parse) (appell.sm1) pushfile] extension  %[(parse) (appell.sm1) pushfile] extension
   
 (ecart.sm1 : ecart division for D, 2003/07/25 ) message-quiet  (ecart.sm1 : ecart division for D, 2003/07/25, 2004/09/14 ) message-quiet
 /ecart.begin { beginEcart } def  /ecart.begin { beginEcart } def
 /ecart.end   { endEcart } def  /ecart.end   { endEcart } def
 /ecart.autoHomogenize 1 def  /ecart.autoHomogenize 1 def
 /ecart.needSyz 0 def  /ecart.needSyz 0 def
 /ecartd.gb.oxRingStructure [[ ] [ ] ] def  /ecartd.gb.oxRingStructure [[ ] [ ] ] def
   /ecart.partialEcartGlobalVarX [ ] def
   
   /ecart.gb.verbose 1 def
   /ecart.message.quiet 0 def
   
 /ecartd.begin {  /ecartd.begin {
   ecart.begin    ecart.begin
   [(EcartAutomaticHomogenization) 1] system_variable    [(EcartAutomaticHomogenization) 1] system_variable
Line 19 
Line 23 
   [(EcartAutomaticHomogenization) 0] system_variable    [(EcartAutomaticHomogenization) 0] system_variable
 } def  } def
   
 /ecart.message.quiet 0 def  
 /ecart.message {  /ecart.message {
   ecart.message.quiet { pop } { message } ifelse    ecart.message.quiet { pop } { message } ifelse
 } def  } def
 /ecart.messagen {  /ecart.messagen {
   ecart.message.quiet { pop } { messagen } ifelse    ecart.message.quiet { pop } { messagen } ifelse
 } def  } def
   /ecart.setOpt.init {
   % Initialize
       /ecart.partialEcartGlobalVarX [ ] def
   } def
 /ecart.setOpt {  /ecart.setOpt {
   /arg1 set    /arg1 set
   [/in-ecart.setOpt /opt /i /n /ans] pushVariables    [/in-ecart.setOpt /opt /i /n /ans] pushVariables
Line 33 
Line 40 
     /opt arg1 def      /opt arg1 def
     /ans [ ] def      /ans [ ] def
     /n opt length def      /n opt length def
   
       ecart.setOpt.init
   
     0 2 n 1 sub {      0 2 n 1 sub {
       /i set        /i set
       opt i get tag StringP eq not {        opt i get tag StringP eq not {
Line 60 
Line 70 
         exit          exit
       } {  } ifelse        } {  } ifelse
   
   % Global:  ecart.partialEcartGlobalVarX
         opt i get (partialEcartGlobalVarX) eq {
           /ecart.partialEcartGlobalVarX opt , i 1 add , get def
           % do not exit.
         } {  } ifelse
   
       ans [opt i get opt i 1 add get ]  join /ans set        ans [opt i get opt i 1 add get ]  join /ans set
       exit        exit
      } loop       } loop
     } for      } for
   
     ecart.gb.verbose {      ecart.gb.verbose {
       (ecart.setOpt:) message        (ecart.setOpt:) ecart.message
       (degreeShift=) messagen degreeShift message        (degreeShift=) ecart.messagen degreeShift ecart.message
       $hdShift(startingShift)=$ messagen hdShift message        $hdShift(startingShift)=$ ecart.messagen hdShift ecart.message
       (sugar=) messagen ecart.useSugar message        (sugar=) ecart.messagen ecart.useSugar ecart.message
       (Other options=) messagen ans message        (Other options=) ecart.messagen ans ecart.message
     } {  } ifelse      } {  } ifelse
   
     /arg1 ans def      /arg1 ans def
Line 269 
Line 285 
   $             [ [(Dx) 1 (Dy) 1] [(x) -1 (y) -1 (Dx) 1 (Dy) 1] ]  $    $             [ [(Dx) 1 (Dy) 1] [(x) -1 (y) -1 (Dx) 1 (Dy) 1] ]  $
   $             [(degreeShift) [[0 1] [-3 1]]] ] ecart.gb pmat ; $    $             [(degreeShift) [[0 1] [-3 1]]] ] ecart.gb pmat ; $
   (  )    (  )
     $Example 6:  [ [(1-z) (-x+1-y-z)] (x,y,z)  $
     $              [[(y) -1 (z) -1 (Dy) 1 (Dz) 1] [(x) 1 (Dx) 1]] $
     $              [(partialEcartGlobalVarX) [(x)]] ] /std set $
     $             std ecart.gb pmat ; $
     $             std ecart.gb getRing :: $
     (  )
   (cf. gb, groebner, ecarth.gb, ecartd.gb, ecart.syz, ecart.begin, ecart.end, ecart.homogenize01, )    (cf. gb, groebner, ecarth.gb, ecartd.gb, ecart.syz, ecart.begin, ecart.end, ecart.homogenize01, )
   (    ecart.dehomogenize, ecart.dehomogenizeH)    (    ecart.dehomogenize, ecart.dehomogenizeH)
   ( [(weightedHomogenization) 1 (degreeShift) [[1 2 1]]] : options for )    ( [(weightedHomogenization) 1 (degreeShift) [[1 2 1]]] : options for )
Line 277 
Line 299 
   (               not to dehomogenize and homogenize)    (               not to dehomogenize and homogenize)
 ]] putUsages  ]] putUsages
   
 /ecart.gb.verbose 1 def  
 %ecarth.gb  s(H)-homogenized outputs.  GG's original version of ecart gb.  %ecarth.gb  s(H)-homogenized outputs.  GG's original version of ecart gb.
 /ecarth.gb {  /ecarth.gb {
   /arg1 set    /arg1 set
Line 297 
Line 318 
     /hdShift 0 def      /hdShift 0 def
     /opt [(weightedHomogenization) 1] def      /opt [(weightedHomogenization) 1] def
     /ecart.useSugar 0 def      /ecart.useSugar 0 def
       ecart.setOpt.init
     aa { tag } map /typev set      aa { tag } map /typev set
     typev [ ArrayP ] eq      typev [ ArrayP ] eq
     {  /f aa 0 get def      {  /f aa 0 get def
Line 419 
Line 441 
     } { } ifelse      } { } ifelse
   
     %%BUG: case of v is integer      %%BUG: case of v is integer
     v ecart.checkOrder      [v ecart.partialEcartGlobalVarX] ecart.checkOrder
   
     ecart.begin      ecart.begin
   
Line 599 
Line 621 
     /wv 0 def      /wv 0 def
     /degreeShift 0 def      /degreeShift 0 def
     /opt [(weightedHomogenization) 1] def      /opt [(weightedHomogenization) 1] def
       ecart.setOpt.init
     aa { tag } map /typev set      aa { tag } map /typev set
     typev [ ArrayP ] eq      typev [ ArrayP ] eq
     {  /f aa 0 get def      {  /f aa 0 get def
Line 718 
Line 741 
     } { } ifelse      } { } ifelse
   
     %%BUG: case of v is integer      %%BUG: case of v is integer
     v ecart.checkOrder      [v ecart.partialEcartGlobalVarX] ecart.checkOrder
   
     ecartn.begin      ecartn.begin
   
Line 796 
Line 819 
     /hdShift 0 def      /hdShift 0 def
     /ecart.useSugar 0 def      /ecart.useSugar 0 def
     /opt [(weightedHomogenization) 1] def      /opt [(weightedHomogenization) 1] def
       ecart.setOpt.init
     aa { tag } map /typev set      aa { tag } map /typev set
     typev [ ArrayP ] eq      typev [ ArrayP ] eq
     {  /f aa 0 get def      {  /f aa 0 get def
Line 851 
Line 875 
   
     [(KanGBmessage) ecart.gb.verbose ] system_variable      [(KanGBmessage) ecart.gb.verbose ] system_variable
     $ecartd.gb dehomogenizes at each reduction step w.r.t. s (H).$ ecart.message      $ecartd.gb dehomogenizes at each reduction step w.r.t. s (H).$ ecart.message
   
   
     %%% Start of the preprocess      %%% Start of the preprocess
     v tag RingP eq {      v tag RingP eq {
Line 908 
Line 933 
     } { } ifelse      } { } ifelse
   
     %%BUG: case of v is integer      %%BUG: case of v is integer
     v ecart.checkOrder      [v ecart.partialEcartGlobalVarX] ecart.checkOrder
   
   
     ecartd.begin      ecartd.begin
   
     ecart.gb.verbose { (gb.options = ) ecart.messagen gb.options ecart.message } { } ifelse      ecart.gb.verbose { (gb.options = ) ecart.messagen gb.options ecart.message } { } ifelse
Line 989 
Line 1015 
   
 /ecart.checkOrder {  /ecart.checkOrder {
   /arg1 set    /arg1 set
   [/in-ecart.checkOrder /vv /tt /dd /n /i] pushVariables    [/vv] pushVariables
   [    [
     /vv arg1 def      /vv arg1 def
       vv length 1 eq {
         vv 0 get ecart.checkOrder.noGlobal /arg1 set
       }{
         vv ecart.checkOrder.global /arg1 set
       } ifelse
     ] pop
     popVariables
     /arg1
   } def
   /ecart.checkOrder.noglobal {
     /arg1 set
     [/vv /tt /dd /n /i] pushVariables
     [
       /vv arg1 def
     vv isArray      vv isArray
     { } { [vv to_records pop] /vv set } ifelse      { } { [vv to_records pop] /vv set } ifelse
     vv {toString} map /vv set      vv {toString} map /vv set
Line 1015 
Line 1055 
   popVariables    popVariables
   arg1    arg1
 } def  } def
   
   /ecart.checkOrder.global {
     /arg1 set
     [/vv /vvGlobal /tt /dd /n /i] pushVariables
     [
       /vv arg1 def
       /vvGlobal vv 1 get def
       vv 0 get /vv set
       vv isArray
       { } { [vv to_records pop] /vv set } ifelse
       vv {toString} map /vv set
       vvGlobal isArray
       { } { [vvGlobal to_records pop] /vvGlobal set } ifelse
       vvGlobal {toString} map /vvGlobal set
   
       vv vvGlobal setMinus /vv set
       vv { /tt set [@@@.Dsymbol tt] cat } map /dd set
       % Starting the checks.  Check for local variables.
       0 1 vv length 1 sub {
          /i set
          vv i get . dd i get . mul /tt set
          tt @@@.hsymbol . add init tt eq { }
          { [@@@.hsymbol ( is larger than ) vv i get ( ) dd i get] cat error} ifelse
       } for
   
       0 1 vv length 1 sub {
          /i set
          vv i get . /tt set
          tt (1). add init (1). eq { }
          { [vv i get ( is larger than 1 ) ] cat error} ifelse
       } for
   
       % check for global variables.
       0 1 vvGlobal length 1 sub {
          /i set
          vvGlobal i get . /tt set
          tt (1). add init (1). eq { [vvGlobal i get ( is smaller than 1 ) ] cat error }
          { } ifelse
       } for
   
   
       /arg1 1 def
     ] pop
     popVariables
     arg1
   } def
 [(ecart.checkOrder)  [(ecart.checkOrder)
  [(v ecart.checkOrder bool checks if the given order is relevant)   [([v vGlobal] ecart.checkOrder bool checks if the given order is relevant)
   (for the ecart division.)    (for the ecart division.)
   (cf. ecartd.gb, ecart.gb, ecartn.gb)    (cf. ecartd.gb, ecart.gb, ecartn.gb)
  ]   ]
Line 1738 
Line 1824 
      vv { /tt set [@@@.Dsymbol tt] cat } map /dvv set       vv { /tt set [@@@.Dsymbol tt] cat } map /dvv set
      dvv { 1 } map /wv1 set       dvv { 1 } map /wv1 set
      vv { -1 } map dvv { 1 } map join /wv2 set       vv { -1 } map dvv { 1 } map join /wv2 set
      /arg1 [wv1 wv2 ] def       vv length 0 eq {
          /arg1 [ ] def
        } {
          /arg1 [wv1 wv2 ] def
        } ifelse
   ] pop    ] pop
   popVariables    popVariables
   arg1    arg1
Line 1749 
Line 1839 
   [/in-ecartd.isSameIdeal_h /aa /ii /jj /iigg /jjgg /vv /ans /k /n /f    [/in-ecartd.isSameIdeal_h /aa /ii /jj /iigg /jjgg /vv /ans /k /n /f
    /ecartd.isSameIdeal_h.opt     /ecartd.isSameIdeal_h.opt
    /save-ecart.autoHomogenize  /wv /save-ecart.message.quiet     /save-ecart.autoHomogenize  /wv /save-ecart.message.quiet
      /vvGlobal  /rng
    ] pushVariables     ] pushVariables
   [(CurrentRingp) (Homogenize_vec)] pushEnv    [(CurrentRingp) (Homogenize_vec)] pushEnv
   [    [
Line 1756 
Line 1847 
     gb.verbose { (Getting in ecartd.isSameIdeal_h) message } { } ifelse      gb.verbose { (Getting in ecartd.isSameIdeal_h) message } { } ifelse
     %% comparison of hilbert series has not yet been implemented.      %% comparison of hilbert series has not yet been implemented.
     /save-ecart.message.quiet ecart.message.quiet def      /save-ecart.message.quiet ecart.message.quiet def
     aa length 3 eq {    }      aa length 3 eq , aa length 4 eq , or {    }
     { ([ii jj vv] ecartd.isSameIdeal_h) error } ifelse      { ([ii jj vv] ecartd.isSameIdeal_h) error } ifelse
     /ii aa 0 get def      /ii aa 0 get def
     /jj aa 1 get def      /jj aa 1 get def
     /vv aa 2 get def      /vv aa 2 get def
   
       aa length 4 eq {
         /vvGlobal aa 3 get def
         vvGlobal isString { [vvGlobal to_records pop] /vvGlobal set }
         { vvGlobal { toString } map /vvGlobal set } ifelse
       } { /vvGlobal [ ] def } ifelse
   
     ii length 0 eq jj length 0 eq and      ii length 0 eq jj length 0 eq and
     { /ans 1 def /LLL.ecartd.isSame_h goto } {  } ifelse      { /ans 1 def /LLL.ecartd.isSame_h goto } {  } ifelse
   
     vv ecart.stdOrder /wv set      [vv vvGlobal] ecart.stdBlockOrder /wv set
       vvGlobal length 0 eq {
         /rng [vv wv ] def
       }{
         /rng [vv wv [(partialEcartGlobalVarX) vvGlobal]] def
       } ifelse
   
     /save-ecart.autoHomogenize ecart.autoHomogenize def      /save-ecart.autoHomogenize ecart.autoHomogenize def
     /ecart.autoHomogenize 0 def      /ecart.autoHomogenize 0 def
     [ii vv wv] ecartd.gb  /iigg set      [ii] rng join  ecartd.gb  /iigg set
     [jj vv wv] ecartd.gb  /jjgg set      [jj] rng join ecartd.gb  /jjgg set
     save-ecart.autoHomogenize /ecart.autoHomogenize set      save-ecart.autoHomogenize /ecart.autoHomogenize set
   
     iigg getRing ring_def      iigg getRing ring_def
Line 1786 
Line 1889 
     gb.verbose { (Comparing) message iigg message (and) message jjgg message }      gb.verbose { (Comparing) message iigg message (and) message jjgg message }
     {  } ifelse      {  } ifelse
     gb.verbose { ( ii < jj ?) messagen } {  } ifelse      gb.verbose { ( ii < jj ?) messagen } {  } ifelse
       /ecartd.isSameIdeal_h.failed [ ] def
     iigg length /n set      iigg length /n set
     0 1 n 1 sub {      0 1 n 1 sub {
       /k set        /k set
       iigg  k get        iigg  k get
       [jjgg vv wv] ecartd.reduction 0 get        [jjgg] ecartd.reduction 0 get
       (0). eq not { /ans 0 def /LLL.ecartd.isSame_h goto} {  } ifelse        (0). eq not {
           /ecartd.isSameIdeal_h.failed [ iigg k get jjgg] def
           /ans 0 def /LLL.ecartd.isSame_h goto
         } {  } ifelse
       gb.verbose { (o) messagen } {  } ifelse        gb.verbose { (o) messagen } {  } ifelse
     } for      } for
     gb.verbose { ( jj < ii ?) messagen } {  } ifelse      gb.verbose { ( jj < ii ?) messagen } {  } ifelse
Line 1799 
Line 1906 
     0 1 n 1 sub {      0 1 n 1 sub {
       /k set        /k set
       jjgg k get        jjgg k get
       [iigg vv wv] ecartd.reduction 0 get        [iigg] ecartd.reduction 0 get
       (0). eq not { /ans 0 def /LLL.ecartd.isSame_h goto} {  } ifelse        (0). eq not {
            /ecartd.isSameIdeal_h.failed [ iigg jjgg k get] def
            /ans 0 def /LLL.ecartd.isSame_h goto
         } {  } ifelse
       gb.verbose { (o) messagen } {  } ifelse        gb.verbose { (o) messagen } {  } ifelse
     } for      } for
     /LLL.ecartd.isSame_h      /LLL.ecartd.isSame_h
Line 1818 
Line 1928 
 [(ecartd.isSameIdeal_h)  [(ecartd.isSameIdeal_h)
 [([ii jj vv] ecartd.isSameIdeal_h bool)  [([ii jj vv] ecartd.isSameIdeal_h bool)
  (ii, jj : ideal, vv : variables)   (ii, jj : ideal, vv : variables)
  $The ideals ii and jj will be compared in the ring h[0,1](D).$   $The ideals ii and jj will be compared in the ring h[0,1](D_0).$
  $ii and jj are re-parsed.$   $ii and jj are re-parsed.$
  $Example 1: [ [((1-x) Dx + h)]  [((1-x)^2 Dx + h (1-x))] (x)] ecartd.isSameIdeal_h $   $Example 1: [ [((1-x) Dx + h)]  [((1-x)^2 Dx + h (1-x))] (x)] ecartd.isSameIdeal_h $
    ([ii jj vv vvGlobal] ecartd.isSameIdeal_h bool)
    $ Ideals are compared in Q(x')_0 [x''] <Dx',Dx'',h> $
    (  where x'' is specified in vvGlobal.)
    (cf. partialEcartGlobalVarX option)
 ]] putUsages  ]] putUsages
   
   /ecartd.isSameIdeal_noh {
     /arg1 set
     [/aa /ii /jj /iigg /jjgg /vv /ans /k /n /f
      /ecartd.isSameIdeal_h.opt
      /save-ecart.autoHomogenize  /wv /save-ecart.message.quiet
      /vvGlobal  /rng
      ] pushVariables
     [(CurrentRingp) (Homogenize_vec)] pushEnv
     [
       /aa arg1 def
       gb.verbose { (Getting in ecartd.isSameIdeal_noh) message } { } ifelse
       %% comparison of hilbert series has not yet been implemented.
       /save-ecart.message.quiet ecart.message.quiet def
       aa length 3 eq , aa length 4 eq , or {    }
       { ([ii jj vv] ecartd.isSameIdeal_noh) error } ifelse
       /ii aa 0 get def
       /jj aa 1 get def
       /vv aa 2 get def
   
       aa length 4 eq {
         /vvGlobal aa 3 get def
         vvGlobal isString { [vvGlobal to_records pop] /vvGlobal set }
         { vvGlobal { toString } map /vvGlobal set } ifelse
       } { /vvGlobal [ ] def } ifelse
   
       ii length 0 eq jj length 0 eq and
       { /ans 1 def /LLL.ecartd.isSame_h goto } {  } ifelse
   
       [vv vvGlobal] ecart.stdBlockOrder /wv set
       vvGlobal length 0 eq {
         /rng [vv wv ] def
       }{
         /rng [vv wv [(partialEcartGlobalVarX) vvGlobal]] def
       } ifelse
   
       /save-ecart.autoHomogenize ecart.autoHomogenize def
       /ecart.autoHomogenize 0 def
       [ii] rng join  ecartd.gb  /iigg set
       [jj] rng join ecartd.gb  /jjgg set
       save-ecart.autoHomogenize /ecart.autoHomogenize set
   
       iigg getRing ring_def
   
       getOptions /ecartd.isSameIdeal_h.opt set
   
       /ans 1 def
       iigg 0 get /iigg set
       jjgg 0 get /jjgg set
       %%Bug: not implemented for the case of module.
   
       /save-ecart.message.quiet ecart.message.quiet def
       /ecart.message.quiet 1 def
       gb.verbose { (Comparing) message iigg message (and) message jjgg message }
       {  } ifelse
       gb.verbose { ( ii < jj ?) messagen } {  } ifelse
       /ecartd.isSameIdeal_noh.failed [ ] def
       iigg length /n set
       0 1 n 1 sub {
         /k set
         iigg  k get
         [jjgg] ecartd.reduction_noh 0 get
         (0). eq not {
            /ecartd.isSameIdeal_noh.failed [ iigg k get jjgg] def
            /ans 0 def /LLL.ecartd.isSame_noh goto
         } {  } ifelse
         gb.verbose { (o) messagen } {  } ifelse
       } for
       gb.verbose { ( jj < ii ?) messagen } {  } ifelse
       jjgg length /n set
       0 1 n 1 sub {
         /k set
         jjgg k get
         [iigg] ecartd.reduction_noh 0 get
         (0). eq not {
           /ecartd.isSameIdeal_noh.failed [ iigg jjgg k get] def
           /ans 0 def /LLL.ecartd.isSame_noh goto
         } {  } ifelse
         gb.verbose { (o) messagen } {  } ifelse
       } for
       /LLL.ecartd.isSame_noh
       gb.verbose { ( Done) message } {  } ifelse
       save-ecart.message.quiet /ecart.message.quiet set
       ecartd.isSameIdeal_h.opt restoreOptions
       /arg1 ans def
     ] pop
     popEnv
     popVariables
     arg1
   } def
   
   [(ecartd.isSameIdeal_noh)
   [([ii jj vv] ecartd.isSameIdeal_noh bool)
    (ii, jj : ideal, vv : variables)
    $The ideals ii and jj will be compared in the ring D_0.$
    $ii and jj are re-parsed.$
    $Example 1: [ [((1-x) Dx + 1)]  [((1-x)^2 Dx + (1-x))] (x)] ecartd.isSameIdeal_noh $
    ([ii jj vv vvGlobal] ecartd.isSameIdeal_noh bool)
    $ Ideals are compared in Q(x')_0 [x''] <Dx',Dx''> $
    (  where x'' is specified in vvGlobal.)
    (cf. partialEcartGlobalVarX option, ecartd.reduction_noh, ecartd.isSameIdeal_h)
    $Example 2: [ [(1-z) (1-x-y-z)]  [(1-x) (1-y)] (x,y,z) [(x)]] $
    $            ecartd.isSameIdeal_noh $
   ]] putUsages
   (ecartd.isSameIdeal_noh ) messagen-quiet
   
 /ecart.01Order {  /ecart.01Order {
   /arg1 set    /arg1 set
   [/in-ecart.01Order /vv /tt /dvv /wv1 /wv2    [/in-ecart.01Order /vv /tt /dvv /wv1 /wv2
Line 1870 
Line 2089 
  $Example 1: [ [((1-x) Dx + 1)] (x)] ecart.homogenize01Ideal $   $Example 1: [ [((1-x) Dx + 1)] (x)] ecart.homogenize01Ideal $
 ]] putUsages  ]] putUsages
   
   % Example: [(x,y,z) (x)] ecart.stdBlockOrder
   %            [[(Dy) 1 (Dz) 1] [(y) -1 (z) -1 (Dy) 1 (Dz) 1] [(x) 1 (Dx) 1]]
   % Example: [(x,y,z) [ ]] ecart.stdBlockOrder
   /ecart.stdBlockOrder {
     /arg1 set
     [/vv /vvGlobal /tt /dd /rr] pushVariables
     [
       /vv arg1 0 get def
       /vvGlobal arg1 1 get def
       {
         vv isArray
         { } { [vv to_records pop] /vv set } ifelse
         vv {toString} map /vv set
         vvGlobal isArray
         { } { [vvGlobal to_records pop] /vvGlobal set } ifelse
         vvGlobal {toString} map /vvGlobal set
   
         vvGlobal length 0 eq {
            vv ecart.stdOrder /rr set exit
         } {  } ifelse
   
         vv vvGlobal setMinus /vv set
         vv ecart.stdOrder /rr set
   
         vvGlobal { /tt set [@@@.Dsymbol tt] cat } map /dd set
         [[
            0 1 vvGlobal length 1 sub {
              /tt set
              vvGlobal tt get , 1
            } for
            0 1 dd length 1 sub {
              /tt set
              dd tt get , 1
            } for
         ]] rr join /rr set
         exit
       } loop
       /arg1 rr def
     ] pop
     popVariables
     arg1
   } def
   
 ( ) message-quiet  ( ) message-quiet
   

Legend:
Removed from v.1.34  
changed lines
  Added in v.1.37

FreeBSD-CVSweb <freebsd-cvsweb@FreeBSD.org>