मैं स्केला TCO में देख रहा हूँ और निम्नलिखित कोड लिखा हैमेरे स्केला कोड TCO'ed नहीं मिलता है, हालांकि यह @tailrec गुजरता
import scala.annotation.tailrec
final def tailReccursionEx(str:String):List[String]={
@tailrec
def doTailRecursionEx(str:String,pos:Int,accu:List[String]):List[String]={
if(pos==str.length) return accu
else{
doTailRecursionEx(str,pos+1,accu++accu.foldLeft(List[String](str(`pos`).toString)){
(l,ch)=>l:+ch+str(`pos`)})
}
}
doTailRecursionEx(str,0,List[String]())
}
मैं @tailrec परीक्षण बीत चुके हैं और मेरा मानना है कि मेरी समारोह है कि आत्म-पुनरावर्ती पूंछ कॉल। फिर भी, जब मैं
javap -c -private RecursionEx\$\$anonfun\$doTailRecursionEx\$1\$1
साथ जावा बाइट कोड पर गौर मुझे नहीं देने का वादा किया गोटो TCO के लिए स्वयं पुनरावर्ती क्रिया के लिए दिख रहा है। बाइटकोड यहाँ है।
public RecursionEx$$anonfun$doTailRecursionEx$1$1(java.lang.String, int);
Code:
0: aload_0
1: aload_1
2: putfield #35; //Field str$2:Ljava/lang/String;
5: aload_0
6: iload_2
7: putfield #41; //Field pos$1:I
10: aload_0
11: invokespecial #93; //Method scala/runtime/AbstractFunction2."<init>":()V
14: return
}