Die Methode ist tail rekursiv, wenn sie für ein Objekt, aber nicht für eine Klasse definiert ist

8

Definieren einer rekursiven Methode für ein Objekt:

%Vor%

gibt:

%Vor%

Aber es in einer Klasse definieren:

%Vor%

gibt:

%Vor%

Die Methoden sind identisch. Warum ist es nicht tail rekursiv, wenn es in einer Klasse definiert ist?

    
Knut Arne Vedaa 15.01.2011, 09:19
quelle

2 Antworten

16

Wenn die Tail-Rekursion ausgeführt werden soll, kann recurse nicht überschrieben werden. Wenn recurse wie in Ihrer class -Deklaration überschrieben werden kann, muss jede Rekursion in ihr den dynamischen Methodenaufruf verwenden (da er möglicherweise polymorph ist), der nicht für eine gotoartige Anweisung optimiert werden kann.

Die object singleton-Deklaration stellt statisch den unzweideutigen Aufruf von recurse sicher und lässt den Compiler mit der Tail-Recursion-Optimierung fortfahren.

    
huitseeker 15.01.2011, 09:47
quelle
10

Wenn Sie erwarten, dass eine Methode tail-rekursiv ist, sollten Sie sie mit @tailrec versehen. Wenn der Compiler TCO nicht anwenden kann, wird ein Fehler auftreten.

%Vor%     
retronym 15.01.2011 10:15
quelle

Tags und Links