This is because if there isn't an explicit return the last statement evaluated is the implied return value.
So the last call (which returns Nil) was your implicit return. Generally I try and avoid an implicit return if a function has more than a couple of lines. On Thu, 16 Jun 2022, 21:41 Rick Bychowski, <r...@hiranyaloka.com> wrote: > For example here: > > > https://github.com/manwar/perlweeklychallenge-club/blob/master/challenge-168/rick-bychowski/raku/ch-2.raku > > I called the recursive function at various points in an if/else > statement, but each call was always the very last statement of the > branch/routine. Otherwise, even a trailing "last" or "exit" silently > "fails". > > All good! > > - Rick > > On 6/16/22 13:21, Rick Bychowski wrote: > > 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. >