Domanda

> 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. perché F # inizialmente si aspettava sequenze senza il "seq" prefisso, ma ora vogliono il prefisso?

È stato utile?

Soluzione

Ulteriori chiarimenti sui due moduli che hai pubblicato:

Il primo usa una comprensione diretta della sequenza, " seq {...} " ;. Il "seq" la parte era facoltativa prima, ma non sarà supportata in futuro. Suppongo che renda cose come " async {...} " e la sintassi del flusso di lavoro più difficile o qualcosa del genere.

Ora, il secondo è un puro elenco:

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

val x : float list

" seq " è anche una funzione:

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

E poiché ogni elenco è anche una sequenza, fare " seq [1; 2; 3;] " sta solo applicando la funzione seq all'elenco. È un po 'come lanciarlo su seq dal tipo di elenco.

> 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]

Modifica: l'origine della funzione seq è:

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

Quindi, "sorta come lanciarlo" dovresti leggere "lanciarlo tramite una funzione di supporto". Per quanto riguarda la stampa di sequenze tra parentesi, penso che sia solo un bel manufatto di stampa.

Altri suggerimenti

Il primo è un seq (IEnumerable).

Il secondo è strano; sbarazzarsi del 'seq' ed è una comprensione della lista (lista). Non c'è motivo di scriverlo così com'è; utilizzare seq {} o [] o [| |] per creare un seq o un elenco o un array.

Il curlies-not-prefixed-by-seq è un modulo che sarà deprecato, in quanto rende alcune altre parti del linguaggio potenzialmente ambigue.

Autorizzato sotto: CC-BY-SA insieme a attribuzione
Non affiliato a StackOverflow
scroll top