Okay,Seuqences in ML (finite & infinnite)
ich die nächste Definition der Sequenz haben:
datatype 'a seq = Nil | Cons of 'a * (unit-> 'a seq);
ich die nächste Funktion implementieren müssen:
filterq_n:('a -> bool) -> int -> 'a seq -> 'a seq
Die Funktion erhält eine Prädikatfunktion, die wahr oder falsch, n (ganze Zahl) und Sequenz zurückgibt.
Die Funktionalität:
- wenn n = 0 < Rückkehr der gleiche Seq.
- sonst geben Sie einen Seq zurück, dass seine ersten n Elemente die ersten n Elemente im ursprünglichen Seq sind, dass das Prädikat für sie wahr zurückgibt und der Rest derselbe sein wird.
Wenn beispielsweise das Prädikat (x mod 2) und die Seq 1,2,3,4,5 ... und n 3, so dass die neue seq ist 2,4,6 , 7,8, ...
Außerdem sollte ich noch 2 Optionen prüfen:
2.1), wenn die f endlich ist und weniger als n Elemente, die Renditen gilt für sie dann die neue seq Prädikat enthält nur die Elemente, die Prädikatswerte für sie zurückgibt. Wenn das Seq unendlich ist und weniger als n Elemente enthält, die das Prädikat für sie zurückgibt, dann enthält das neue Seq alle Elemente, die das Prädikat für sie zurückgibt und wenn es versucht, das nächste Element zu erhalten, in das es eintreten wird eine Endlosschleife.
logisch Mein aktueller Code wurde nun geplant, ohne 2.1 und 2.2 unter Berücksichtigung (auch wenn ich Fehler bekommen und finden kann, warum?)
fun filter_n (predicate: 'a -> bool) (n: int) Nil = Nil
| filter_n (predicate: 'a -> bool) (n: int) (Cons(x, xf)) =
if(n <= 0) then Cons(x, xf)
else
if predicate x then Cons(x, fn() => filter_n predicate n-1 (xf()))
else filter_n predicate n-1 (xf())
;
Syntaxfehler oder drastischer change..I ist nicht sicher?
(auch für 2.1 am 2.2 Ich brauche nur das zu überprüfen, ob ich bekam (Nil und n> 0), dann Nil zurückkehren?)
Vielen Dank im Voraus für jede Hilfe.
Hinweis für die Zukunft: Wenn Sie eine Compiler-Fehlermeldung erhalten, sollten Sie es in Ihrer Frage angeben und nicht nur sagen, dass Sie einen Fehler erhalten. Auf diese Weise können die Beantworter den Fehler leichter finden. – sepp2k