Frage

> seq { for i in 0..3 do yield float i };;
val it : seq<float> = seq [0.0; 1.0; 2.0; 3.0]
> seq [ for i in 0..3 do yield float i ];;
val it : seq<float> = [0.0; 1.0; 2.0; 3.0]

P. S. warum hat F # ursprünglich erwarten Sequenzen ohne „seq“ Präfix, aber jetzt wollen sie das Präfix?

War es hilfreich?

Lösung

Weitere Erläuterungen zu den beiden Formen Sie auf dem Laufenden:

Die erste verwendet eine direkte Folge Verständnis, "seq {...}". Der „seq“ Teil war optional vor, aber das wird in Zukunft nicht mehr unterstützt werden. Ich denke, es Dinge wie „async {...}“ macht und die Workflow-Syntax schwieriger oder so etwas.

Nun ist die zweite eine reine Liste:

> let x = [ for i in 0..3 do yield float i ];;

val x : float list

"f" ist auch eine Funktion:

> seq;;
val it : (seq<'a> -> seq<'a>) = <fun:clo@0_1>

Und da jede Liste auch eine Folge ist, tun „seq [1; 2; 3;]“ ist nur die f-Funktion auf die Liste anwenden. Es ist sorta wie es Seq aus der Liste Typ Gießen.

> x;;
val it : float list = [0.0; 1.0; 2.0; 3.0]

> seq x;;
val it : seq<float> = [0.0; 1.0; 2.0; 3.0]

Edit: Die Quelle für die f-Funktion:

let seq (x : seq<_>) = (x :> seq<_>)

So „sorta wie es Casting“ lesen sollte „es über eine Hilfsfunktion Gießen“. Wie für den Druck von Sequenzen in Klammern, ich denke, das ist nur ein ziemlich Druck Artefakt.

Andere Tipps

Der erste ist ein seq (IEnumerable).

Die zweite ist seltsam; loszuwerden, die ‚f‘ und es ist eine Liste Verständnis (Liste). Es gibt keinen Grund, es zu schreiben wie; entweder verwenden seq {} oder [] oder [| |], Um eine seq oder eine Liste oder ein Array

.

Die curlies-not-Präfix-by-Seq ist eine Form, die veraltet sein wird, wie es einige andere Teile der Sprache möglicherweise mehrdeutig macht.

Lizenziert unter: CC-BY-SA mit Zuschreibung
Nicht verbunden mit StackOverflow
scroll top