Gå til innhold

Rekrsjon og globale variable i awk


Anbefalte innlegg

Tipper denne artikkelen vil røyke ut andre som kjenner til awk...

 

Situasjonen er som følger: jeg har et awk-skript som skal arrangere en tabell, og funksjonen jeg bruker er rekursiv. For hver rekursjon legger jeg et mellomresultat i et globalt array som jeg også leser data ut fra. En liten test viser at første rekursjon er OK, men andre runde da er tabellen nullet ut. Hvorfor det? Hva kan jeg gjør for å komme rundt problemet?

 

Funksjonen er denne:

 

function NextLeaf(current) {
 for (i = 1; i <= pagecount; ++i) {printf("%2s:%1s- ", i, order[i]) }
 print("---")
   print("seqi:" seqi " pagecount:"pagecount " Scanning from" current "\ni:     order:  Debug: curr(seqi) - p[i](i) : frq\n")
   while (seqi < pagecount) {
       max=0    # Find sibling with highest count
       for (i = 1; i <= pagecount; ++i) {
           printf("i: %2s  order: %s  :", i, order[i] )
           if (order[i]="0") {
               sep = sprintf("%s@%s", current, pagelist[i])
               frq=corr[sep]
               printf("Debug: %s(%s) - %s(%s) : %s\n", current, seqi, pagelist[i], i, frq);
               if (frq>max) {
                   max=frq
                   maxi=i
                   }
               } else {
               printf(" Order %s\n", order[i] )
               }
           }
       if (max>0) {    # Have next in line
           printf("maxi: %2s frq: %3s seqi: %s\n", maxi, frq, seqi)
           order[maxi]=frq
           sequence[seqi++]=maxi
           NextLeaf(pagelist[maxi])
           } else {
           print("No max found, bail out")
       }
       }
   }

 

Det globale arrayet som nulles ut er order[].

Lenke til kommentar

Opprett en konto eller logg inn for å kommentere

Du må være et medlem for å kunne skrive en kommentar

Opprett konto

Det er enkelt å melde seg inn for å starte en ny konto!

Start en konto

Logg inn

Har du allerede en konto? Logg inn her.

Logg inn nå
  • Hvem er aktive   0 medlemmer

    • Ingen innloggede medlemmer aktive
×
×
  • Opprett ny...