C'è un modo più idiomatico per esprimere questo modello in F #:F #: Esiste un modo idiomatico per sostituire le espressioni seq {} dei cicli?
seq {
for item1 in list1 do
for item2 in list2 do
yield f(item1,item2)
}
Grazie!
C'è un modo più idiomatico per esprimere questo modello in F #:F #: Esiste un modo idiomatico per sostituire le espressioni seq {} dei cicli?
seq {
for item1 in list1 do
for item2 in list2 do
yield f(item1,item2)
}
Grazie!
Questo schema è tanto idiomatico quanto diventa.
solito alternativa è quella di utilizzare una pipeline di funzioni di ordine superiore come Seq.map
o Seq.filter
, ma per il vostro caso particolare - prodotto cartesiano - un approccio di comprensione sequenza brilla davvero e non sarà possibile ottenere nulla vicino così semplice altrimenti.
In pratica si tratta di una chiamata di giudizio che stile usare. Io tendo a preferire l'approccio della pipeline, solo per rendermi conto di quanto sia più chiaro un approccio di comprensione della sequenza.
Finché, come non hai bisogno di nulla di complicato, come le caratteristiche imperative o di appiattimento di sub-espressioni (yield!
), è possibile utilizzare una sintassi un po 'meno verbose:
seq { for item1 in list1 do
for item2 in list2 -> f(item1, item2) }
questo * si * ** appiattisce ** i rendimenti dal secondo 'for';) – Carsten
intendevo più come tree traversal, dove si combina l'appiattimento di un albero figlio con la generazione di un singolo elemento –
proprio come un commento - si ho bisogno di 'Seq.collect' o' Seq.concat' (i metodi monadici) per * tradurre * qualcosa con più di un 'for' in esso (dovrebbe essere il caso in quanto non ha senso usare' seq {...} 'su una semplice' mappa' o 'filtro' altrimenti – Carsten
@ CarstenKönig: true - un vero esempio di come implementarlo usando' Seq.map' nidificato in 'Seq.collect' si trova nel thread collegato. comprensione per la semplice mappatura/filtraggio - Penso che ci siano alcuni che sarebbero disa gree (Penso che Tomas Petricek abbia recentemente scritto che preferisce quello stile). – scrwtp