유용한 추가 정보가 있습니다. 이를 고려하여 함수가 다른이 언급 한 것처럼, 따라서, = 1 마지막있어 첫 번째 요소에 반환해야 그겁니다
In[26]:= f1 =
Function[v, Do[If[v[[i]] < 0, Return[v[[i]]]], {i, 1, Length[v]}];
last = 1;];
In[27]:= last
Out[27]= last
In[28]:= f1[{-1, 2, 3}]
In[29]:= last
Out[29]= 1
이 돌아 끊어집니다. 이 동작에 의존하는 코드가 너무 많아서 해결되지 않습니다.
지금, 당신의 다음을 사용할 수 있습니다 예상대로 작동
In[30]:= f2 = Function[v, Module[{},
Do[If[v[[i]] < 0, Return[v[[i]], Module]], {i, 1, Length[v]}];
last2 = 1;]];
In[31]:= f2[{-1, 2, 3}]
Out[31]= -1
In[32]:= last2
Out[32]= last2
합니다. 그러나 불행히도
In[33]:= c1 = Compile[{{v, _Integer, 1}},
Module[{},
Do[If[v[[i]] < 0, Return[v[[i]], Module]], {i, 1, Length[v]}];
]
];
은 컴파일되지 않습니다.
다음은이 작업을 수행하는 방법입니다.
In[137]:= c1=Compile[{{v,_Integer,1}},
Module[{res=1},
Do[If[v[[i]]<0,res=v[[i]];Break[]],{i,1,Length[v]}];
If[res==1,Internal`CompileError[]];
res
]
,"RuntimeOptions"->{"RuntimeErrorHandler"->Function[Null]}]
In[140]:= c1[{1,2,3,1}]
In[141]:= c1[{1,2,3,-1}]
Out[141]= -1
출력을 확인하십시오.
In[139]:= CompilePrint[c1]
일부 더 노트
는 "RuntimeErrorHandler"-> 기능 [널은이는 기능입니다! 한번 생각해보십시오. Thow, Message anything!
이렇게 작동합니다.
이 정보가 유용하길 바랍니다.
+1 정확히 무엇을 반환했는지 살펴 보았습니다. –