Thread Was macht $W[@B] (4 answers)
Opened by pktm at 2010-07-22 21:51

pktm
 2010-07-22 21:51
#140022 #140022
User since
2003-08-07
2921 Artikel
BenutzerIn
[Homepage]
user image
Liebe Alle,

ich habe hier ein Skript entdeckt, das die Levenshtein-Distanz zweier Strings berechnet:

Code (perl): (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
sub levenshtein($$){
  my @A=split //, lc shift;
  my @B=split //, lc shift;
  my @W=(0..@B);
  my ($i, $j, $cur, $next);
  for $i (0..$#A){
        $cur=$i+1;
        for $j (0..$#B){
                $next=min(
                        $W[$j+1]+1,
                        $cur+1,
                        ($A[$i] ne $B[$j])+$W[$j]
                );
                $W[$j]=$cur;
                $cur=$next;
        }
        $W[@B]=$next;
  }
  return $next;
}

sub min($$$){
  if ($_[0] < $_[2]){ pop @_; } else { shift @_; }
  return $_[0] < $_[1]? $_[0]:$_[1];
}

print levenshtein("gambol","gumbo");
print levenshtein("gumbo", "gambol");
print levenshtein("gumbo", "bumble");


Da steht: $W[@B]=$next;

Was macht das? Bezeichnet $W[@B] den letzten Index? Wird @B da in einen Skalar interpoliert, der dann die Länge von @B enthält? Oder ist das ein Slice?
Wie liest man das?

Grüße, pktm
http://www.intergastro-service.de (mein erstes CMS :) )

View full thread Was macht $W[@B]