# Frage zu Scala Code



## Reality (17. Nov 2012)

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:


```
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


----------



## JohannisderKaeufer (17. Nov 2012)

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


```
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?


----------



## Reality (19. Nov 2012)

Danke, ich kam leider noch nicht dazu mir das näher anzuschauen. Werde das die Tage machen.
Dennoch danke im Voraus! 

L. G.
Reality


----------

