As you mention, Lisp does better with lists, for sure. But if there's one datatype where Perl outshines them all, it's with strings. So if you want to make it more Perlish, why not translate it from a list manipulation problem into a string manipulation problem? Let the great regex support do the heavy lifting:
my %dict = ( SENTENCE => ["NP VP"], NP => ["ART NOUN"], VP => ["VERB NP"], ART => [qw/ the a /], NOUN => [qw/ man ball woman table /], VERB => [qw/ hit took saw liked /] ); sub rand_production { my $items = $dict{+shift}; return $items->[rand @$items]; } sub generate { local $_ = shift; my $nonterminal = join "|", map quotemeta, keys %dict; 1 while s/($nonterminal)/ rand_production($1) /e; return $_; } print generate("SENTENCE"), $/;


In reply to Re: Perl can do it, take 1 (sentence generation) by blokhead
in thread Perl can do it, take 1 (sentence generation) by spurperl

Use:  <p> text here (a paragraph) </p>
and:  <code> code here </code>
to format your post; it's "PerlMonks-approved HTML":