Мне интересно, является ли это ошибкой или задокументированным поведением?
f1 = Function[v,
Do[If[v[[i]] < 0, Return[v[[i]]]], {i, 1, Length[v]}]]
c1 = Compile[{{v, _Integer, 1}},
Do[If[v[[i]] < 0, Return[v[[i]]]], {i, 1, Length[v]}]]
При применении их к списку, не содержащему отрицательных значений) чисел, мы получаем разные результаты:
In[66]:= Through[{f1, c1}[{1, 2, 3}]]
Out[66]= {Null, 3}
Это вызвало ошибку, когда я пытался скомпилировать короткую функцию (фактически ее модифицированную версию).
Использование одного только
не показывает проблемы:
c2 = Compile[{}, Do[i, {i, 5}]]
c2[] (* returns nothing, as expected *)