Ein Problem hier ist, dass Sie zwei verschiedene Arten zurückgeben: ein int für eine leere Liste oder ein Tupel andernfalls. Es muss das eine oder andere sein. Ein weiteres Problem ist, dass Sie versuchen, 1 zu test
hinzuzufügen, aber test
ist eine Funktion, kein Wert. Sie müssen einen Test für etwas anderes aufrufen, damit ein Wert zurückgegeben wird. Aber selbst dann sollte ein Tupel zurückgegeben werden, das Sie keiner Ganzzahl hinzufügen können.
Ich kann nicht herausfinden, was Sie wollen, den Code zu tun, aber wenn Sie Ihre Frage mit dieser Info aktualisieren, kann ich mehr helfen.
Eine Vermutung, die ich habe, ist, dass Sie die positiven Zahlen in der Liste zählen möchten, in dem Fall, dass Sie es so schreiben könnte:
let rec test l =
match l with [] -> 0
| x::xs -> if x > 0 then 1 + (test xs)
else test xs;;
aktualisieren: da Sie bearbeitet haben zu klären, das Problem, ändern Sie den obigen Code wie folgt:
let test l =
let rec test_helper l pos nonpos =
match l with [] -> (pos, nonpos)
| x::xs -> if x > 0 then test_helper xs 1+pos, nonpos
else test_helper xs pos 1+nonpos
in test_helper l 0 0;;
Die Verwendung der Akkus helfen in diesem Fall viel. Es macht auch die Funktion tail-recursive, was immer eine gute Übung ist.
Können Sie etwas genauer angeben, was diese Funktion zurückgeben soll? Was repräsentiert das Paar von ganzen Zahlen? – goggin13
so sollte es ein Paar von Ganzzahl als (x, y), die Tupel in ocaml ist , dass nur Problem, das ich konfrontiert habe Tupel Berechnung .. so ist es, wenn ein Element der Liste ist weniger als eine Zahl dann (x +1, y) else (x, y + 1), so dass der Rückgabewert (x, y) ist, wobei x die Anzahl der Elemente ist, die größer als eine Zahl ist und y kleiner als – REALFREE