Frage zu Scala Code

Reality

Top Contributor
Hallo,
ich schau mir gerade ein Scala-Tutorial an bei dem natürliche Zahlen als Klassen implementiert wurden. Es wird auch Gebrauch von Rekursion gemacht. Allerdings verstehe ich da die rekursive Methode "+" in der Klasse "Succ" nicht:

Java:
def +(that: Nat) = new Succ(n + that)

Wo ist da die Abbruchbedingung? Ist das keine Endlosschleife?
Als erstes wird doch versucht "n + that" aufzulösen, was doch wiederum nicht anderes als "new Succ(n + that)" ist, wo dann wieder versucht wird als erstes "n + that" aufzulösen usw. usf.
Irgendwo muss ich nen Denkfehler haben, aber wo? 🙂

Danke im Voraus!

L. G.
Reality
 

Anhänge

  • tmp.jpg
    tmp.jpg
    56,4 KB · Aufrufe: 59
Succ heißt Nachfolger.

Succ von 0 heißt, Nachfolger von 0 und entspricht folglich 1.

predecessor ist der Vorgänger und nicht der Wert an sich.

def +(that:Nat) = new Succ( n + that)

geht jetzt Rekursiv soweit zurück bis n nicht mehr zur Klasse Succ gehört sondern zum Object Zero.

Dort ist die Addition nämlich so implementiert.

def +(that:Nat) = that

Und das ist die Abbruchbedingung.

Bspl

Code:
def drei = new Succ(new Succ( new Succ(Zero)))
def zwei = new Succ(new Succ( Zero))

drei + zwei
=> new Succ( new Succ(new Succ( Zero)) + zwei  ) // Nachfolger von zwei plus zwei
=> new Succ( new Succ(new Succ(       Zero + zwei ))) /Nachfolger vom Nachfolger von eins plus zwei
// new Zero() + zwei => zwei
=> new Succ( new Succ(new Succ( zwei))) 
=> new Succ( new Succ(new Succ(new Succ(new Succ( Zero)))))


Tricky, eh?
 
Zuletzt bearbeitet von einem Moderator:
Danke, ich kam leider noch nicht dazu mir das näher anzuschauen. Werde das die Tage machen.
Dennoch danke im Voraus! 🙂

L. G.
Reality
 

Zurück
Oben