Problems? Is your data what you think it is? PerlMonks

### Re^2: recursive algorithm

by remiah (Hermit)
 on Sep 06, 2012 at 07:43 UTC ( #992024=note: print w/replies, xml ) Need Help??

in reply to Re: recursive algorithm

If your structure, "((...)..(((....)).))" means tree structure like s-expression in lisp, and "." matches any gene, "GAGGGUCCUUUCAGUAGCAC" could match 11 trees.

```use warnings;
use strict;
use Data::Dumper;

my \$basestring = 'GAGGGUCCUUUCAGUAGCAC';
my @bases=split(//,\$basestring);
my \$parenstring = '((...)..(((....)).))';
my \$gene_cnt = \$parenstring =~ tr/\.//;
my \$g_idx;
print "str=\$basestring, gene_cnt=\$gene_cnt\n";
for (my \$idx = 0 ; \$idx <= (length(\$basestring)- \$gene_cnt);  \$idx++){
\$g_idx=\$idx;
print Dumper parse(\$parenstring);
}

sub parse{
my \$str=shift;
my \$tree=[];

while(\$str =~ s{ \A  #top of string
\s* #one space or not
(
[\(] | [^\s\(]+ #'(' or token(.)
)
}{}x) {
my \$token;
if( \$1 eq '(' ){
my \$nest=1;
my \$pos;
for(\$pos=0; \$pos<length(\$str); \$pos++){ #till target ')'
my \$c=substr(\$str, \$pos, 1);
\$nest +=
\$c eq '(' ?  1
: \$c eq ')' ? -1
: 0;
last unless \$nest;
}
my \$paren=substr(\$str, 0, \$pos + 1, ''); #erase
substr(\$paren, -1, 1, '');
\$token=parse(\$paren);
} else { #here \$1 is '.'
\$token=\$1;
\$token =~ s/\./\$bases[\$g_idx++]/g;
}
push @\$tree, \$token;
}
return(\$tree);
}

I don't know what is "hydrogen bonds", no knowledge for genes. I hope you to describe what you are going to do, and get help of monks.

sub parse() is a little modified one from kogai dan's example(written in japanese).

regards

Create A New User
Node Status?
node history
Node Type: note [id://992024]
help
Chatterbox?
and all is quiet...

How do I use this? | Other CB clients
Other Users?
Others taking refuge in the Monastery: (7)
As of 2017-08-19 16:17 GMT
Sections?
Information?
Find Nodes?
Leftovers?
Voting Booth?
Who is your favorite scientist and why?

Results (311 votes). Check out past polls.

Notices?