Rückkehr der N-te element einer Liste in OCaml?
Ich bin neu in Ocaml, nur wollen, stellen Sie sicher, wie führen Sie eine einfache Funktion wie die Rückkehr der N-te element einer Liste durch die Verwendung von rekursiven Funktion?
Prototyp wie get_nth (list, n)
mit int list * int -> int
beispielsweise get_nth ([1,2,3], 1) -> 2
Danke
- Das klingt wirklich wie eine Hausaufgaben-problem. Würde es helfen, wenn Sie zeigte einige code, den Sie versucht haben, die nicht Arbeit als Sie haben gehofft.
InformationsquelleAutor Allan Jiang | 2012-03-20
Schreibe einen Kommentar Antworten abbrechen
Du musst angemeldet sein, um einen Kommentar abzugeben.
Können Sie nicht bemerken, aber
List.nth
Funktion ist bereits in Listen-Modul.Wenn Sie möchten, schreiben Sie es mit Rekursion:
Mit Tupel als Parameter, wie das ist nicht üblich in OCaml. Normalerweise würden Sie verwenden, currying und definieren Sie Ihre Funktion wie folgt:
Hätte dies die Signatur
'a list -> int -> 'a
. Beachten Sie auch, dass Sie eine'a
Parameter hier, was bedeutet, es gibt keinen wirklichen Grund zur Einschränkung Ihrer Funktion auf int-Werte allein.Nun schauen wir uns das problem. Wenn Sie möchten, um die nullte element, was wäre deine Funktion Aussehen?
nun, wenn Sie haben eine Funktion, um das N-te element aus einer Liste mit m Elementen (N. B. n > m), wie könnte Sie verwenden diese Funktion, um einen anderen bauen, der Funktion, die die n+1. element aus einer Liste mit m+1 Elementen? Lassen Sie diese Funktion auch für n+1 Elemente
get_nth'
Alles was Sie jetzt tun müssen, ist, um die beiden zu verbinden und Sie sind fertig. Ich werde verlassen, dass der Letzte Teil bis zu Sie.
Wenn Sie diese Ratschläge befolgen, die Sie erhalten etwas, das komplizierter ist, als es sein muss. Aber es ist leichter zu verstehen, was geschieht auf diese Weise.
(Meiner Meinung nach) Eine einfachere Lösung ohne Verwendung eines Tupel werden kann:
Habe ich gelesen hier, dass die Verwendung
Result
anstatt Fehler kann schöner sein, da Sie nicht über die Verwendung einertry ... with
. (Code bearbeitet von @Omar)Result
ist TeilCore.Std
, wenn ich richtig bin.