Ich lerne OCaml in der Schule und kam kürzlich auf ein Programm für eine Aufgabe, die ich nicht verstehen konnte, und hoffte, wenn jemand es mir erklären könnte. Hier ist der Code:OCaml Hinzufügen von natürlichen Zahlen
(* Natural numbers can be defined as follows:
type = ZERO | SUCC of nat;;
For instance, two = SUCC (SUCC ZERO) and three = SUCC (SUCC (SUCC ZERO)).
Write a function 'natadd' that adds two natural numbers in this fashion. *)
# type = ZERO | SUCC of nat;;
# let two = SUCC (SUCC ZERO);;
# let three = SUCC (SUCC (SUCC ZERO));;
# let rec natadd : nat -> nat -> nat =
fun n1 n2 ->
match n1 with
| ZERO -> n2
| SUCC n1 -> SUCC (natadd n1 n2)
;;
Hier ist eine Beispielausgabe für den Code:
# natadd two three;;
- : nat = SUCC (SUCC (SUCC (SUCC (SUCC ZERO))))
Was ich nicht verstehe, ist das Spiel-mit-Anweisung. Bedeutet das, dass wenn n1 nicht Null ist, fügt es SUCC hinzu und verwendet [SUCC n1] als neues Argument anstelle von n1 für den rekursiven Aufruf?
Vielen Dank! Eine andere Sache, die ich mich gefragt habe, ist, wie weiß die rekursive Funktion wann zu stoppen? – Sean
@Sean Es stoppt, wenn es 'ZERO' erreicht, in diesem Fall wird es sich nicht wieder selbst anrufen – Bergi
Vielen Dank! Jetzt weiß ich, was du meinst, wenn du sagst, dass es verwirrend sein könnte, da das Problem des Scoping ebenfalls ins Spiel kommt. Ich habe heute etwas gelernt. – Sean