中的三个条件if
是可选的,它们应该被翻译成一个if-else if-else
链。类似赋值语句c,i,v := c+2, i+1, b[i]
是多重赋值,据我所知就像 Python 多重赋值一样,所以i
inb[i]
指的是i
. 这会产生
// n and v are initialised to something sensible, hopefully
i = 0;
c = 0;
while(i != n) {
if (b[i] == v) {
c = c + 2;
i = i + 1;
} else if (c == i) {
c = c + 2;
v = b[i]; // conjecture that the b[i] on the RHS refers to the old i
i = i + 1;
} else {
i = i + 1;
}
}
由于i
在每个分支中都递增,我们可以将其取出,并得到
for(i = 0, c = 0; i != n; ++i) {
if (b[i] == v) {
c += 2;
} else if (c == i) {
c += 2;
v = b[i];
}
}