Vorrei creare un metodo in cui potrei fornire un elenco di lunghezze e restituire tutte le combinazioni di coordinate cartesiane fino a tali lunghezze. Più facile da spiegare con un esempio:Prodotto cartesiano annidato di elenchi Haskell
cart [2,5]
Prelude> [ [0,0],[0,1],[0,2],[0,3],[0,4],[1,0],[1,1],[1,2],[1,3],[1,4] ]
cart [2,2,2]
Prelude> [ [0,0,0],[0,0,1],[0,1,0],[0,1,1],[1,0,0],[1,0,1],[1,1,0],[1,1,1] ]
un elenco semplice di comprensione non funziona perché non so per quanto tempo le liste stanno per essere. Mentre adoro la semplicità di Haskell per molti problemi, questo è uno che potrei scrivere proceduralmente (in C o qualcosa) in 5 minuti mentre Haskell mi dà un aneurisma!
Una soluzione a questo problema specifico potrebbe aiutarmi molto; Mi piacerebbe anche conoscere i tuoi processi mentali quando affronti cose del genere.
Wow, grazie Kenny e Dave. Non ho mai pensato di lanciare una chiamata ricorsiva nella definizione di comprensione dell'elenco - molto interessante. La versione che utilizza la mappa e la piega è fantastica. Cerco di usare le funzioni di ordine superiore quando riesco a pensare a un modo, quindi questo è un ottimo esempio da studiare! – cspyr0
finché usi le funzioni di ordine superiore, sappi che non dovrebbe essere criptico. e usando le giuste funzioni aiuta ad arrivarci, 'sequenza' è ciò che ti serve qui. – yairchu
Grazie yairchu sia per la soluzione concisa e chiara sia per avermi fatto conoscere hoogle. Come ho fatto qualcosa senza questo ?! – cspyr0