This FAQ dice checosto Tempo di Haskell `operatore seq`
L'operatore ss è
seq :: a -> b -> b
x
seq
y valuterà x, abbastanza per controllare che non è basso, poi scarto il risultato e valutare y. Questo potrebbe non sembrare utile, ma è che significa che x è valutato per essere valutato prima che y venga considerato.
Questo è tremendamente bello di Haskell, ma vuol dire che in
x `seq` f x
verrà pagato il costo di valutare x
due volte ("scartare il risultato")?
Forse "scartare il risultato" è troppo forte. Scarta il risultato nello stesso modo in cui 'const' scarta il suo secondo argomento. Se l'argomento è stato valutato, in qualche modo non lo giudica o getta via il risultato, lo ignora semplicemente. "x' seq' y valuterà x, abbastanza per verificare che non sia inferiore, quindi _ignore_ il risultato e valutare y "è forse un modo migliore per esprimerlo. – MatrixFrog
Comincia a rendermi conto di quanto il modello di calcolo di Haskell sia diverso dal mio linguaggio di programmazione principale (C++). –