Thread Problem: Endlosschleife? (3 answers)
Opened by Pida at 2007-02-23 14:50

Pida
 2007-02-23 14:50
#74543 #74543
User since
2006-06-09
52 Artikel
BenutzerIn
[default_avatar]
Hallo,

ich stehe grade vor einem Problem, das ich auch in 8 Stunden nicht lösen konnte... dabei geht es nur um gute 15 Zeilen Code:

Ich habe die hashes %referentenliste und %anaphernliste. Für beide gilt: Die Keys sind Integer, die Werte Arrays aus Strings. Beide Hashes bestehen aus der gleichen Anzahl von Schlüssel-/ Wertepaaren. Ich möchte nun die Keys (Sätze) von 1-n durchgehen und dabei Key für Key (satzweise) die einzelnen Anaphern (Elemente aus @{$anaphernliste{$index}}) abarbeiten.
Jede Anapher wird dazu auf einen bestimmten Teil reduziert und $muster zugewiesen.
Dann schaue ich für den aktuellen Satz und alle vorangegangenen Sätze, ob in den $kandidat aus @{$referentenliste{$i}} das gleiche Muster enthalten ist. Ist das der Fall, soll $kandidat auf @kandidatenliste gepusht werden.

Leider klappt das nicht. Anscheinend komme ich in eine Endlosschleife, die ich mit STRG + C beenden muss.

Was läuft falsch? Im Anhang findet ihr den Code; leider nicht schön formatiert. Die Zeilen sind wohl zu lang; zudem wurden immer wieder   ausgegeben.

Vielen Dank, Pida

Code: (dl )
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
my $index = 1;
my $satzzahl = @sort_keys_satzliste;
while ($index <= $satzzahl) {

# solange der satzindex die zahl der sätze nicht übersteigt
while (@{$anaphernliste{$index}}) {

# solange noch anaphern auf der liste des aktuellem satzes stehen
my $aktuelles_pronomen = shift (@{$anaphernliste{$index}}); # shifte eine anapher
my $muster = $aktuelles_pronomen;

# weise $muster die aktuelle anapher zu
$muster =~ s/\(.*(\d[sp]).*\)/$1/;

# reduziere $muster auf 3s, 2p o.ä.
print $muster;
for (my $i = $index; $i > 0; $i--) {
# für diesen satz und alle davor tue
my @kandidatenliste;

foreach my $kandidat (@{$referentenliste{$i}}) { # für jeden referenten des aktuellen satzes

if ($kandidat =~ /$muster/) {
# wenn $muster teil des aktuellen referenten ist

push (@kandidatenliste, $kandidat); # pushe den aktuellen referenten auf @kandidatenliste
}
}
print @kandidatenliste;
# gib die liste aus
}
$index++; # zum nächsten satz

}
}
\n\n

<!--EDIT|renee|1172236917-->

View full thread Problem: Endlosschleife?