Re: trouble returning a value from sub

2022-06-19 Thread ToddAndMargo via perl6-users
On 6/18/22 22:16, Bruce Gray wrote: On Jun 18, 2022, at 10:42 PM, ToddAndMargo via perl6-users wrote: On 6/16/22 10:10, Rick Bychowski wrote: sub MAIN($n = 20) { .say for factors($n); # Nil } I thought `MAIN` was a reserved variable. Am I missing something? MAIN has a special

Re: trouble returning a value from sub

2022-06-18 Thread Bruce Gray
> On Jun 18, 2022, at 10:42 PM, ToddAndMargo via perl6-users > wrote: > > On 6/16/22 10:10, Rick Bychowski wrote: >> sub MAIN($n = 20) { >>.say for factors($n); # Nil >> } > > > I thought `MAIN` was a reserved variable. Am > I missing something? MAIN has a special meaning as a sub

Re: trouble returning a value from sub

2022-06-18 Thread ToddAndMargo via perl6-users
On 6/16/22 10:10, Rick Bychowski wrote: sub MAIN($n = 20) {    .say for factors($n); # Nil } I thought `MAIN` was a reserved variable. Am I missing something?

Re: trouble returning a value from sub

2022-06-17 Thread Rick Bychowski
Clever! I had missed checking "is-prime" straight away! Checked some large primes, and my function hung badly. Thank you! Is grep running on all "2 ..^ $n/2" values, and then picking the first, or is that somehow lazily evaluated? I assume the former, or you'd have no need to halve $n. But

Re: trouble returning a value from sub

2022-06-17 Thread Simon Proctor
Here's my new go to prime-factors function : sub prime-factors( Int $n is copy where * > 1 ) { gather { while ( $n > 1 ) { if ( $n.is-prime ) { take $n; last; } my $f = (2..^$n/2).grep($n %% *).first(*.is-prime);

Re: trouble returning a value from sub

2022-06-16 Thread Simon Proctor
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

Re: trouble returning a value from sub

2022-06-16 Thread Rick Bychowski
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

Re: trouble returning a value from sub

2022-06-16 Thread Rick Bychowski
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

Re: trouble returning a value from sub

2022-06-16 Thread Andinus via perl6-users
Here is the code: ... } else { return factors($q, @f); } ... Return the values during recursive calls too. Output: [2 2 5] 2 2 5 Simon Proctor @ 2022-06-16 19:07 +01: > I think, and I don't have my computer to hand to double check but I > think you

Re: trouble returning a value from sub

2022-06-16 Thread William Michels via perl6-users
Hi Rick (and Simon)! If I change the final (and only) call to `last`, and make it a call to `exit` instead, the `Nil` disappears. Helpful? Best Regards, Bill. On Thu, Jun 16, 2022 at 11:07 AM Simon Proctor wrote: > > I think, and I don't have my computer to hand to double check but I think

Re: trouble returning a value from sub

2022-06-16 Thread Simon Proctor
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,

trouble returning a value from sub

2022-06-16 Thread Rick Bychowski
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