Ispirato da Comparing list lengthConfrontando lunghezza della lista con le frecce
Se voglio trovare la più lunga lista in una lista di liste, il modo più semplice è probabilmente:
longestList :: [[a]] -> [a]
longestList = maximumBy (comparing length)
Un modo più efficace sarebbe precaricare le lunghezze:
Ora, voglio fare un ulteriore passo avanti. Potrebbe non essere più efficiente per i casi normali, ma puoi risolvere questo utilizzando le frecce? La mia idea è fondamentalmente, scorrere tutti gli elenchi contemporaneamente e continuare a fare un passo avanti fino a quando non hai oltrepassato la lunghezza di ogni elenco tranne il più lungo.
longest [[1],[1],[1..2^1000],[1],[1]]
Nel rinuncia esempio (molto artificiosa), si avrebbe solo a fare due passi attraverso ciascuna lista al fine di determinare che l'elenco [1..2^1000]
è la più lunga, senza la necessità di determinare l'intera lunghezza di detto elenco . Ho ragione che questo può essere fatto con le frecce? Se è così, allora come? Se no, allora perché no, e come potrebbe essere implementato questo approccio?
Non vedo alcuna connessione con le frecce. – luqui
@luqui una sezione di Haskell Wikibook su [Using arrows] (http://en.wikibooks.org/wiki/Haskell/Understanding_arrows#Using_arrows) sembrava indicare che le frecce erano utili per l'analisi in un modo simile al mio soluzione proposta a questo problema (guarda il primo elemento di ogni lista, poi il secondo, ecc.) [Stephen's Arrow Tutorial] (http: //en.wikibooks.org/wiki/Haskell/StephensArrowTutorial) mi ha dato la stessa sensazione: che le frecce potessero essere usate per scavare in queste liste e archiviare le informazioni mentre vanno. –
Ho accettato una risposta, ma se qualcuno può suggerire una risposta con le frecce, o spiegare a fondo perché le frecce non sono pertinenti, allora accetterò certamente quella invece. –