A C programmer who understands a for loop should be able to fix this, despite the fact it's Go:
// We are generating n-1, n-2, ..., 1, 0
func below(n uint64, to chan uint64) {
for n--; n >= 0; n-- {
to <- n
}
close(to)
}
Maybe you're right: It could be that C programmers don't understand Go syntax and Go programmers tend to be less experienced.It told me I have an error ("what happens at zero") when i do:
func below(n uint64, to chan uint64) {
for n; n > 0; n-- {
to <- n-1
n--
}
close(to)
}
but running that function with several test inputs produces what I expected. Note, I removed the channel (replaced with println) as that doesn't add anything to the problem.Note: I've been programming (including C and C++) for 3+ decades. I make mistakes all the time, but.... what exactly are you looking for here if my solution is not ruight?
EDIT: the pasted code is also incorrect, because I didn't complete converting the for loop into a while.
On my machine I used this code:
package main
import "fmt"
func below(n uint64 ) {
for n>0 {
fmt.Println(n-1)
n--
}
}
func main() {
below(10);
below(0);
}
The actual code I put into the bugfix site was: func below(n uint64, to chan uint64) {
for n>0 {
to <- n-1
n--
}
close(to)
}
but when writing this comment I went back and didn't modify the for loop to be a while.It doesn't know what's wrong in the code you submitted... it is not understanding deeply what's wrong with your code. It's not some huge multi-terabyte language model analyzing arbitrary code, or whatever.
It just knows your code is wrong and gives you a clue so you can try again.
Here is an example of what's running behind the scenes, to help you understand:
https://bugfix-66.com/contribute
The above code is what's being used for Bug #1:
https://bugfix-66.com/a6cb1e062ae0fdc47b43ec489aa40a958db728...
Is that pretty clear?
I'll tell you what's wrong with your code.
func below(n uint64, to chan uint64) {
for ; n >= 0; n-- {
var t = n - 1
to <- n
}
close(to)
}
I've run this locally with to <- n replaced with a print statement and it works with unsigned integers. func below(n int) {
for n--; n >= 0; n-- {
fmt.Println(n)
}
}
I modified the type so I could punch in some sane integer, like 4. And this works. C:\git\bugfix66> go run .\bugfix66-2.go
3
2
1
0
Am I to assume that the bug is actually a type issue? Something to do with unsigned integers?Wait. Oh. Ok. I get it. It does have to do with the type signature.
(my real comment after I get some clarification from the bugfix site author is that I never, ever modify a variable in the initialization condition of a for loop, and i see that in the wild, I elide it.