Ocaml-Schlüsselwort "in" - und Gebrauchsspuren
Bin ich beim Lesen ein paar Notizen und kam in diesem code sieht Recht sauber für mich:
# let sigma f m =
let rec sum (i, z) =
if i = m then z else sum(i+1, z+.f i)
in sum(0, 0.0);;
val sigma : (int -> float) -> int -> float = <fun>
# sigma (function k -> float (k*k)) 10;;
- : float = 285.
Verstehe ich jedes bit außer dem Teil, wo es in sum(0, 0.0)
. Naja das problem ist eigentlich nicht über die in
Schlüsselwort, aber dieses: sum(0, 0.0)
. Was soll das bedeuten und warum ist es sinnvoll, für diese Funktion zu arbeiten? Ich habe einige googeln und habe etwas auf der in
Schlüsselwort aus der Ocaml-Website, aber das macht für mich keinen Sinn. Dies ist, was ich gefunden habe:
class-expr ::= class-path
∣ [ typexpr {, typexpr} ] class-path
∣ ( class-expr )
∣ ( class-expr : class-type )
∣ class-expr {argument}+
∣ fun {parameter}+ -> class-expr
∣ let [rec] let-binding {and let-binding} in class-expr
∣ object class-body end
Brauche ich nicht, eine Erklärung der tatsächlichen Funktion. Was ich brauche helfen mit, dass kleine in sum(0, 0.0)
.
- Ich downvoted die Frage aber beantwortet, weil ich das Gefühl, dass es sehr verwirrend ist gefragt, und weil jede tutorial auf Ocaml, erklärt das viel besser als wir können in ein paar Minuten.
Du musst angemeldet sein, um einen Kommentar abzugeben.
Ist es
let
Bindungenin
Körper ; Ihrein
ist in Bezug auflet rec sum
also die interne
ist eine interne tail-rekursive Funktion eine Schleife zu erstellen, das Ergebnis
sum(0,0.0)
(mit internensum
definition) ist das Ergebnis dersigma
Funktion.Den
sum(0,0.0)
ist der Ausgangspunkt der tail-Rekursion.Ich schlage vor, Sie verwenden Ocaml-debugger, oder zumindest hinzufügen
Zeile direkt nach der
let rec sum(i,z) =
Linie.BTW, man sollte den code, anstatt eine Summe mit zwei Argumenten, nicht mit einem einzigen argument-geschehen werden ein paar:
BTW, ich würde die Schleife mit Abnehmender
i
und code stattIch bin damit einverstanden, dass meine
sigma
Funktion ist etwas anders (insbesondere, wenn das argumentf
ist eine unreine Funktion mit Nebenwirkungen). Ich nannte den internen tail-rekursive Funktionsumloop
(nicht nursum
) zu betonen, dass es eine Schleife.Ihre
z
formellensum
und meines
formellensumloop
ist eine Anhäufung teilweise Summe.sum(0, 0.0)
und nicht zum Beispielsum(4, 5.5)
?