La funzione foldl
è dotata di un rigoroso analogico foldl'
. C'è un motivo per cui scanl
non ha bisogno di un'alternativa scanl'
o semplicemente non lo includono nella libreria standard?Perché non c'è una funzione scanl nella libreria standard Haskell?
9
A
risposta
11
Non ce n'è bisogno. La severità di foldl'
consente di eliminare immediatamente thunk mentre attraversa la sua lista di input.
foldl' (+) 0 [1,2,3] foldl (+) 0 [1,2,3]
foldl' (+) 1 [2,3] foldl (+) (0 + 1) [2,3]
foldl' (+) 3 [3] foldl (+) ((0 + 1) + 2) [3]
foldl' (+) 6 [] foldl (+) (((0 + 1) + 2) + 3) []
6 (((0 + 1) + 2) + 3)
((1 + 2) + 3)
(3 + 3)
6
Ma quando lo fai scanl
produce un elenco contenente ogni uno di quei passi
scanl (+) 0 [1,2,3]
[ 0
, 0 + 1
, (0 + 1) + 2
, ((0 + 1) + 2) + 3
]
E si deve attraversare l'intero elenco per vedere il risultato finale che permette di controllare come i thunk sono costretti . Ciò spinge il controllo della valutazione al consumatore della lista.
6
Beh, io non sono sicuro se scanl'
non bisogno è, ma probabilmente è un bisogno molto più rara di quanto foldl'
, dal momento che in genere consumano il risultato di scanl
elemento per elemento, e quindi forzo come si va esattamente come fa foldl'
.
Problemi correlati
- 1. Perché non c'è nessun << nella libreria standard Haskell?
- 2. Esiste una funzione `flip` nella libreria standard OCaml?
- 3. Esiste una funzione virtuale pura nella libreria standard C++?
- 4. Versione stampabile della libreria standard Haskell
- 5. PEP 257 assestamento docstring nella libreria standard?
- 6. Perché alcuni identificatori nella libreria C++ standard sono brevi?
- 7. Chiamare una funzione di libreria standard nel gestore di segnale
- 8. Perché Rust esporta l'intera libreria standard quando crea una DLL?
- 9. boost :: alternativa opzionale nella libreria standard C++
- 10. Metodi free-side nella libreria standard Java
- 11. Diagnosi EXC_BAD_INSTRUCTION nella libreria standard Swift
- 12. Perché sto ottenendo "Modelli non esaustivi nella funzione ..." quando invoco la mia funzione di sottostringa Haskell?
- 13. Esiste una funzione XOR logica (booleana) nella libreria standard C o C++?
- 14. La libreria F # ha una funzione standard per `argMax`?
- 15. Esiste una soluzione di libreria standard per questo problema di Haskell?
- 16. Esiste una funzione standard Haskell che prepone un parametro aggiuntivo a una funzione
- 17. Perché CPython non utilizza `sphinx.autodoc` per la libreria standard?
- 18. Risultati di memorizzazione nella cache di Haskell di una funzione
- 19. Haskell o Standard ML per principianti?
- 20. Errore "Programmazione in Haskell" nella funzione sat
- 21. Qual è l'equivalente di boost :: make_transform_iterator nella libreria standard?
- 22. perché $ _GET non funziona nella funzione intestazione?
- 23. È corretto lanciare eccezioni definite nella libreria standard C++?
- 24. libreria standard `tipo file`
- 25. GHC non può mai realmente mappare, scanl, foldr, ecc.?
- 26. C'è una ragione per cui non c'è std :: identity nella libreria standard?
- 27. Perché Haskell insiste a rimuovere l'ultimo argomento di una funzione?
- 28. Perché la mia funzione Haskell non accetta numeri negativi?
- 29. affettare una fetta utilizzando la libreria standard
- 30. Esiste una libreria Haskell standard che si occupa della comunicazione di processo?