0

私は Java に翻訳しようとしているので、次のコード スニペットで何が起こっているのかを誰かが説明できるかどうか疑問に思っていますが、私の Perl の知識はわずかです。

sub burble {
    my $cw = "%START%";
    my $sentence;
    my $nw;
    my ( $score, $s, $roll );
    while ( $cw ne "." )    # while we're not at the end
                            # of the sentence yet
    {
        $score = 0;

        # get total score to randomise within
        foreach $s ( values %{ $dict{$cw} } ) {
            $score += $s;
        }

        # now get a random number within that
        $roll  = int( rand() * $score );
        $score = 0;
        foreach $nw ( keys %{ $dict{$cw} } ) {
            $score += ${ $dict{$cw} }{$nw};
            if ( $score > $roll )    # chosen a word
            {
                $sentence .= "$nw " unless $nw eq ".";
                $cw = $nw;
                last;
            }
        }
    }
    return $sentence;
}
4

1 に答える 1

2
foreach $s (values %{$dict{$cw}}) {
    $score += $s;
}

のようなものです

Map<String, Map<String, int>> dict = ...;
...
int score;
Map<String, int> mcw = dict.get( cw );

for ( mcw.values() : int s) {
    score += s;
}

foreach $nw (keys %{$dict{$cw}})

のようなものです

KEY_LOOP:
for ( mcw.keys() : String nw ) {
    ...
}

ついに、

if ($score > $roll) # chosen a word
{
    $sentence .= "$nw " unless $nw eq ".";
    $cw = $nw;
    last;
}

のようなものです:

if ( score > roll ) { // a break case
   if ( !nw.equals( "." )) { 
       sentence = sentence + nw + " ";
   }
   cw       = nw
   break KEY_LOOP;
}
于 2012-07-26T14:41:54.607 に答える