Вообще, в той же "Дисциплине программирования" Дейкстра не стеснялся использовать ветвления и даже подциклы внутри главного цикла.
И если уж на то пошло, если делать этот цикл и правда по Дейкстре (с недетерменированным порядком вычисления охраняемых выражений), то должно быть так:
i, found := 0, false;
do i < len(a) - 1 and not found ->
x, y := a[i], a[i+1];
if x = 0 and y = 0 -> found := true
[] x ≠ 0 or y ≠ 0 -> i := i + 1
fi
od
Полистал я Дейкстрову книшку и уверен, что этот вариант самый что ни на есть "по Дейкстре" ))
Вариант, правда, не очень эффективный, но зато простейший и очевидный.
И похож на мой вариант на хаскелле:
find00 xs = find xs 0
where
find (0:0:_) n = Just n
find (_:xs) n = find xs (n+1)
find [] _ = Nothing