Se ho due stringhe utilizzare un elenco di comprensione per ottenere il risultato desiderato:Haskell di lista in numero variabile di corde
combineStrings firstStr sndStr = [ [a,b] | a <- firstStr, b <- sndStr]
Per tre corde, io uso questo
combineStrings firstStr sndStr trdStr = [ [a,b,c] | a <- firstStr, b <- sndStr, c <- trdStr]
Quello che ho sto cercando di ottenere lo stesso risultato per un numero variabile di stringhe. Per esempio, se ho una funzione che prende la seguente forma:
combineStrings :: [String] -> [String]
sto cercando di ottenere gli stessi risultati di cui sopra per 2, 3 ... n liste ... Ho provato diversi modi, come questo uno
combineStrings [] = []
combineStrings (hd:tl) = [ a:b | a <- hd, b <- combineStrings tl]
ma questo non riesce a causa di [] sulla prima clausola. Qualcuno può aiutarmi a scrivere questo, per favore?
Come regola generale, è possibile provare a rendere i tipi il più generici possibile. Qui il tuo codice non è specifico per le stringhe e può essere utilizzato per tutte le liste, quindi puoi scrivere 'combineStrings :: [[a]] -> [[a]]'. Quindi, la prima riga della risposta di undur_gongor può essere scritta 'combineStrings [] = [[]]'. Puoi anche provare a scrivere 'combineStrings' usando' foldr', dato che si adatta al modello di piega. – sdcvvc