Yep, the "return factors($q, @f)" fixes it. I've not called a recursion
from anywhere other than the end of a routine, so haven't run into this
issue before. Learned something today!
Thanks to Simon, William and Andinus for your assistance!
- Rick
On 6/16/22 11:07, Simon Proctor wrote:
I think, and I don't have my computer to hand to double check but I
think you want a return before your recursive.call to factors passing in @f.
When dealing with recursive functions you need to make sure what you're
returning back up the stack.
On Thu, 16 Jun 2022, 18:10 Rick Bychowski, <r...@hiranyaloka.com
<mailto:r...@hiranyaloka.com>> wrote:
Hi Everyone,
I've been lurking quite a while, this will be my first post to perl6
users. I've written a lot of short scripts in perl5 for system admin
type stuff at home and work. Lately I'm playing with Raku, which is a
lot of fun. Error reporting is excellent, as is the online
documentation.
To the point. I recently started the perl weekly challenge. Lots of
math/primes stuff. I wrote an algorithm to list all the prime
factors of
an integer, using a recursive subroutine. I'm able to print the result
from the subroutine, but it always returns Nil. What am I missing?
#!/usr/bin/env raku
sub MAIN($n = 20) {
.say for factors($n); # Nil
}
sub factors($n, @factors?) {
my @f = @factors.elems ?? @factors !! ();
my $q;
for 2 ..^ $n -> $i {
if $n %% $i {
$q = Int($n / $i);
@f.push($i);
if $q.is-prime {
@f.push($q);
say @f; # [2 2 5]
return @f;
} else {
factors($q, @f);
}
last;
}
}
}
Returns
[2 2 5]
Nil
--
Rick Bychowski
The information in this email is confidential and may be legally
privileged. It is intended solely for the addressee(s). Access to this
e-mail by anyone else is unauthorized.
--
Rick Bychowski
The information in this email is confidential and may be legally
privileged. It is intended solely for the addressee(s). Access to this
e-mail by anyone else is unauthorized.