So habe ich diese while-Schleife Konzept, dass ich in eine OCaml Rekursion übersetzen möchten:Der Versuch, eine rekursive Funktion in OCaml zu machen
Pseudocode:
n = read integer from stdin
m = 1
while m*(m+1)/2 < n
m = m + 1
print m
Mein Versuch in OCaml:
let n = int_of_string (input_line stdin) in
let rec get_ans m n =
if m*(m+1)/2 < n then get_ans (m + 1) n else m;;
print_endline get_ans 1 n;
Allerdings bekomme ich nur "Syntaxfehler" auf der langen Funktionszeile ohne jedes Detail, was ich falsch mache.
Welcher der beiden ist der bevorzugte Ansatz? Ich bin neu in OCaml und verstehe daher nicht ganz das Doppelte ;; gegen das In-Ding und all das - womit sollte ich bleiben? – user8926565
Auch warum endet das erste Beispiel in einem ';' im Gegensatz zu zwei ';;'? – user8926565
Beide Formen sind in Ordnung, wenn Sie nur herumspielen. In einem realen Weltprojekt sollte man jedoch wahrscheinlich nicht von stdin in eine globale Variable hineinlesen. Es ist dann üblich, eine Art 'main'-Funktion mit' let() = let n = ... in print_endline ... 'zu definieren, aber die' get_ans'-Funktion als Deklaration der obersten Ebene zu behalten – glennsl