Thread Was macht $W[@B]
(4 answers)
Opened by pktm at 2010-07-22 21:51
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 :) )
|