Ich habe mit einigen f # Parsern und einige Streaming-Software gearbeitet und ich finde mich damit Muster mehr und mehr. Ich finde es eine natürliche Alternative zu Sequenzen und es hat einige natürliche Vorteile. Hier sind einige Beispielfunktionen, die den Typ verwenden.Gibt es einen Namen für dieses Muster "Typ 'eine gefalteteSequenz = leer | Wert von' a * (Einheit -> 'eine gefaltete Sequenz)"
type foldedSequence<'a> =
| Empty
| Value of ' a * (unit -> 'a foldedSequence)
let rec createFoldedSequence fn state =
match fn state with
| None -> Empty
| Some(value, nextState) ->
Value(value, (fun() -> unfold fn nextState))
let rec filter predicate =
function
| Empty -> Empty
| Value(value, nextValue) ->
let next() = filter predicate(nextValue())
if predicate value then Value(value, next)
else next()
let toSeq<'t> =
Seq.unfold<'t foldedSequence, 't>(function
| Empty -> None
| Value(value, nextValue) -> Some(value, nextValue()))
Es ist sehr hilfreich gewesen wäre ich gerne wissen, ob es einen Namen hat, so kann ich es einige Tipps und Tricks Forschung
FWIW „predecate“ sollte wohl „Prädikat“ sein;) –
welche Art werden über Sie fragen, der eine im Titel oder der andere im Fragenkörper? das letzte ist ein Strom, der entweder leer ist, oder ein Paar, das den gegenwärtigen Wert und die Funktion hält, um den folgenden Strom zu produzieren. –
Sorry, dass ich mich in der Kopfzeile vertippt habe, frage ich nach dem Stream 'type foldedSequence <'a> = Empty | Wert von 'a * (Einheit ->' a foldedSequence) ' –