I am pretty sure, it does return. This routine (called "manal" in the system) is burried deep within a machine translation engine, I have here some log that visualizes the behaviour. The L1/L2 is a level counter I have installed to make sure I see when a level is entered and when exited.:
sub manal {
my $htree = shift;
my $rul = shift;
my $level = shift || 1;
my $hist = (split /\n/, $htree->data)[0];
my $str = (split /\|/, $hist)[0];
my ($k, $v);
$hist = "|$hist";
&log("entering manal L$level with history: $hist\n");
while(($k,$v) = each %$rul) {
my @out = @{&proccode($str,$v)}
for my $h (@out) {
&log("debug: (out: @out - $h)/$str/$hist/$k\n");
&manal($htree->append("$h$hist\n$k"),$rul,$level+1) if($hist !~
+/\|$h\|/);
}
}
&log("exiting manal L$level for STR: $str\n");
}
Tue Apr 26 20:33:02 2005: entering manal L1 with history: |silného|
Tue Apr 26 20:33:02 2005: debug: (out: silný - silný)/silného/|silného|/&cs(<)·A-m-1·A-m-2
Tue Apr 26 20:33:02 2005: entering manal L2 with history: |silný|silného|
Tue Apr 26 20:33:02 2005: debug: (out: silný - silný)/silný/|silný|silného|/&cs(<)·AC·AS
Tue Apr 26 20:33:02 2005: debug: (out: silný - silný)/silný/|silný|silného|/&cs(<)·APL-f-1·APL-f-4
Tue Apr 26 20:33:02 2005: debug: (out: silný silný - silný)/silný/|silný|silného|/&cs(<)·APL-m-1·APL-m-2
Tue Apr 26 20:33:02 2005: debug: (out: silný silný - silný)/silný/|silný|silného|/&cs(<)·APL-m-1·APL-m-2
Tue Apr 26 20:33:02 2005: debug: (out: silný - silný)/silný/|silný|silného|/&cs(<)·Vi·V-2p-!
Tue Apr 26 20:33:02 2005: debug: (out: silný - silný)/silný/|silný|silného|/&cs(<)·APL-n-1·APL-n-4
Tue Apr 26 20:33:02 2005: debug: (out: silný - silný)/silný/|silný|silného|/&cs(<)·A-m-1·A-m-6
Tue Apr 26 20:33:02 2005: debug: (out: silný - silný)/silný/|silný|silného|/&cs(<)·APL-n-1·APL-n-7
Tue Apr 26 20:33:02 2005: debug: (out: silný silný - silný)/silný/|silný|silného|/&cs(<)·Vi·V-2s-n-i
Tue Apr 26 20:33:02 2005: debug: (out: silný silný - silný)/silný/|silný|silného|/&cs(<)·Vi·V-2s-n-i
Tue Apr 26 20:33:02 2005: debug: (out: silný silný - silný)/silný/|silný|silného|/&cs(<)·A-m-1·APL-m-1
Tue Apr 26 20:33:02 2005: debug: (out: silný silný - silný)/silný/|silný|silného|/&cs(<)·A-m-1·APL-m-1
Tue Apr 26 20:33:02 2005: debug: (out: silný - silný)/silný/|silný|silného|/&cs(<)·Vi·AV
Tue Apr 26 20:33:02 2005: debug: (out: silný silný - silný)/silný/|silný|silného|/&cs(<)·APL-m-1·APL-m-7
Tue Apr 26 20:33:02 2005: debug: (out: silný silný - silný)/silný/|silný|silného|/&cs(<)·APL-m-1·APL-m-7
Tue Apr 26 20:33:02 2005: debug: (out: silný - silný)/silný/|silný|silného|/&cs(<)·APL-f-1·APL-f-3
Tue Apr 26 20:33:02 2005: debug: (out: silný - silný)/silný/|silný|silného|/&cs(<)·APL-f-1·APL-f-7
Tue Apr 26 20:33:02 2005: debug: (out: silný - silný)/silný/|silný|silného|/&cs(<)·A-m-1·A-m-3
Tue Apr 26 20:33:02 2005: debug: (out: silný silný - silný)/silný/|silný|silného|/&cs(<)·APL-m-1·APL-m-3
Tue Apr 26 20:33:02 2005: debug: (out: silný silný - silný)/silný/|silný|silného|/&cs(<)·APL-m-1·APL-m-3
Tue Apr 26 20:33:02 2005: debug: (out: silný silný - silný)/silný/|silný|silného|/&cs(<)·Vi·V-3s-n-i
Tue Apr 26 20:33:02 2005: debug: (out: silný silný - silný)/silný/|silný|silného|/&cs(<)·Vi·V-3s-n-i
Tue Apr 26 20:33:02 2005: debug: (out: silný silný - silný)/silný/|silný|silného|/&cs(<)·Vi·V-1s-n-i
Tue Apr 26 20:33:02 2005: debug: (out: silný silný - silný)/silný/|silný|silného|/&cs(<)·Vi·V-1s-n-i
Tue Apr 26 20:33:02 2005: debug: (out: silný - silný)/silný/|silný|silného|/&cs(<)·A-m-1·AC
Tue Apr 26 20:33:02 2005: debug: (out: silný silný - silný)/silný/|silný|silného|/&cs(<)·APL-m-1·APL-m-4
Tue Apr 26 20:33:02 2005: debug: (out: silný silný - silný)/silný/|silný|silného|/&cs(<)·APL-m-1·APL-m-4
Tue Apr 26 20:33:02 2005: debug: (out: silný - silný)/silný/|silný|silného|/&cs(<)·A-f-1·A-n-1
Tue Apr 26 20:33:02 2005: debug: (out: silný - silný)/silný/|silný|silného|/&cs(<)·A-m-1·A-m-7
Tue Apr 26 20:33:02 2005: debug: (out: silný - silný)/silný/|silný|silného|/&cs(<)·A-m-1·A-f-1
Tue Apr 26 20:33:02 2005: debug: (out: silný - silný)/silný/|silný|silného|/&cs(<)·Vi·V-1s-n
Tue Apr 26 20:33:02 2005: debug: (out: silný - silný)/silný/|silný|silného|/&cs(<)·A-f-1·A-f-4
Tue Apr 26 20:33:02 2005: debug: (out: silný - silný)/silný/|silný|silného|/&cs(<)·A-m-1·A-n-1
Tue Apr 26 20:33:02 2005: debug: (out: silný - silný)/silný/|silný|silného|/&cs(<)·Vi·V-2s-!
Tue Apr 26 20:33:02 2005: debug: (out: silný - silný)/silný/|silný|silného|/&cs(<)·APL-n-1·APL-n-2
Tue Apr 26 20:33:02 2005: debug: (out: silný - silný)/silný/|silný|silného|/&cs(<)·APL-n-1·APL-n-3
Tue Apr 26 20:33:02 2005: debug: (out: silný - silný)/silný/|silný|silného|/&cs(<)·POS·NEG
Tue Apr 26 20:33:02 2005: debug: (out: silný - silný)/silný/|silný|silného|/&cs(<)·A-f-1·A-f-2
Tue Apr 26 20:33:02 2005: debug: (out: silný - silný)/silný/|silný|silného|/&cs(<)·N-m-1·N-m-2
Tue Apr 26 20:33:02 2005: debug: (out: silný - silný)/silný/|silný|silného|/&cs(<)·APL-f-1·APL-f-2
Tue Apr 26 20:33:02 2005: exiting manal L2 for STR: silný
Tue Apr 26 20:33:02 2005: debug: (out: silný - silný)/silného/|silného|/&cs(<)·A-m-1·A-m-2
Tue Apr 26 20:33:02 2005: entering manal L2 with history: |silný|silného|
... ad infinitum because @out iteration seems to be stuck